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阅读了这个链 ...
随机推荐
- git -- Authentication failed for 报错如何解决?
昨天拉代码拉不下来,报这个错误:fatal: Authentication failed for .... 有很多网上的解释是 $ git config --global --replace-all ...
- vue知识点11
1. Vue.js 是什么 Vue是一套用于构建用户界面的渐进式框架 2. vue的环境搭建(Vue2 ) 3. 经典的hello world new Vue({ ...
- 第12天 | 12天搞定Python,让excel飞起来
学了10多天Python基础知识了,是时候来点硬货了,看过<第1天 | 12天搞定Python,告诉你有什么用?>的老铁都知道,Python可用的领域挺多的.只是我长期待在企业,所以只能说 ...
- IntelliJ IDEA 2020.2 x64 激活 2020-09-18亲测有效
idea 激活,查阅许多资源和文章,激活码都失效,无意发现该资源(https://macwk.com/article/jetbrains-crack),亲测有效(2020-09-18),在此记录,以备 ...
- sql布尔盲注和时间盲注的二分脚本
布尔盲注: import requests url = "http://challenge-f0b629835417963e.sandbox.ctfhub.com:10080/" ...
- Java中的微信支付(1):API V3版本签名详解
1. 前言 最近在折腾微信支付,证书还是比较烦人的,所以有必要分享一些经验,减少你在开发微信支付时的踩坑.目前微信支付的API已经发展到V3版本,采用了流行的Restful风格. 今天来分享微信支付的 ...
- java多线程实现TCP网络Socket编程(C/S通信)
目录 开篇必知必会 一.多线程技术 二.实现多线程接收 1.单线程版本 2.多线程版本 三.多线程与进程的关系 四.客户端界面完整代码 五.多线程通信对比 最后 开篇必知必会 在前一篇<Java ...
- .NET redis 客户端开源组件 FreeRedis (继 CSRedisCore 之后重写)
什么是 FreeRedis FreeRedis 是一款 .NET redis 客户端开源组件,以 MIT 协议开源托管于 github,目前支持 .NET 5..NETCore 2.1+..NETFr ...
- ubunutu16.04 更改普通用户权限注销后只有guest身份 没有用户身份
第一次踩进百度经验的坑..... 之前对百度经验百信不疑,现在怀疑人生.. 网上搜了很多,也变得小心翼翼,最后姑且相信,但还是有点出入,以下是我的实践: (1)重启ubuntu系统,长按shift进入 ...
- 如何理解直播APP源码开发中的音视频同步
视频 直播APP源码的视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在一个本子的每一页画上画,然后快速翻动的感觉. 但是在实际应用中,并不是每一帧都是完整的画面,因为如果直 ...