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…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...




