当前位置: 首页 > news >正文

C——五子棋小游戏

前言

五子棋,又称连珠棋,是一种双人对弈的棋类游戏。游戏目标是在一个棋盘上,通过在横、竖、斜线上依次放置棋子,使自己的五个棋子连成一线,即横线、竖线或斜线,且无被对手堵住的空位,从而获胜。

实现简单的五子棋游戏,需要有二维数组、函数调用等知识。我使用的编译器是:VS2022。

代码如果有显示错误可把scanf改为scanf_s。

一、游戏规则

棋盘与开局
棋盘:标准的五子棋棋盘通常是横纵各 15 条线交叉组成的正方形,形成 15×15 共 225 个交叉点,当然也有其他规格如 19×19 的棋盘存在,但 15×15 使用最为普遍。这些交叉点就是双方落子的位置。
开局:对局开始前,棋盘为空。一般规定黑子先落子,之后双方轮流在棋盘的空交叉点上放置棋子,白子随后按顺序落子。
落子规则
双方交替将自己颜色的棋子(黑方执黑子,白方执白子)放置在棋盘的空交叉点上,每次只能落一子,且落子位置必须是没有棋子的空交叉点,不可以在已有棋子占据的点或者棋盘范围之外落子。
获胜判定
常规五子连珠获胜:当一方成功在棋盘的横、竖、斜方向上连续放置五个同色棋子时,即达成五子连珠,该方立即获胜,对局结束。例如,横排连续五个黑子或者竖排连续五个白子等情况出现,对应的棋手便赢得比赛。
特殊规则下的获胜(禁手规则适用情况,多用于竞技比赛中限制黑方先行优势)
三三禁手:黑方一子落下同时形成两个或两个以上的 “活三”(“活三” 指再落一子就能形成五子连珠的三枚同色连续棋子且两端有空点可延伸),则此点为三三禁手,黑方若下在此处违规,白方获胜。
四四禁手:黑方一子落下同时形成两个或两个以上的 “活四”(“活四” 指已有四枚同色连续棋子且两端有空点可延伸,下子必成五子连珠的棋形),此点为四四禁手,黑方下在此处算违规,白方获胜。
长连禁手:黑方一子落下形成连续六个或六个以上同色棋子,称为长连禁手,黑方违规,白方获胜。
和棋判定
满盘情况:如果棋盘上所有的交叉点都已经落有棋子,双方均未达成五子连珠,此时判定为和棋,对局结束。
循环局面:在对弈过程中,若出现双方反复下出相同局面,经过判定符合循环局面和棋的相关规定,也会判定为和棋结束对局。

以上是详细的五子棋规则,简单来说就是:两位玩家分别执黑棋和白棋,轮流在15*15的棋盘内落子,先一步在横、竖、斜三种情况下相连五个相同颜色的棋子的一方胜利。如果棋盘填满尚未由一位玩家五子相连,即判平局。特殊情况特殊判胜负。

二、游戏实现思路

  1. 使用坐标输入代替鼠标点击,坐标应该符合人们使用习惯从1开始;(【鼠标左击】功能)
  2. 若有人胜利提示胜利方为谁,并结束游戏;
  3. 若无人胜利,且棋盘未满,提示继续;
  4. 若棋盘已满,提示平局;
  5. 实现清屏功能,每次落完子之后刷新屏幕;
  6. 可以加入进度条,在游戏开始时展示。

三、各个代码的用处

将源代码分为三个文件,一个头文件(.h),一个源文件(.c),一个测试文件(test.c)。

头文件gobang.h:用于声明函数和定义常量等。

源文件gobang.c:实现头文件中生命的函数。

测试文件test.c:调用上述函数实现游戏逻辑。

四、代码实现

gobang.h

gobang.c

test.c

总结

实际上这个版本还是一个非常简易的版本,在之后学习到别的模块之后可以对这个项目再进行改进,比如可以尝试以下功能:

人机对战

功能扩展:颜色提示,步数记录,先手随机交换等

网络版本

以上便是此次分享,希望本篇博客对大家有帮助。

http://www.dtcms.com/a/186838.html

相关文章:

  • 坐标系概述
  • 湖北理元理律师事务所:企业债务危机的“止血”与“造血”平衡术
  • spark的处理过程-转换算子和行动算子
  • 视频编码原理讲解一:VCL层和NAL层的讲解
  • 在文档里如何引用在线SVG甘特图
  • 17.three官方示例+编辑器+AI快速学习webgl_buffergeometry_lines
  • NVIDIA Quantum-2 QM9700系列利用400G infinniband扩展数据中心智能交换机 NVIDIA Quantum-2 InfiniBand 交换机系列
  • 服务器带宽基础知识
  • 量子加密通信:守护信息安全的未来之盾
  • 从逻辑学视角探索数学在数据科学中的系统应用:一个整合框架
  • 2024年北理工Python123第六章编程题整理
  • Linux `kill` 指令深度解析与高级应用指南
  • C38-全局变量、局部变量及外部变量
  • 吴恩达机器学习笔记:单变量线性回归
  • 机器学习驱动的智能化电池管理技术与应用
  • 《Python星球日记》 第59天:生成对抗网络(GAN)
  • 《算法导论(第4版)》阅读笔记:p32-p38
  • USB学习【10】描述符-HID描述符
  • 42、在.NET 中能够将⾮静态的⽅法覆写成静态⽅法吗?
  • Java 内存模型(JMM)与内存屏障:原理、实践与性能权衡
  • RabbitMQ高并发秒杀、抢购系统、预约系统底层实现逻辑
  • 自然语言处理(NLP)在影评情感分析中的处理流程示例
  • web 自动化之 Unittest 应用:测试报告装饰器断言
  • 继承关系下创建对象的具体流程
  • (十三)Java注解(Annotation)全面解析:从基础到高级应用
  • set常用接口及模拟实现
  • Kubernetes控制平面组件:Kubelet详解(二):核心功能层
  • Linux系统编程(八)--进程间通信
  • 邮件营销应对高退信率的策略
  • C语言| 局部变量、全局变量