最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python寫一個(gè)創(chuàng)意五子棋游戲源代碼

 更新時(shí)間:2023年08月25日 10:57:56   作者:ZTLJQ  
這篇文章主要給大家介紹了關(guān)于使用Python寫一個(gè)創(chuàng)意五子棋游戲的相關(guān)資料,Python作為一種簡(jiǎn)單易上手的編程語(yǔ)言,能夠輕松實(shí)現(xiàn)五子棋游戲,需要的朋友可以參考下

首先

GomokuGame 類的構(gòu)造函數(shù) __init__ 初始化游戲。board_size 參數(shù)默認(rèn)為 15,表示棋盤大小。board 是一個(gè)二維列表,代表棋盤上的狀態(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)前棋盤的狀態(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)前棋盤,然后獲取玩家輸入的行和列,進(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寫一個(gè)創(chuàng)意五子棋游戲的文章就介紹到這了,更多相關(guān)Python寫五子棋游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pycharm實(shí)現(xiàn)增加運(yùn)行時(shí)內(nèi)存

    pycharm實(shí)現(xiàn)增加運(yùn)行時(shí)內(nèi)存

    這篇文章主要介紹了pycharm實(shí)現(xiàn)增加運(yùn)行時(shí)內(nèi)存方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • django自帶調(diào)試服務(wù)器的使用詳解

    django自帶調(diào)試服務(wù)器的使用詳解

    今天小編就為大家分享一篇django自帶調(diào)試服務(wù)器的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • python實(shí)現(xiàn)mysql的單引號(hào)字符串過(guò)濾方法

    python實(shí)現(xiàn)mysql的單引號(hào)字符串過(guò)濾方法

    這篇文章主要介紹了python實(shí)現(xiàn)mysql的單引號(hào)字符串過(guò)濾方法,以一個(gè)較為詳細(xì)的實(shí)例形式分析了Python針對(duì)MySQL的操作及字符串過(guò)濾的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • Python多繼承以及MRO順序的使用

    Python多繼承以及MRO順序的使用

    這篇文章主要介紹了Python多繼承以及MRO順序的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 探索Python?random模塊隨機(jī)性神奇世界

    探索Python?random模塊隨機(jī)性神奇世界

    Python中的random模塊提供了豐富的工具和函數(shù),幫助我們生成隨機(jī)數(shù)、操作隨機(jī)序列,以及模擬隨機(jī)性事件,在本文中,我們將分享random模塊,了解它的基本用法、功能和應(yīng)用領(lǐng)域,并提供示例代碼來(lái)幫助你更好地理解隨機(jī)性的神奇世界
    2023-11-11
  • Python內(nèi)建類型list源碼學(xué)習(xí)

    Python內(nèi)建類型list源碼學(xué)習(xí)

    這篇文章主要為大家介紹了Python內(nèi)建類型list源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 利用python實(shí)現(xiàn)JSON文檔與Python對(duì)象互相轉(zhuǎn)換

    利用python實(shí)現(xiàn)JSON文檔與Python對(duì)象互相轉(zhuǎn)換

    這篇文章主要介紹了利用python實(shí)現(xiàn)JSON文檔與Python對(duì)象互相轉(zhuǎn)換,通過(guò)對(duì)將一個(gè)JSON文檔映射為Python對(duì)象問(wèn)題的展開(kāi)介紹主題內(nèi)容,需要的朋友可以參考一下
    2022-06-06
  • Python模塊學(xué)習(xí)之subprocess詳解

    Python模塊學(xué)習(xí)之subprocess詳解

    subprocess是Python?2.4中新增的一個(gè)模塊,它允許你生成新的進(jìn)程,連接到它們的?input/output/error?管道,并獲取它們的返回(狀態(tài))碼,下面小編就來(lái)和大家聊聊它的具體使用吧
    2023-08-08
  • Scrapy基于scrapy_redis實(shí)現(xiàn)分布式爬蟲部署的示例

    Scrapy基于scrapy_redis實(shí)現(xiàn)分布式爬蟲部署的示例

    這篇文章主要介紹了Scrapy基于scrapy_redis實(shí)現(xiàn)分布式爬蟲部署的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 詳解Python中的編碼問(wèn)題(encoding與decode、str與bytes)

    詳解Python中的編碼問(wèn)題(encoding與decode、str與bytes)

    這篇文章主要介紹了Python中的編碼問(wèn)題(encoding與decode、str與bytes),幫助大家更好的理解和使用python進(jìn)行開(kāi)發(fā),感興趣的朋友可以了解下
    2020-09-09

最新評(píng)論

陆川县| 荥阳市| 怀安县| 正定县| 宁南县| 元阳县| 化德县| 梅州市| 都匀市| 望奎县| 阜新| 资源县| 景谷| 成武县| 从江县| 高青县| 红桥区| 朔州市| 孙吴县| 阳江市| 新建县| 乌拉特后旗| 锡林郭勒盟| 哈巴河县| 西丰县| 蕉岭县| 广元市| 襄樊市| 洞口县| 临安市| 宜昌市| 平泉县| 芒康县| 耿马| 福安市| 乡宁县| 保靖县| 伊通| 房产| 通化市| 罗甸县|