python例程:五子棋(控制台版)程序
目录
- 《五子棋(控制台版)》程序使用说明
- 程序示例代码
- 可执行程序及源码下载路径
《五子棋(控制台版)》程序使用说明
在PyCharm中运行《五子棋(控制台版)》即可进入如图1所示的系统主界面。
图1 游戏主界面
具体的操作步骤如下:
五子棋(控制台版)游戏的功能都体现在控制台界面中,它的操作非常简单,只要按照提示输入坐标(坐标形式为A1、B3、J7等形式),并按回车键()即可,如果输入正确,则在棋盘上显示下的棋子,如图2所示,如果输入错误,则显示提示信息,并要求重新输入,如图3所示。
图2 输入的棋子坐标正确
图3 输入的棋子坐标错误
而如果输入的坐标位置已经有棋子了,则提示已经有棋子,并要求重新输入,如图4所示。
图4 在已有棋子位置下棋时的信息提示
按照以上步骤反复操作,当有一方胜利时,则打印最终的棋盘,并输出赢家,如图5所示。
图5 打印胜利棋盘及赢家
程序示例代码
# -*- coding: utf-8 -*-
# 文件名称 :gobang.PY
# 开发工具 :PyCharmfinish = False # 游戏是否结束
flagNum = 1 # 当前下棋者标记
flagch = '*' # 当前下棋者棋子
x = 0 # 当前棋子的横坐标
y = 0 # 当前棋子的纵坐标
print('\033[1;37;41m---------简易五子棋游戏(控制台版)---------\033[0m')
# 棋盘初始化
checkerboard=[]
for i in range(10):checkerboard.append([])for j in range(10):checkerboard[i].append('-')
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("--------------------------------\033[0m")# 输出赢家if (flagNum == 1):print('\033[32m*棋胜利!***\033[0m')else:print('\033[32mo棋胜利!***\033[0m')while not finish:# 打印棋盘print("\033[1;30;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("--------------------------------\033[0m")# 判断当前下棋者if flagNum == 1:flagch = '*'print('\033[1;37;40m请*输入棋子坐标(例如A1):\033[0m', end=' ') # 白字黑底else:flagch = 'o'print('\033[1;30;42m请o输入棋子坐标(例如J5):\033[0m', end=' ') # 黑字绿底# 输入棋子坐标str = input()ch = str[0] # 获取第一个字符的大写形式x = ord(ch) - 65y = int(str[1]) - 1# 判断坐标是否在棋盘之内if (x < 0 or x > 9 or y < 0 or y > 9):print('\033[31m***您输入的坐标有误请重新输入!***\033[0m')continue# 判断坐标上是否有棋子if (checkerboard[x][y] == '-'):if (flagNum == 1):checkerboard[x][y] = '*'else:checkerboard[x][y] = 'o'else:print('\033[31m******您输入位置已经有其他棋子,请重新输入!\033[0m')continue# 判断棋子左侧if (y - 4 >= 0):if (checkerboard[x][y - 1] == flagchand checkerboard[x][y - 2] == flagchand checkerboard[x][y - 3] == flagchand checkerboard[x][y - 4] == flagch):finish = Truemsg()# 判断棋子右侧if (y + 4 <= 9):if (checkerboard[x][y + 1] == flagchand checkerboard[x][y + 2] == flagchand checkerboard[x][y + 3] == flagchand checkerboard[x][y + 4] == flagch):finish = Truemsg()# 判断棋子上方if (x - 4 >= 0):if (checkerboard[x - 1][y] == flagchand checkerboard[x - 2][y] == flagchand checkerboard[x - 3][y] == flagchand checkerboard[x - 4][y] == flagch):finish = Truemsg()# 判断棋子下方if (x + 4 <= 9):if (checkerboard[x + 1][y] == flagchand checkerboard[x + 2][y] == flagchand checkerboard[x + 3][y] == flagchand checkerboard[x + 4][y] == flagch):finish = Truemsg()# 判断棋子右上方向if (x - 4 >= 0 and y - 4 >= 0):if (checkerboard[x - 1][y - 1] == flagchand checkerboard[x - 2][y - 2] == flagchand checkerboard[x - 3][y - 3] == flagchand checkerboard[x - 4][y - 4] == flagch):finish = Truemsg()# 判断棋子右下方向if (x + 4 <= 9 and y - 4 >= 0):if (checkerboard[x + 1][y - 1] == flagchand checkerboard[x + 2][y - 2] == flagchand checkerboard[x + 3][y - 3] == flagchand checkerboard[x + 4][y - 4] == flagch):finish = Truemsg()# 判断棋子左上方向if (x - 4 >= 0 and y + 4 <= 9):if (checkerboard[x - 1][y + 1] == flagchand checkerboard[x - 2][y + 2] == flagchand checkerboard[x - 3][y + 3] == flagchand checkerboard[x - 4][y + 4] == flagch):finish = Truemsg()# 判断棋子左下方向if (x + 4 <= 9 and y + 4 <= 9):if (checkerboard[x + 1][y + 1] == flagchand checkerboard[x + 2][y + 2] == flagchand checkerboard[x + 3][y + 3] == flagchand checkerboard[x + 4][y + 4] == flagch):finish = Truemsg()flagNum *= -1; # 更换下棋者标记
可执行程序及源码下载路径
五子棋(控制台版)程序使用说明.zip
相关文章:

