C/C++编程日记:逻辑井字棋(圈叉)(用空格初始化)
问题描述:
3*3的棋盘中,只要一条线上出现三个一样的棋子就获胜(玩家或电脑);如果棋盘已经放满还未出现三个棋子一条线则打成平手。
具体细节:
初始化棋盘(用空格初始化)

//初始化棋盘
voidinitChess(charchessbox[ROW][COL]){ for(introw=0;row<ROW;row++){ for(intcol=0;col<COL;col++){ chessbox[row][col]=' ';}}}
打印棋盘
//打印棋盘
voidprintChess(charchessbox[ROW][COL]){ system("cls");printf("+---+---+---+\n");for(introw=0;row<ROW;row++){ printf("| %c | %c | %c |\n",chessbox[row][0],chessbox[row][1],chessbox[row][2]);printf("+---+---+---+\n");}}
电脑落子(用o表示电脑落子)
//电脑落子(用o表示)
voidcomputerMove(charchessbox[ROW][COL]){ srand(time(0));while(1){ introw=rand()%3;intcol=rand()%3;if(chessbox[row][col]==' '){ chessbox[row][col]='o';break;}}}
玩家落子
//玩家落子(用x表示)
voidplayerMove(charchessbox[ROW][COL]){ introw,col;while(1){ printf("请输入您的落子地点:");scanf("%d %d",&row,&col);if(row>=3||col>=3){ printf("您输入的落子位置有误,请重新输入:");continue;}if(chessbox[row][col]==' '){ chessbox[row][col]='x';break;}printf("该位置已有棋子,请重新输入:");}}
三个棋子一条线

在一行或一列实现三个棋子一条线
//行
for(introw=0;row<ROW;row++){ if(chessbox[row][0]!=' '&&chessbox[row][0]==chessbox[row][1]&&chessbox[row][0]==chessbox[row][2]){ returnchessbox[row][0];}}//列
for(intcol=0;col<COL;col++){ if(chessbox[0][col]!=' '&&chessbox[0][col]==chessbox[1][col]&&chessbox[0][col]==chessbox[2][col]){ returnchessbox[0][col];}}
对角线实现三个棋子一条线
if(chessbox[0][0]!=' '&&chessbox[0][0]==chessbox[1][1]&&chessbox[0][0]==chessbox[2][2]){ returnchessbox[0][0];}if(chessbox[2][0]!=' '&&chessbox[2][0]==chessbox[1][1]&&chessbox[2][0]==chessbox[0][2]){ returnchessbox[2][0];}
和棋
棋盘放满还未获胜,则为和棋,打成了平手。
在这里插入代码片//和棋 if(isFull(checkbox)){ return'a';}

输赢约定:
返回x代表玩家获胜
if(isWinner(chessbox)=='x'){ printf("恭喜您赢啦!\n");break;}
返回o代表电脑获胜
if(isWinner(chessbox)=='o'){ printf("很遗憾,您输了!\n");break;}
返回a代表和棋(打成平手)
if(isWinner(chessbox)=='a'){ printf("你和电脑同一水平呦!\n");break;}
判断棋盘是否放满:
返回1代表棋盘已满
返回0代表棋盘未满
//判断棋盘是否摆满//1表示满;0表示不满。
intisFullChess(charchessbox[ROW][COL]){ for(introw=0;row<ROW;row++){ for(intcol=0;col<COL;col++){ //找到空格,说明未满
if(chessbox[row][col]==' '){ return0;}}}return1;}
源代码:

如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)

