python五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)
這個(gè)python的小案例是五子棋游戲的實(shí)現(xiàn),在這個(gè)案例中,我們可以實(shí)現(xiàn)五子棋游戲的兩個(gè)玩家在指定的位置落子,畫出落子后的棋盤,并且根據(jù)函數(shù)判斷出輸贏的功能。
這個(gè)案例的思路如下所示:
首先,根據(jù)棋盤的樣子畫出棋盤
然后,對(duì)棋盤進(jìn)行初始化,將可以落子的位置進(jìn)行統(tǒng)一化處理
接下來(lái),就是進(jìn)入游戲的環(huán)節(jié),雙方輪流落子,落子后,并將棋盤畫出
最后,根據(jù)落子的位置判斷選手的的輸贏情況,游戲結(jié)束
五子棋游戲的設(shè)計(jì)和實(shí)現(xiàn)
代碼如下:
def main(): print("五子棋游戲".center(50,'=')) guige=int(input("請(qǐng)輸入棋盤的規(guī)格:")) #按照五子棋的棋盤樣式,畫出棋盤 print_init(guige) # 初始化棋盤 wzq = {} for i in range(1, guige + 1): for j in range(1, guige + 1): wzq[(i, j)] = "+" #重畫棋盤 reprint(guige,wzq) #按照五子棋的棋盤樣式,畫出棋盤 def print_init(guige): #打印出首行的棋盤列 for i in range(guige): print("%4d"%(i+1),end='') print() #雙重循環(huán),第一重為棋盤的行,隔一行輸出棋盤的行數(shù) for i in range(guige*2-1): #打印出類似 “1 +---+---+---+---+---+”,行號(hào),+,— if(i%2==0): print("%-3d"%((i+2)/2),end='') #第二重循環(huán),為棋盤的列,主要在于找出對(duì)應(yīng)位置顯示的內(nèi)容 for j in range(guige * 4 - 3): if (j % 4 == 0): print("+", end='') else: print("-", end='') #打印出類似“ | | | | | |” else: print("%3s"%' ',end='') for j in range(guige*4-3): if(j%4==0): print("|",end='') else: print(" ",end='') #每行輸出完成之后換行 print() #重畫棋盤,對(duì)雙方下子進(jìn)行重畫 def reprint(guige,wzq): for i in range(guige*guige) : if i % 2 == 0: xuanshou = "X" else: xuanshou = "O" # 雙方輪流下棋 while 1: print("現(xiàn)在輪到%s方落子" % xuanshou) position = input("請(qǐng)輸入落子位置:") x_position = int(position.split()[0]) y_position = int(position.split()[1]) #判斷輸入的位置是否有子,有子一直輸入,直到輸入的位置無(wú)子 if wzq[(x_position, y_position)] in ["X", "O"]: print("您輸入的位置有子,請(qǐng)重新輸入!") else: break if wzq[(x_position, y_position)]=="+": #重畫棋盤 wzq[(x_position, y_position)] = xuanshou for i in range(guige): print("%4d"%(i+1),end='') print() for i in range(guige*2-1): if(i%2==0): print("%-3d"%((i+2)/2),end='') for j in range(guige * 4 - 3): if (j % 4 == 0): x=(i+2)/2 y=j/4+1 print(wzq[(x,y)],end='') else: print("-", end='') else: print("%3s"%' ',end='') for j in range(guige*4-3): if(j%4==0): print("|",end='') else: print(" ",end='') print() else: isture=True print("您輸入的位置已經(jīng)有子,請(qǐng)重新輸入!") # 判斷輸贏 # 第一種情況 wzq_win1(wzq,guige,xuanshou) # 第二種情況 wzq_win2(wzq,guige,xuanshou) # 第三種情況 wzq_win3(wzq,guige,xuanshou) # 第四種情況 wzq_win4(wzq,guige,xuanshou) else: print("游戲結(jié)束,平局!") # 判斷輸贏 def wzq_win1(wzq,guige,xuanshou): # 第一種輸贏情況 for i in range(1, guige + 1): for j in range(1, guige - 3): if (wzq[(i, j)] == wzq[(i, j + 1)] == wzq[(i, j + 2)] == wzq[(i, j + 3)] == wzq[(i, j + 4)] and wzq[(i, j)] in ["X", "O"]): print("%s獲勝,游戲結(jié)束!" % xuanshou) exit() def wzq_win2(wzq,guige,xuanshou): # 第二種輸贏情況 for i in range(1, guige - 3): for j in range(1, guige + 1): if (wzq[(i, j)] == wzq[(i + 1, j)] == wzq[(i + 2, j)] == wzq[(i + 3, j)] == wzq[(i + 4, j)] and wzq[(i, j)] in ["X", "O"]): print("%s獲勝,游戲結(jié)束!" % xuanshou) exit() def wzq_win3(wzq,guige,xuanshou): # 第三種輸贏情況 for i in range(1, guige - 3): for j in range(1, guige - 3): if (wzq[(i, j)] == wzq[(i + 1, j + 1)] == wzq[(i + 2, j + 2)] == wzq[(i + 3, j + 3)] == wzq[(i + 4, j + 4)] and wzq[(i, j)] in ["X", "O"]): print("%s獲勝,游戲結(jié)束!" % xuanshou) exit() def wzq_win4(wzq, guige, xuanshou): # 第四種輸贏情況 for i in range(1, guige - 3): for j in range(5, guige + 1): if (wzq[(i, j)] == wzq[(i +1, j - 1)] == wzq[(i + 2, j - 2)] == wzq[(i + 3, j - 3)] == wzq[(i + 4, j - 4)] and wzq[(i, j)] in ["X", "O"]): print("%s獲勝,游戲結(jié)束!" % xuanshou) exit() main()
結(jié)果如下:
======================五子棋游戲======================= 請(qǐng)輸入棋盤的規(guī)格:8 1 2 3 4 5 6 7 8 1 +---+---+---+---+---+---+---+ | | | | | | | | 2 +---+---+---+---+---+---+---+ | | | | | | | | 3 +---+---+---+---+---+---+---+ | | | | | | | | 4 +---+---+---+---+---+---+---+ | | | | | | | | 5 +---+---+---+---+---+---+---+ | | | | | | | | 6 +---+---+---+---+---+---+---+ | | | | | | | | 7 +---+---+---+---+---+---+---+ | | | | | | | | 8 +---+---+---+---+---+---+---+ 現(xiàn)在輪到X方落子 請(qǐng)輸入落子位置:5 5 1 2 3 4 5 6 7 8 1 +---+---+---+---+---+---+---+ | | | | | | | | 2 +---+---+---+---+---+---+---+ | | | | | | | | 3 +---+---+---+---+---+---+---+ | | | | | | | | 4 +---+---+---+---+---+---+---+ | | | | | | | | 5 +---+---+---+---X---+---+---+ | | | | | | | | 6 +---+---+---+---+---+---+---+ | | | | | | | | 7 +---+---+---+---+---+---+---+ | | | | | | | | 8 +---+---+---+---+---+---+---+ 現(xiàn)在輪到O方落子 請(qǐng)輸入落子位置:6 1 1 2 3 4 5 6 7 8 1 +---+---+---+---+---+---+---+ | | | | | | | | 2 +---+---+---+---+---+---+---+ | | | | | | | | 3 +---+---+---+---+---+---+---+ | | | | | | | | 4 +---+---+---+---+---+---+---+ | | | | | | | | 5 +---+---+---+---X---+---+---+ | | | | | | | | 6 O---+---+---+---+---+---+---+ | | | | | | | | 7 +---+---+---+---+---+---+---+ | | | | | | | | 8 +---+---+---+---+---+---+---+ 現(xiàn)在輪到X方落子 請(qǐng)輸入落子位置:4 4 1 2 3 4 5 6 7 8 1 +---+---+---+---+---+---+---+ | | | | | | | | 2 +---+---+---+---+---+---+---+ | | | | | | | | 3 +---+---+---+---+---+---+---+ | | | | | | | | 4 +---+---+---X---+---+---+---+ | | | | | | | | 5 +---+---+---+---X---+---+---+ | | | | | | | | 6 O---+---+---+---+---+---+---+ | | | | | | | | 7 +---+---+---+---+---+---+---+ | | | | | | | | 8 +---+---+---+---+---+---+---+ 現(xiàn)在輪到O方落子 請(qǐng)輸入落子位置:5 4 1 2 3 4 5 6 7 8 1 +---+---+---+---+---+---+---+ | | | | | | | | 2 +---+---+---+---+---+---+---+ | | | | | | | | 3 +---+---+---+---+---+---+---+ | | | | | | | | 4 +---+---+---X---+---+---+---+ | | | | | | | | 5 +---+---+---O---X---+---+---+ | | | | | | | | 6 O---+---+---+---+---+---+---+ | | | | | | | | 7 +---+---+---+---+---+---+---+ | | | | | | | | 8 +---+---+---+---+---+---+---+ 現(xiàn)在輪到X方落子 請(qǐng)輸入落子位置:6 6 1 2 3 4 5 6 7 8 1 +---+---+---+---+---+---+---+ | | | | | | | | 2 +---+---+---+---+---+---+---+ | | | | | | | | 3 +---+---+---+---+---+---+---+ | | | | | | | | 4 +---+---+---X---+---+---+---+ | | | | | | | | 5 +---+---+---O---X---+---+---+ | | | | | | | | 6 O---+---+---+---+---X---+---+ | | | | | | | | 7 +---+---+---+---+---+---+---+ | | | | | | | | 8 +---+---+---+---+---+---+---+ 現(xiàn)在輪到O方落子 請(qǐng)輸入落子位置:6 5 1 2 3 4 5 6 7 8 1 +---+---+---+---+---+---+---+ | | | | | | | | 2 +---+---+---+---+---+---+---+ | | | | | | | | 3 +---+---+---+---+---+---+---+ | | | | | | | | 4 +---+---+---X---+---+---+---+ | | | | | | | | 5 +---+---+---O---X---+---+---+ | | | | | | | | 6 O---+---+---+---O---X---+---+ | | | | | | | | 7 +---+---+---+---+---+---+---+ | | | | | | | | 8 +---+---+---+---+---+---+---+ 現(xiàn)在輪到X方落子 請(qǐng)輸入落子位置:3 3 1 2 3 4 5 6 7 8 1 +---+---+---+---+---+---+---+ | | | | | | | | 2 +---+---+---+---+---+---+---+ | | | | | | | | 3 +---+---X---+---+---+---+---+ | | | | | | | | 4 +---+---+---X---+---+---+---+ | | | | | | | | 5 +---+---+---O---X---+---+---+ | | | | | | | | 6 O---+---+---+---O---X---+---+ | | | | | | | | 7 +---+---+---+---+---+---+---+ | | | | | | | | 8 +---+---+---+---+---+---+---+ 現(xiàn)在輪到O方落子 請(qǐng)輸入落子位置:5 6 1 2 3 4 5 6 7 8 1 +---+---+---+---+---+---+---+ | | | | | | | | 2 +---+---+---+---+---+---+---+ | | | | | | | | 3 +---+---X---+---+---+---+---+ | | | | | | | | 4 +---+---+---X---+---+---+---+ | | | | | | | | 5 +---+---+---O---X---O---+---+ | | | | | | | | 6 O---+---+---+---O---X---+---+ | | | | | | | | 7 +---+---+---+---+---+---+---+ | | | | | | | | 8 +---+---+---+---+---+---+---+ 現(xiàn)在輪到X方落子 請(qǐng)輸入落子位置:2 2 1 2 3 4 5 6 7 8 1 +---+---+---+---+---+---+---+ | | | | | | | | 2 +---X---+---+---+---+---+---+ | | | | | | | | 3 +---+---X---+---+---+---+---+ | | | | | | | | 4 +---+---+---X---+---+---+---+ | | | | | | | | 5 +---+---+---O---X---O---+---+ | | | | | | | | 6 O---+---+---+---O---X---+---+ | | | | | | | | 7 +---+---+---+---+---+---+---+ | | | | | | | | 8 +---+---+---+---+---+---+---+ X獲勝,游戲結(jié)束!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python實(shí)現(xiàn)五子棋小游戲
- python pygame實(shí)現(xiàn)五子棋小游戲
- python實(shí)現(xiàn)簡(jiǎn)單五子棋游戲
- python實(shí)現(xiàn)五子棋游戲(pygame版)
- 使用python實(shí)現(xiàn)簡(jiǎn)單五子棋游戲
- python實(shí)現(xiàn)五子棋游戲
- python制作簡(jiǎn)單五子棋游戲
- python實(shí)現(xiàn)五子棋人機(jī)對(duì)戰(zhàn)游戲
- python代碼實(shí)現(xiàn)五子棋游戲
- 使用Python寫一個(gè)創(chuàng)意五子棋游戲源代碼
相關(guān)文章
解決Python 異常TypeError: cannot concatenate ''str'' and ''int''
這篇文章主要介紹了解決Python 異常TypeError: cannot concatenate 'str' and 'int' objects,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04幾種實(shí)用的pythonic語(yǔ)法實(shí)例代碼
在我理解,Pythonic 就是很 Python 的 Python 代碼。下面這篇文章主要給大家分享介紹了幾種實(shí)用的pythonic語(yǔ)法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02詳解字符串在Python內(nèi)部是如何省內(nèi)存的
這篇文章主要介紹了詳解字符串在Python內(nèi)部是如何省內(nèi)存的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02jupyter notebook插入本地圖片的實(shí)現(xiàn)
這篇文章主要介紹了jupyter notebook插入本地圖片的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04WxPython界面如何用pubsub展示進(jìn)程工作的進(jìn)度條
這篇文章主要介紹了WxPython界面如何用pubsub展示進(jìn)程工作的進(jìn)度條,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11python文件操作的基礎(chǔ)詳細(xì)講解(write、read、readlines、readline)
使用python來(lái)讀寫文件是非常簡(jiǎn)單的操作,下面這篇文章主要給大家介紹了關(guān)于python文件操作的基礎(chǔ)詳細(xì)資料,包括write、read、readlines、readline等相關(guān)操作,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04python matplotlib imshow熱圖坐標(biāo)替換/映射實(shí)例
這篇文章主要介紹了python matplotlib imshow熱圖坐標(biāo)替換/映射實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03