python例程:五子棋(控制台版)程序
目录《五子棋(控制台版)》程序使用说明程序示例代码可执行程序及源码下载路径《五子棋(控制台版)》程序使用说明 在PyCharm中运行《五子棋(控制台版)》即可进入如图1所示的系统主界面。 图1 游戏主界面 具…...
leveldb的Compaction线程
个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 1. leveldb的Compaction全局线程 在leveldb中,有一个全局的后台线程BGThread,用于数据库的MinorCompact与MajorCompact。 重点关注“全局线程”: 这个标识着无论一个进程打开…...

邪恶的想法冒出,立马启动python实现美女通通下
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 完整源码、python资料: 点击此处跳转文末名片获取 当我在首页刷到这些的时候~ 我的心里逐渐浮现一个邪念:我把这些小姐姐全都采集,可以嘛? 答案当然是可以的~毕竟就我这技术,…...

蓝桥杯刷题冲刺 | 倒计时18天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录0.知识点1.乳草的入侵今天写 搜索题 0.知识点 DFS 设计步骤 确定该题目的状态(包括边…...

经典算法面试题——Java篇-附带赠书活动,评论区随机选取一人赠书
目录 一.图书推荐 二.说一下什么是二分法?使用二分法时需要注意什么?如何用代码实现? 三.什么是插入排序?用代码如何实现? 四.什么是冒泡排序?用代码如何实现? 五.什么是斐波那契数列&#…...

支持RT-Thread最新版本的瑞萨RA2E1开发板终于要大展身手了
支持RT-Thread最新版本的瑞萨RA2E1开发板终于要大展身手了 熟悉RT-Thread和瑞萨MCU的朋友都知道,当前RT-Thread仓库的主线代码是不支持RA2E1这个BSP的。刚好,最近我在联合瑞萨推广一个叫《致敬未来的攻城狮计划》,使用的就是RA2E1开发板&…...

【C语言进阶】 12. 假期测评①
day01 1. 转义字符的判断 以下不正确的定义语句是( ) A: double x[5] {2.0, 4.0, 6.0, 8.0, 10.0}; B: char c2[] {‘\x10’, ‘\xa’, ‘\8’}; C: char c1[] {‘1’,‘2’,‘3’,‘4’,‘5’}; D: int y[53]{0, 1, 3, 5, 7, 9}; 【答案解析】 B 本…...

给程序加个进度条吧,1行Python代码,快速添加~
大家好,这里是程序员晚枫。 你在写代码的过程中,有没有遇到过以下问题? 已经写好的程序,想看看程序执行的进度? 在写代码批量处理文件的时候,如何显示现在处理到第几个文件了? 👆…...
常见的Keil5编译报错及其原因和解决方法
以下是几种常见的Keil5编译报错及其原因和解决方法: "Error: L6218E: Undefined symbol"(未定义符号错误) 这通常是由于缺少对应的库文件或者代码中有未声明的变量或函数引起的。解决方法是检查相应的库文件是否已正确添加到工程中…...

Django 实现瀑布流
需求分析 现在是 "图片为王"的时代,在浏览一些网站时,经常会看到类似于这种满屏都是图片。图片大小不一,却按空间排列,就这是瀑布流布局。 以瀑布流形式布局,从数据库中取出图片每次取出等量(7 …...

传输层协议----UDP/TCP
文章目录前言一、再谈端口号端口号的划分认识知名端口号(Well-Know Port Number)两个问题nestatpidof二、UDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲区UDP使用注意事项基于UDP的应用层协议二、TCP协议TCP协议段格式可靠性问题确认应答(ACK)机制流量控制六个标志位PSHUG…...

教你如何快速在Linux中找到某个目录中最大的文件
工作中经常会有查看某个目录下最大的文件的需求,比如在运维工作中,发现某个系统或功能不工作了,经排查发现是服务器空间满了…那么接下来就需要清理一下临时文件或者日志文件,或者其他不需要的文件,那么就会想要查看一…...

Java二叉树面试题讲解
Java二叉树面试题讲解🚗1.检查两颗树是否相同🚕2.另一颗树的子树🚙3.二叉树最大深度🚌4.判断一颗二叉树是否是平衡二叉树🚎5.对称二叉树🚓6.获取树中结点个数🚑7.判断一个树是不是完全二叉树&am…...
rancher2.6进阶之nfs动态创建pv配置
添加NFS client provisioner 动态提供K8s后端存储卷 1.1.前提说明 1.1.1.说明 NFS client provisioner 利用 NFS Server 给 Kubernetes 作为持久存储的后端,并且动态提供PV。 默认 rancher 2 的存储类中的提供者不包含NFS,需要手动添加;添加方式有两种: 1)从应用商店直接安…...

快速上手vue elementUI好看的登录界面
这是一个非常非常适合新手的vue登录界面,总体来说美观大气,axios那部分没有发,有需要的大家可以自己进行二次开发,继续编写。 用到了技术栈有 vue/cli 5.07 element-ui 2.15.9 适合入门级新手,展示下页面 emmm验证码…...

Vue趣味【Vue3+Element Plus+Canvas实现一个简易画板;支持导出为图片】
目录🌟前言🌟粉丝先看🌟创建Vue3项目🌟引入Element Plus🌟实现代码(详细注释)🌟写在最后🌟JSON包里写函数,关注博主不迷路🌟前言 哈喽小伙伴们&a…...

【Spring Cloud Alibaba】2.服务注册与发现(Nacos安装)
文章目录环境要求简介安装Nacos源码安装Docker安装数据库配置访问服务我们要搭建一个Spring Cloud Alibaba项目就绕不开Nacos,阿里巴巴提供的Nacos组件,可以提供服务注册与发现和分布式配置服务,拥有着淘宝双十一十几年的流量经验,…...

深度学习 Day28——利用Pytorch实现好莱坞明星识别
深度学习 Day28——利用Pytorch实现好莱坞明星识别 文章目录深度学习 Day28——利用Pytorch实现好莱坞明星识别一、前言二、我的环境三、前期工作1、导入依赖项设置GPU2、导入数据集3、划分数据集四、调用官方的VGG16模型五、训练模型1、编写训练函数2、编写测试函数3、设置动态…...
Android中使用FCM进行消息推送
Firebase Cloud Message 的介绍 Firebase Cloud Message(FCM)是由Google推出的一种云端消息推送服务,它是由Google推出的Google Cloud Messaging(GCM)服务的升级版。在2016年5月,Google宣布将Google Cloud Messaging重命名为Firebase Cloud Message,作为Firebase的一部…...

从 X 入门Pytorch——BN、LN、IN、GN 四种归一化层的代码使用和原理
Pytorch中四种归一化层的原理和代码使用前言1 Batch Normalization(2015年提出)Pytorch官网解释原理Pytorch代码示例2 Layer Normalization(2016年提出)Pytorch官网解释原理Pytorch代码示例3 Instance Normalization(2…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
Easy Excel
Easy Excel 一、依赖引入二、基本使用1. 定义实体类(导入/导出共用)2. 写 Excel3. 读 Excel 三、常用注解说明(完整列表)四、进阶:自定义转换器(Converter) 其它自定义转换器没生效 Easy Excel在…...