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

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

发布了13 篇原创文章 · 获赞 243 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xw1680/article/details/105062736
今日推荐