> # ♻️ 资源
> **大小:** 222KB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100013244**](https://www.yuque.com/sxbn/ks/100013244)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/88283014**](https://download.csdn.net/download/s1t16/88283014)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 基于汇编语言的井字棋游戏程序开发设计
# 一、游戏背景介绍
## 1.1 背景介绍
井字棋,英文名叫Tic-Tac-Toe,是一种在3*3格子上进行的连珠游戏,和五子棋比较类似,由于棋盘一般不画边框,格线排成井字故得名。井字棋的具体玩法为在一个3x3的棋盘上,一个玩家用X做棋子,另一个玩家用O做棋子,谁先在棋盘上的一行、一列或对角线上画满三个棋子,即可获胜,如果棋盘下满无人胜出,即为平局。
由于井字棋玩法简单,界面比较简洁,能够快速完成游戏,因此具有较强的娱乐性,基本上每个人都会玩。所以我们将其作为我们设计的项目。
在这个项目中,我们设计为双人对战游戏,并且能够对玩家的落棋进行判断,是否符合井字棋的游戏规则。还有输赢检测机制,能立即检测出来是否有玩家获胜。
## 1.2 基本功能
由于井字棋只有9个棋子位,所以在我们用一种更简单的表示方法,即直接用1-9个9个数字来表示位置,其索引顺序与键盘上的数字键排列一致,下棋时玩家看着数字键下,较为简便。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/2469055/1693540352376-caa9b72e-fed9-4d8e-8143-f09330a1f0ac.png#averageHue=%23e8e7e7&clientId=ucc2d17ae-de4f-4&from=paste&height=419&id=ue5837eaa&originHeight=524&originWidth=866&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=203314&status=done&style=none&taskId=ua8cfe6d0-5178-4644-a5f3-612be227dd5&title=&width=692.8)
当有玩家先在棋盘上的一行、一列或对角线上画满三个棋子时,该玩家获得胜利。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/2469055/1693540382987-1b62c5b3-8609-485d-bff3-78b75041549d.png#averageHue=%23edebeb&clientId=ucc2d17ae-de4f-4&from=paste&height=417&id=u43930d7f&originHeight=521&originWidth=886&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=65232&status=done&style=none&taskId=ubc2d98f0-d33d-4622-a3d6-bf46391b3e8&title=&width=708.8)
判断胜利的方法就是检测所有的横行和竖列以及对角线是否画满三个棋子。具体实现方法为先检查斜方向是否有三个一样的棋子,有的话对应棋子的玩家胜出,结束游戏。如果没有就继续检查横方向,如果有三个一样的棋子,对应棋子的玩家胜出,结束游戏。没有的话继续检查竖方向,如果有三个一样的棋子,对应棋子的玩家胜出,结束游戏,如果还没有,就代表没有玩家胜出。继续游戏。
当棋盘的格子都被落棋了,但是没有玩家在一行、一列或对角线上画满三个棋子,此时双方打成平手。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/2469055/1693540405339-bf6699e9-ecba-44f6-9bfc-d36f49d274e2.png#averageHue=%23eceaea&clientId=ucc2d17ae-de4f-4&from=paste&height=419&id=u866a3adc&originHeight=524&originWidth=888&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=73719&status=done&style=none&taskId=uc437906e-c871-4fe4-adca-02394188501&title=&width=710.4)
在玩家游戏过程中,如果玩家落棋不符合井字棋游戏规则的话,程序会提醒落棋错误,并且要求玩家重新落棋,直到玩家落棋成功。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/2469055/1693540424447-5df11a83-4fd0-427b-98f7-7e40e3756c86.png#averageHue=%23ece9e9&clientId=ucc2d17ae-de4f-4&from=paste&height=480&id=u220c84f2&originHeight=600&originWidth=888&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=92308&status=done&style=none&taskId=u1318a23a-10d2-4b99-8442-d40114dff66&title=&width=710.4)
# 二、核心算法思想
# 2.1 设计棋盘的算法
棋盘是整个游戏中的框架,玩家在落子后都会显示一个棋盘目前状态。
先绘制棋盘的上边界,然后调用绘制行的方法来绘制棋盘的内容。每个格子都由多个竖线和空格组成,这就需要不断地打印这些字符来实现,具体方法是绘制一个竖线,在绘制格子里的数字或者棋子,然后再绘制一个竖线,这样一个一个格子就绘制好了。
棋盘一共有九个格子,每行有三个格子,每画完一个格子后,就会跳转到下一个字符,画这个字符所在的格子,并且每绘制三个格子就进行换行,这样9个格子就会组成一个3x3的棋盘。
同时给棋盘里的格子和每个格子的符号以及玩家的两个棋子分配了不同的颜色,这样使得界面比较美观。
## 2.2 设计棋子并定义玩法的算法
该程序是一个双人游戏,这里我们的玩家有两名,所以我们可以定义棋子为X和O,通过比较指令可以规定他们依次落棋,落棋次数最多为9次,玩家落棋后即可把相应格子的数字改为玩家的棋子并涂上颜色,在游戏界面中还会提示玩家选择的格子。
## 2.3 检测有效数字的算法
在游戏过程中,玩家要落的必须是数字1-9,而不能是其他的字符,并且已经落棋的格子不能再落棋。首先玩家选择要从键盘上敲的字符,我们把玩家输入的字符放到寄存器中,同时进行检查数字是否有效。
通过比较指令完成对有效数字的判断。如果大于等于1并且小于等于9,则玩家输入的字符有效,如果小于1或大于9或者是其他的字符,则提醒玩家这不是一个有效数字,需要重新选择落子的位置,直到所下的棋子为有效数字。
最后一步是检查所下的是有效数字是否重复占用,玩家不能在自己以及对手之前落棋的位置进行重复落棋,必须保证不会下重复的棋子。当玩家进行重复落棋时,程序会提醒玩家该位置已经有棋子,需重新选择落棋位置,直到所选位置是新的。
## 2.4 检测有玩家胜利的算法
在游戏过程中,由于某个玩家在棋盘一个方向连成三个棋子便可以判定其胜利,所以需要有算法去检测三子连线。我们需要从不同方向去考虑,横方向,纵方向,斜方向,这就涉及三种检测算法。
首先进行斜方向检测。先获取斜方向上第一个和第二个棋子,进行比较,如果不一样,就进行反斜方向的检测,如果一样,继续获取该方向上第三个棋子,继续进行比较,如果还是一样的话,说明再该方向上有玩家胜出。反斜方向的检测机制与斜方向的相同。
如果斜方向没有三个一样的,则进行横方向的检测,首先是第一行的检测,获取该行的第一个棋子和第二个棋子进行比较,如果不一样进行下一行检测,一样的话就获取该行第三个棋子,进行比较,如果一样,说明在该方向上有玩家胜出,不一样的话进行下一行检测。第二行的检测方法与第一行相同。第三行检测如果不一样,就说明没有玩家胜出。
如果横方向没有三个一样的,就进行竖方向检测。首先是第一列的检测,获取该列的第一个棋子和第二个棋子进行比较,如果不一样进行下一列检测,一样的话
神仙别闹
- 粉丝: 3687
- 资源: 7461
最新资源
- Untitled7.ipynb
- C#ASP.NET酒店管理系统源码 宾馆管理系统源码数据库 SQL2008源码类型 WebForm
- 【安卓毕业设计】基于安卓的奶牛管理源码(完整前后端+mysql+说明文档).zip
- 【安卓毕业设计】Android app作业源码(完整前后端+mysql+说明文档).zip
- Scrapy基础(讲解详细、包括框架流程代码实战,最佳学习资料).zip
- FPGA实现IIC通信quartus工程,纯verliog,可进行移植
- C#ASP.NET外贸订单管理系统源码 汽配订单管理系统源码数据库 SQL2008源码类型 WebForm
- 基于双流Faster R-CNN网络的图像篡改检测项目源码+训练好的模型+文档说明.zip
- 买的USB转485串口的驱动程序,使用的是美国TI芯片+WCH340芯片
- 二次平台培训视频,人事管理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