欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简易五子棋游戏(控制台版)

程序员文章站 2024-03-18 14:50:16
...

五子棋是中国古代的传统黑白棋种之一。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征短、平、快,又有古典哲学的高深学问阴阳易理;既具有简单易学的特性,为人们所喜爱,又有深奥的技巧和高水平的国际性比赛。五子棋文化源远流长,具有东方的神秘和西方的直观;既有的概念,亦有的连接。五子棋起源于中国古代,发展于日本,风靡于欧洲,可以说五子棋是中西方文化的交流点,是古今哲学的结晶。这里将使用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控制台的背景颜色和字体颜色。

相关标签: Python