使用Python寫(xiě)一個(gè)創(chuàng)意五子棋游戲源代碼
首先
GomokuGame
類的構(gòu)造函數(shù) __init__
初始化游戲。board_size
參數(shù)默認(rèn)為 15,表示棋盤(pán)大小。board
是一個(gè)二維列表,代表棋盤(pán)上的狀態(tài)。current_player
記錄當(dāng)前玩家,初始為 'X'。winner
記錄勝利者,初始為 None。
class GomokuGame: def __init__(self, board_size=15): self.board_size = board_size self.board = [[' ' for _ in range(board_size)] for _ in range(board_size)] self.current_player = 'X' self.winner = None
print_board
方法用于打印當(dāng)前棋盤(pán)的狀態(tài)。首先,它打印列索引。然后,遍歷每一行打印出當(dāng)前行的棋子狀態(tài)。
def print_board(self): print(" " + " ".join(str(i) for i in range(self.board_size))) for i in range(self.board_size): print(str(i) + " " + " ".join(self.board[i])) print()
make_move
方法用于玩家落子。如果指定位置為空,將當(dāng)前玩家的標(biāo)記放置在該位置。然后調(diào)用 check_winner
方法檢查是否有勝利者。最后,切換當(dāng)前玩家。
def make_move(self, row, col): if self.board[row][col] == ' ': self.board[row][col] = self.current_player if self.check_winner(row, col): self.winner = self.current_player self.current_player = 'X' if self.current_player == 'O' else 'O' return True return False
check_winner
方法用于檢查是否有玩家獲勝。它通過(guò)檢查當(dāng)前位置的四個(gè)方向來(lái)判斷是否有五個(gè)連續(xù)相同的棋子。如果存在,則返回 True,表示有玩家獲勝。
def check_winner(self, row, col): directions = [(0, 1), (1, 0), (1, 1), (1, -1)] for dr, dc in directions: count = 1 for i in range(1, 5): r, c = row + i * dr, col + i * dc if 0 <= r < self.board_size and 0 <= c < self.board_size and self.board[r][c] == self.current_player: count += 1 else: break for i in range(1, 5): r, c = row - i * dr, col - i * dc if 0 <= r < self.board_size and 0 <= c < self.board_size and self.board[r][c] == self.current_player: count += 1 else: break if count >= 5: return True return False
play
方法是游戲的主循環(huán)。它持續(xù)運(yùn)行直到有玩家獲勝。在每一輪中,它打印當(dāng)前棋盤(pán),然后獲取玩家輸入的行和列,進(jìn)行落子操作。如果落子無(wú)效,則要求玩家重新輸入。如果有玩家獲勝,則打印勝利信息并結(jié)束游戲。
def play(self): while not self.winner: self.print_board() try: row = int(input("玩家{}的回合,請(qǐng)輸入你要下的行數(shù): ".format(self.current_player))) col = int(input("請(qǐng)輸入你要下的列數(shù): ")) if 0 <= row < self.board_size and 0 <= col < self.board_size: if self.make_move(row, col): if self.winner: self.print_board() print("玩家{},你贏了".format(self.winner)) break else: print("無(wú)效移動(dòng)。再試一次。") else: print("輸入無(wú)效。再試一次。") except ValueError: print("輸入無(wú)效。輸入一個(gè)數(shù)字。")
在代碼的末尾,通過(guò)這個(gè)條件判斷,確保僅在直接運(yùn)行該腳本時(shí)才會(huì)執(zhí)行創(chuàng)建游戲?qū)ο蟛㈤_(kāi)始游戲。
if __name__ == "__main__": game = GomokuGame() game.play()
下面是完全代碼,可以直接復(fù)制運(yùn)行
class GomokuGame: def __init__(self, board_size=15): self.board_size = board_size self.board = [[' ' for _ in range(board_size)] for _ in range(board_size)] self.current_player = 'X' self.winner = None def print_board(self): print(" " + " ".join(str(i) for i in range(self.board_size))) for i in range(self.board_size): print(str(i) + " " + " ".join(self.board[i])) print() def make_move(self, row, col): if self.board[row][col] == ' ': self.board[row][col] = self.current_player if self.check_winner(row, col): self.winner = self.current_player self.current_player = 'X' if self.current_player == 'O' else 'O' return True return False def check_winner(self, row, col): directions = [(0, 1), (1, 0), (1, 1), (1, -1)] for dr, dc in directions: count = 1 for i in range(1, 5): r, c = row + i * dr, col + i * dc if 0 <= r < self.board_size and 0 <= c < self.board_size and self.board[r][c] == self.current_player: count += 1 else: break for i in range(1, 5): r, c = row - i * dr, col - i * dc if 0 <= r < self.board_size and 0 <= c < self.board_size and self.board[r][c] == self.current_player: count += 1 else: break if count >= 5: return True return False def play(self): while not self.winner: self.print_board() try: row = int(input("玩家{}的回合,請(qǐng)輸入你要下的行數(shù): ".format(self.current_player))) col = int(input("請(qǐng)輸入你要下的列數(shù): ")) if 0 <= row < self.board_size and 0 <= col < self.board_size: if self.make_move(row, col): if self.winner: self.print_board() print("玩家{},你贏了".format(self.winner)) break else: print("無(wú)效移動(dòng)。再試一次。") else: print("輸入無(wú)效。再試一次。") except ValueError: print("輸入無(wú)效。輸入一個(gè)數(shù)字。") if __name__ == "__main__": game = GomokuGame() game.play()
總結(jié)
到此這篇關(guān)于使用Python寫(xiě)一個(gè)創(chuàng)意五子棋游戲的文章就介紹到這了,更多相關(guān)Python寫(xiě)五子棋游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python實(shí)現(xiàn)五子棋小游戲
- python pygame實(shí)現(xiàn)五子棋小游戲
- python實(shí)現(xiàn)簡(jiǎn)單五子棋游戲
- python實(shí)現(xiàn)五子棋游戲(pygame版)
- python五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)
- 使用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)五子棋游戲
相關(guān)文章
Django框架model模型對(duì)象驗(yàn)證實(shí)現(xiàn)方法分析
這篇文章主要介紹了Django框架model模型對(duì)象驗(yàn)證實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Django框架model模型對(duì)象驗(yàn)證相關(guān)原理、實(shí)現(xiàn)步驟及操作注意事項(xiàng),需要的朋友可以參考下2019-10-10Python?Pandas:DataFrame一列切分成多列、分隔符切分選字段方式
這篇文章主要介紹了Python?Pandas:DataFrame一列切分成多列、分隔符切分選字段方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09TENSORFLOW變量作用域(VARIABLE SCOPE)
這篇文章主要介紹了TENSORFLOW變量作用域(VARIABLE SCOPE),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01python如何獲得list或numpy數(shù)組中最大元素對(duì)應(yīng)的索引
這篇文章主要介紹了python如何獲得list或numpy數(shù)組中最大元素對(duì)應(yīng)的索引,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Python數(shù)據(jù)分析之?Matplotlib?餅圖繪制
這篇文章主要介紹了Python數(shù)據(jù)分析之?Matplotlib?餅圖繪制,文章基于python的相關(guān)資料展開(kāi)詳細(xì)的餅圖繪制,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05教你如何用Python實(shí)現(xiàn)人臉識(shí)別(含源代碼)
Python可以從圖像或視頻中檢測(cè)和識(shí)別你的臉.人臉檢測(cè)與識(shí)別是計(jì)算機(jī)視覺(jué)領(lǐng)域的研究熱點(diǎn)之一.人臉識(shí)別的應(yīng)用包括人臉解鎖、安全防護(hù)等,醫(yī)生和醫(yī)務(wù)人員利用人臉識(shí)別來(lái)獲取病歷和病史,更好地診斷疾病,需要的朋友可以參考下2021-06-06