簡易五子棋遊戲(控制檯版)

五子棋是中國古代的傳統黑白棋種之一。五子棋不僅能增強思維能力,提高智力,而且富含哲理,有助於修身養性。五子棋既有現代休閒的明顯特徵短、平、快,又有古典哲學的高深學問陰陽易理;既具有簡單易學的特性,爲人們所喜愛,又有深奧的技巧和高水平的國際性比賽。五子棋文化源遠流長,具有東方的神祕和西方的直觀;既有的概念,亦有的連接。五子棋起源於中國古代,發展於日本,風靡於歐洲,可以說五子棋是中西方文化的交流點,是古今哲學的結晶。這裏將使用Python語言開發一個彩色的控制檯版五子棋遊戲,以便讓用戶熟悉五子棋遊戲的實現原理。

1. 需求分析

開發的五子棋遊戲爲控制檯版,因此要求遊戲應該具備以下功能:

  1. 可以循環打印棋盤;
  2. 可以單機對戰;
  3. 對戰雙方有一方勝利時,打印勝利棋盤及贏家;
  4. 判斷棋子是否超出棋盤範圍;
  5. 判斷指定座標位置是否已經存在棋子;
  6. 界面比較美觀、提示明顯。

2. 遊戲設計

2.1 遊戲功能結構

五子棋(控制檯版)遊戲功能結構如圖所示。
在這裏插入圖片描述

2.2 遊戲業務流程

在這裏插入圖片描述

3. 代碼

五子棋的遊戲規則是,以落棋點爲中心,向八個方向查找同一類型的棋子,如果相同棋子數大於或等於5,則表示此類型棋子的玩家爲贏家。五子棋棋子查找方向如圖所示。
在這裏插入圖片描述

# -*- coding: utf-8 -*-
# @Time    : 2020/3/8 11:24
# @Author  : 我就是任性-Amo
# @FileName: 47.簡易五子棋遊戲.py
# @Software: PyCharm
# @Blog    :https://blog.csdn.net/xw1680


# TODO 1.初始化棋盤
finish = False  # 判斷遊戲是否結束
flagNum = 1  # 當前下棋者的標記
flag_ch = ""  # 初始化棋子
chessboard_coordinates = ""  # 初始化棋子座標
x = 0  # 當前棋子的橫座標 代表字母所在行
y = 0  # 當前棋子的縱座標 代表數字編號所在列
checkerboard = [["-" for j in range(10)] for i in range(10)]  # 初始化棋盤
print("\033[1;37;41m---------------簡易五子棋遊戲(控制檯版)---------------\033[0m")


# TODO 2.定義一個msg()函數,用來輸出最後勝利的棋盤及贏家
def msg():
    # 輸出棋盤
    print("\033[1;37;44m-------------------------------------------------")
    print("  1  2  3  4  5  6  7  8  9  10")
    for i in range(len(checkerboard)):
        print(chr(i + ord("A")) + "", end=" ")
        for j in range(len(checkerboard[i])):
            print(checkerboard[i][j] + " ", end=" ")
        print()
    print("-------------------------------------------------", end="")
    print("\033[0m")
    # 輸出贏家
    if flagNum == 1:
        print("\033[32m*棋勝利!***\033[0m")
    else:
        print("\033[32mx棋勝利!***\033[0m")


# TODO 3.主邏輯
# 因爲棋盤要一直顯示 所以要使用循環 循環結束的條件是有一方五子連珠 所以這裏設置一個Flag來管控
while not finish:
    # 輸出棋盤
    print("\033[1;40;46m-------------------------------------------------")
    print("  1  2  3  4  5  6  7  8  9  10")
    for i in range(len(checkerboard)):
        print(chr(i + ord("A")) + "", end=" ")
        for j in range(len(checkerboard[i])):
            print(checkerboard[i][j] + " ", end=" ")
        print()
    print("-------------------------------------------------", end="")
    print("\033[0m")
    # 判斷當前下棋者
    if flagNum == 1:
        flag_ch = "*"
        print("\033[1;37;40m請*輸入棋子座標(例如A1): \033[0m", end=" ")  # 白字黑底
    else:
        flag_ch = "x"
        # 輸入棋子座標
        print("\033[1;30;42m請x輸入棋子座標(例如J5): \033[0m", end=" ")  # 黑字綠底
    chessboard_coordinates = input()  # 輸入棋子座標
    # 獲取第一個字符(即字母) 通過字母算出橫座標
    x = ord(chessboard_coordinates[0]) - 65
    # 注意這裏可能用戶輸入的座標爲:A11 此時我們需要的是A後面所有的數字 不能只寫chessboard_coordinates[1]
    y = int(chessboard_coordinates[1:]) - 1
    # 判斷座標是否在棋盤內
    # Remove redundant parentheses: 刪除多餘的括號
    if x < 0 or x > 9 or y < 0 or y > 9:
        print("\033[31m***您輸入的座標有誤請重新輸入!***\033[0m")
        continue
    # 判斷座標上是否有棋子
    if checkerboard[x][y] == "-":
        checkerboard[x][y] = flag_ch
    else:
        print('\033[31m******您輸入位置已經有其他棋子,請重新輸入!\033[0m')
        continue
    # 判斷五子連珠算法
    # 左側
    if y - 4 >= 0:
        if checkerboard[x][y - 1] == flag_ch and checkerboard[x][y - 2] == flag_ch and \
                checkerboard[x][y - 3] == flag_ch and checkerboard[x][y - 4] == flag_ch:
            finish = True
            msg()
    # 右側
    if y + 4 <= 9:
        if checkerboard[x][y + 1] == flag_ch and checkerboard[x][y + 2] == flag_ch and \
                checkerboard[x][y + 3] == flag_ch and checkerboard[x][y + 4] == flag_ch:
            finish = True
            msg()

    # 上方
    if x - 4 >= 0:
        if checkerboard[x - 1][y] == flag_ch and checkerboard[x - 2][y] == flag_ch and \
                checkerboard[x - 3][y] == flag_ch and checkerboard[x - 4][y] == flag_ch:
            finish = True
            msg()
    # 下方
    if x + 4 <= 9:
        if checkerboard[x + 1][y] == flag_ch and checkerboard[x + 2][y] == flag_ch and \
                checkerboard[x + 3][y] == flag_ch and checkerboard[x + 4][y] == flag_ch:
            finish = True
            msg()

    # 判斷棋子右上方
    if x - 4 >= 0 and y + 4 <= 9:
        # 輸入棋子座標的順序: A8 B7 C6 D5 E4
        # 最後座標爲:E4 --> A8 可以清晰看出D5 C6 B7 A8 是在E4座標的右上方
        if checkerboard[x - 1][y + 1] == flag_ch and checkerboard[x - 2][y + 2] == flag_ch and \
                checkerboard[x - 3][y + 3] == flag_ch and checkerboard[x - 4][y + 4] == flag_ch:
            finish = True
            msg()

    # 判斷棋子左下方
    if x + 4 <= 9 and y - 4 >= 0:
        # 輸入棋子座標的順序: E4 D5 C6 B7 A8  # 以最後輸入的A8座標爲準
        # 最後座標爲:A8 --> E4 可以清晰看出E4 D5 C6 B7 是在A8左下方
        if checkerboard[x + 1][y - 1] == flag_ch and checkerboard[x + 2][y - 2] == flag_ch and \
                checkerboard[x + 3][y - 3] and checkerboard[x + 4][y - 4]:
            finish = True
            msg()

    # 判斷棋子左上方
    if x - 4 >= 0 and y - 4 >= 0:
        # 輸入棋子座標的順序: A1 B2 C3 D4 E5
        # 最後座標:E5 --> A1 可以清晰看出A1 B2 C3 D4 是在E5左上方
        if checkerboard[x - 1][y - 1] == flag_ch and checkerboard[x - 2][y - 2] == flag_ch and \
                checkerboard[x - 3][y - 3] == flag_ch and checkerboard[x - 4][y - 4] == flag_ch:
            finish = True
            msg()

    # 判斷棋子右下方
    if x + 4 <= 9 and y + 4 <= 9:
        # 輸入棋子座標的順序: E5 D4 C3 B2 A1
        # 最後輸入棋子座標:A1 --> E5 可以清晰看出B2 C3 D4 E5是在A1的右下方
        if checkerboard[x + 1][y + 1] == flag_ch and checkerboard[x + 2][y + 2] == flag_ch and \
                checkerboard[x + 3][y + 3] == flag_ch and checkerboard[x + 4][y + 4] == flag_ch:
            finish = True
            msg()
    flagNum = -flagNum

4. 打包爲可執行文件

Python項目編寫完成後,可以將其打包成一個可執行文件,這樣就可以在其他計算機上運行該項目了,即使這臺計算機上沒有安裝Python開發環境。

實現打包可執行文件時,需要使用PyInstaller模塊,該模塊爲第三方模塊所以需要單獨安裝。PyInstaller模塊支持多種操作系統,如Windows、Linux、 Mac OS X等,但是該模塊並不支持跨平臺操作。例如: 如果是在Windows操作系統下打包的.exe可執行文件,該文件就只能在Windows環境下運行。

這裏以我的MacOS操作系統爲例,介紹PyInstaller 模塊的安裝。安裝PyInstaller模塊最簡單的方式就是在Pycharm的Terminal中輸入pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com pyinstaller命令進行安裝,如圖所示。
在這裏插入圖片描述PyInstaller模塊安裝完成以後,可以輸入pyintaller --version命令,通過查詢PyInstaller模塊版本的方式檢測安裝是否成功。如圖所示:
在這裏插入圖片描述
PylInstaller模塊安裝完成以後,就可以打包.py文件爲可執行文件了。具體方法如下。

  1. 打開終端窗口(windows通過cmd打開命令提示符),在當前光標位置輸入: pyinstaller + -F + (要打包的.py文件的絕對路徑),例如,該文件保存在/Users/xiangwei/Desktop/python_code/基礎練習/gobang.py 目錄中,則可以使用下面的代碼對其打包:
pyinstaller -F /Users/xiangwei/Desktop/python_code/基礎練習/gobang.py

輸入上面的代碼並按下Enter鍵,將自動生成可執行文件,具體過程如圖所示
在這裏插入圖片描述
在上圖所示的位置,找到可執行文件的保存路徑,並且在該路徑下找到生成的可執行文件,雙擊該文件即可運行本項目。效果如圖所示。
在這裏插入圖片描述
windows打包後的.exe可執行文件可在我的百度網盤中獲取,提取鏈接及密碼如下:

鏈接:https://pan.baidu.com/s/1YTKhkyQnT9NfwUhU784O4A  
密碼:ri9h

5. 總結

這裏主要使用Python語言開發了一個簡易五子棋遊戲(控制檯版)項目,項目的核心是五子棋的實現算法。另外,五子棋遊戲在控制檯中與用戶進行交互,如大家所知,控制檯中通常都是以黑色背景和白色字體顯示數據的,如何在控制檯中擁有良好的用戶體驗也是本項目的一個難點,本項目通過在print()打印函數中設置背景顏色、字體顏色來解決這一難點。 通過這裏的學習,大家應該熟練掌握五子棋遊戲的實現算法,並熟悉如何改變PyCharm控制檯的背景顏色和字體顏色。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章