C/C++编程日记:逻辑井字棋(圈叉)(用空格初始化)的更多相关文章
- 程序设计入门—Java语言 第五周编程题 2井字棋(5分)
2 井字棋(5分) 题目内容: 嗯,就是视频里说的那个井字棋.视频里说了它的基本思路,现在,需要你把它全部实现出来啦. 你的程序先要读入一个整数n,范围是[3,100],这表示井字棋棋盘的边长.比如n ...
- [游戏学习22] MFC 井字棋 双人对战
>_<:太多啦,感觉用英语说的太慢啦,没想到一年做的东西竟然这么多.....接下来要加速啦! >_<:注意这里必须用MFC和前面的Win32不一样啦! >_<:这也 ...
- python 游戏(井字棋)
1. 游戏思路和流程图 实现功能,现实生活中的井字棋玩法 游戏流程图 2. 使用模块和游戏提示 import random def game_info(): print('欢迎来到井字棋游戏') pr ...
- Java实现简单井字棋
Java第一次实验,老师让做一个井字棋,电脑随机下棋. 然后就想能不能聪明一点,可以判断出走哪一步棋:然后只能做到不会输,还是不够聪明,只能呆板地堵住用户,smartRobot的第三个判断逻辑找不到最 ...
- 使用 Vue.js 改写 React 的官方教程井字棋
React 的官方教程井字棋很好的引导初学者一步步走进 React 的世界,我想类似的教程对 Vue.js 的初学者应该也会有启发,于是使用 Vue.js 进行了改写 可以先查看最终的结果,尝试点击体 ...
- 强化学习实战 | 表格型Q-Learning玩井字棋(一)
在 强化学习实战 | 自定义Gym环境之井子棋 中,我们构建了一个井字棋环境,并进行了测试.接下来我们可以使用各种强化学习方法训练agent出棋,其中比较简单的是Q学习,Q即Q(S, a),是状态动作 ...
- 用C语言实现井字棋(人人/AI人机)--完结版
目录 用C语言实现井字棋(人人/AI人机)--完结版 BUG与优化3: 1. 修改了step的计算方法,每个玩家玩完就加一次step 2. 改变了电脑下棋的逻辑,每个玩家玩完之后都跳过这次循环 源码: ...
- [CareerCup] 17.2 Tic Tac Toe 井字棋游戏
17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...
- quick cocos2d-x 入门---井字棋
学习quick cocos2d-x 第二天 ,使用quick-x 做了一个井字棋游戏 . 我假设读者已经 http://wiki.quick-x.com/doku.php?id=zh_cn阅读了这个链 ...
随机推荐
- docker的常用操作之三:网络配置
一, docker安装后容器使用哪些网络类型? 在宿主机执行如下命令: [root@localhost liuhongdi]# docker network ls NETWORK ID NAME DR ...
- centos8平台使用blkid查看分区信息
一,blkid的用途 blkid 命令是一个命令行工具,它可以显示关于可用块设备的信息 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/archite ...
- 通俗的讲解Python中的__new__()方法
2020-3-17更新本文,对本文中存争议的例子进行了更新! 曾经我幼稚的以为认识了python的__init__()方法就相当于认识了类构造器,结果,__new__()方法突然出现在我眼前,让我突然 ...
- user.ini Operation not permitted
rm: cannot remove '/public/.user.ini': Operation not permitted chattr -i .user.ini rm -f .user.ini
- .net npoi读word内容+目录
最近在做读npoi文档存入搜索引擎,实现快速查询word文档中内容并展示,效果希望带有目录导航. 网上有很多例子都是读写操作,很肤浅没有具体读到想要的东西所以自己就写了个demo,也有微软提供的off ...
- MongoDB 监控 --- MongoDB基础用法(八)
MongoDB 监控 在你已经安装部署并允许MongoDB服务后,你必须要了解MongoDB的运行情况,并查看MongoDB的性能.这样在大流量得情况下可以很好的应对并保证MongoDB正常运作. M ...
- MVC框架的代码审计小教程
介绍 YxtCMF在线学习系统是一个以thinkphp+bootstrap为框架进行开发的网络学习平台系统. 在线学习系统,为现代学习型组织提供了卓有成效的学习与培训方案, 能够通过在线学习和在线评估 ...
- ui 自动化的测试用例从哪来
从手工测试当中选取,尽量选择 1.简单且需要反复回归 2.稳定且不会经常变化 3.优先覆盖核心功能
- win10安装linux子系统(wsl)
win10安装linux子系统(wsl) 1.打开Microsoft Store 方式一:在电脑左下角打开 方式二:在电脑左下角的搜索里里输入Microsoft Store 打开Microsoft S ...
- 浅谈 Tarjan 算法
目录 简述 作用 Tarjan 算法 原理 出场人物 图示 代码实现 例题 例题一 例题二 例题三 例题四 例题五 总结 简述 对于初学 Tarjan 的你来说,肯定和我一开始学 Tarjan 一样无 ...