python 游戲(井字棋)


1. 游戲思路和流程圖

實現功能,現實生活中的井字棋玩法

游戲流程圖

2. 使用模塊和游戲提示

import random
def game_info():
print('歡迎來到井字棋游戲')
print('輸入數字1~9進行下棋')

3. 棋盤顯示

def display_board(checkerboard):
'''棋盤顯示'''
print(' '.join(checkerboard[6:9]))
print(' '.join(checkerboard[3:6]))
print(' '.join(checkerboard[:3]))

4. 用戶下棋輸入限制

def chess_limited(number,checkerboard):
'''用戶落棋限制
:param number 用戶輸入
:param checkerboard 棋盤列表
:return 返回驗證過的用戶輸入'''
while True:
if not number.isdigit():
print('請輸入整數數字')
elif number not in '1 2 3 4 5 6 7 8 9'.split():
print('請輸入1~9之間的數字')
elif checkerboard[int(number)-1]!='_':
print('棋盤上已經有棋子了')
else:
break
number = input()
return int(number)

5. 雙選驗證

def Double_choice(a,b,hint):
'''雙選擇驗證函數
:param a 第一個選項值
:param b 第二個選項值
:param hint 選項信息
:return 返回輸入值'''
choice=''
while choice.lower() !=a and choice.lower() !=b:
print(hint)
choice=input()
return choice

6. 獲勝驗證

def referee(choice,checkerboard):
'''判斷誰勝利了還是平局'''
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):
'''用戶選擇落子點
:param user_choice 用戶所選棋子
:param checkerboard 棋盤列表
:param 返回用戶落子完后的棋盤列表'''
print('請你選擇落子點')
number=chess_limited(input(),checkerboard)
checkerboard[number-1]=user_choice
return checkerboard

7. 電腦落子處理

def compute_play(compute_choice,checkerboard):
'''電腦選擇落子點(電腦ai)
:param compute_choice 電腦所選的棋子
:param checkerboard 棋盤
:return 電腦下過的棋盤'''
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: #角落點
checkerboard =angle
return checkerboard
center=choice_random(compute_choice,checkerboard,[4])
if center: #中心落點
checkerboard = center
return checkerboard
side = choice_random(compute_choice, checkerboard, [1, 3, 5, 7])
if side: #邊落點
checkerboard =side
return checkerboard
return checkerboard

8. 電腦獲勝

def compute_win(compute_choice,checkerboard):
'''獲勝的方法(模擬算法)
:return 獲勝的棋盤, False 沒有可落子的地方'''
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 阻止用戶獲勝的棋盤 False 沒有可以阻止的落子'''
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. 電腦隨機落點

def choice_random(compute_choice,checkerboard,choice_list):
'''隨機下棋點'''
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)] #棋盤列表
compute_choice = 'O' if user_choice.lower()=='x' else 'X'
if sequence_flag: #顯示棋盤
print('玩家先走')
else:
checkerboard=compute_play(compute_choice,checkerboard) #電腦先走棋盤
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() # 游戲開始提示
user_choice = Double_choice('x', 'o', hint='請選擇你的棋子 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. 運行游戲

game_shell()



python學習途徑

本游戲參考書本 <<Python游戲編程快速上手>>

友情推薦:  猿人學Python【 https://www.yuanrenxue.com/】 由一群工作十余年的老程序員結合實際工作經驗所寫的Python教程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM