python写井字棋_python 游戏(井字棋)
1. 游戲思路和流程圖
實(shí)現(xiàn)功能,現(xiàn)實(shí)生活中的井字棋玩法
游戲流程圖SRE實(shí)戰(zhàn) 互聯(lián)網(wǎng)時(shí)代守護(hù)先鋒,助力企業(yè)售后服務(wù)體系運(yùn)籌帷幄!一鍵直達(dá)領(lǐng)取阿里云限量特價(jià)優(yōu)惠。
2. 使用模塊和游戲提示
import random
def game_info():
print('歡迎來(lái)到井字棋游戲')
print('輸入數(shù)字1~9進(jìn)行下棋')
3. 棋盤(pán)顯示
def display_board(checkerboard):
'''棋盤(pán)顯示'''
print(' '.join(checkerboard[6:9]))
print(' '.join(checkerboard[3:6]))
print(' '.join(checkerboard[:3]))
4. 用戶下棋輸入限制
def chess_limited(number,checkerboard):
'''用戶落棋限制
:param number 用戶輸入
:param checkerboard 棋盤(pán)列表
:return 返回驗(yàn)證過(guò)的用戶輸入'''
while True:
if not number.isdigit():
print('請(qǐng)輸入整數(shù)數(shù)字')
elif number not in '1 2 3 4 5 6 7 8 9'.split():
print('請(qǐng)輸入1~9之間的數(shù)字')
elif checkerboard[int(number)-1]!='_':
print('棋盤(pán)上已經(jīng)有棋子了')
else:
break
number = input()
return int(number)
5. 雙選驗(yàn)證
def Double_choice(a,b,hint):
'''雙選擇驗(yàn)證函數(shù)
:param a 第一個(gè)選項(xiàng)值
:param b 第二個(gè)選項(xiàng)值
:param hint 選項(xiàng)信息
:return 返回輸入值'''
choice=''
while choice.lower() !=a and choice.lower() !=b:
print(hint)
choice=input()
return choice
6. 獲勝驗(yàn)證
def referee(choice,checkerboard):
'''判斷誰(shuí)勝利了還是平局'''
if checkerboard[0] == choice and checkerboard[1] == choice and checkerboard[2] == choice:
return True #123
if checkerboard[3] == choice and checkerboard[4] == choice and checkerboard[5] == choice:
return True #456
if checkerboard[6] == choice and checkerboard[7] == choice and checkerboard[8] == choice:
return True #789
if checkerboard[0] == choice and checkerboard[3] == choice and checkerboard[6] == choice:
return True #147
if checkerboard[1] == choice and checkerboard[4] == choice and checkerboard[7] == choice:
return True #258
if checkerboard[2] == choice and checkerboard[5] == choice and checkerboard[8] == choice:
return True #369
if checkerboard[2] == choice and checkerboard[4] == choice and checkerboard[6] == choice:
return True #357
if checkerboard[0] == choice and checkerboard[4] == choice and checkerboard[8] == choice:
return True #159
return False
6. 用戶落子處理
def user_play(user_choice,checkerboard):
'''用戶選擇落子點(diǎn)
:param user_choice 用戶所選棋子
:param checkerboard 棋盤(pán)列表
:param 返回用戶落子完后的棋盤(pán)列表'''
print('請(qǐng)你選擇落子點(diǎn)')
number=chess_limited(input(),checkerboard)
checkerboard[number-1]=user_choice
return checkerboard
7. 電腦落子處理
def compute_play(compute_choice,checkerboard):
'''電腦選擇落子點(diǎn)(電腦ai)
:param compute_choice 電腦所選的棋子
:param checkerboard 棋盤(pán)
:return 電腦下過(guò)的棋盤(pán)'''
copy_win=compute_win(compute_choice,checkerboard)
if copy_win: #電腦獲勝
checkerboard=copy_win
return checkerboard
user_win=prevent_user_win(compute_choice, checkerboard)
if user_win: #阻止用戶獲勝
checkerboard = user_win
return checkerboard
angle=choice_random(compute_choice,checkerboard,[0,2,6,8])
if angle: #角落點(diǎn)
checkerboard =angle
return checkerboard
center=choice_random(compute_choice,checkerboard,[4])
if center: #中心落點(diǎn)
checkerboard = center
return checkerboard
side = choice_random(compute_choice, checkerboard, [1, 3, 5, 7])
if side: #邊落點(diǎn)
checkerboard =side
return checkerboard
return checkerboard
8. 電腦獲勝
def compute_win(compute_choice,checkerboard):
'''獲勝的方法(模擬算法)
:return 獲勝的棋盤(pán), False 沒(méi)有可落子的地方'''
compute_choice=compute_choice.lower()
for i in range(9):
copy_board = checkerboard.copy()
if copy_board[i]=='_':
copy_board[i]=compute_choice
if referee(compute_choice,copy_board):
checkerboard[i] = compute_choice
return checkerboard
return False
9. 阻止玩家獲勝
def prevent_user_win(compute_choice,checkerboard):
'''阻止玩家獲勝(模擬玩家獲勝下子)
:return 阻止用戶獲勝的棋盤(pán) False 沒(méi)有可以阻止的落子'''
user_choice = 'O' if compute_choice.lower() == 'x' else 'X'
user_choice=user_choice.lower()
for i in range(9):
copy_board = checkerboard.copy()
if copy_board[i] == '_':
copy_board[i] = user_choice
if referee(user_choice, copy_board):
#成功阻止玩家獲勝....
checkerboard[i]=compute_choice
return checkerboard
return False
10. 電腦隨機(jī)落點(diǎn)
def choice_random(compute_choice,checkerboard,choice_list):
'''隨機(jī)下棋點(diǎn)'''
for i in choice_list:
if checkerboard[i]=='_':
checkerboard[i]=compute_choice
return checkerboard
return False
11. 游戲主程序
def game_start(user_choice,sequence_flag):
'''游戲核心處理
:param user_choice 用戶所選棋子
:param sequence_flag 決定先后手'''
checkerboard=['_' for i in range(9)] #棋盤(pán)列表
compute_choice = 'O' if user_choice.lower()=='x' else 'X'
if sequence_flag: #顯示棋盤(pán)
print('玩家先走')
else:
checkerboard=compute_play(compute_choice,checkerboard) #電腦先走棋盤(pán)
print('電腦先走')
while True:
display_board(checkerboard)
checkerboard = user_play(user_choice, checkerboard)
if referee(user_choice,checkerboard):
print('用戶贏了...')
display_board(checkerboard)
break
checkerboard = compute_play(compute_choice, checkerboard)
if referee(compute_choice,checkerboard):
print('電腦贏了...')
display_board(checkerboard)
break
if '_' not in checkerboard:
print('平局...')
display_board(checkerboard)
break
12. 游戲外殼
def game_shell():
'''外殼程序'''
game_info() # 游戲開(kāi)始提示
user_choice = Double_choice('x', 'o', hint='請(qǐng)選擇你的棋子 X or O')
sequence_flag = random.randint(0, 1)
game_start(user_choice,sequence_flag)
while True:
message='你想在玩一次嗎(Y or N)'
again_flag=Double_choice('y','n',message)
if again_flag=='n':
break
if sequence_flag:
sequence_flag=0
else:
sequence_flag=1
game_start(user_choice,sequence_flag)
13. 運(yùn)行游戲
game_shell()
掃碼關(guān)注我們
微信號(hào):SRE實(shí)戰(zhàn)
拒絕背鍋 運(yùn)籌帷幄
×
選擇打賞方式:
微信
QQ錢(qián)包
支付寶
打賞
打賞
打賞
多少都是心意!謝謝大家!!!
×
選擇分享方式:
微信掃一掃,分享朋友圈
Or
手機(jī)掃一掃,精彩隨身帶
總結(jié)
以上是生活随笔為你收集整理的python写井字棋_python 游戏(井字棋)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: K12在线教育产品分析:北京四中网校
- 下一篇: python 爬虫 微博 github_