C++实现井字棋小游戏(写得不好,留作纪念!!!)

回宿舍路上,同学问起我能不能用C++写个五子棋游戏,我说应该挺简单的,但是我不会写,然后他说不用写五子棋,就写井字棋吧!!!我说试试吧!!!
(不过说实话,写得不是很好,留作纪念吧!!!)

代码如下:

#include <iostream>
using namespace std;
const int N = 5;
bool vis[N][N] = { false };
bool tttSon[N][N] = { false };
char tttDesk[N][N];
int dx[] = { 1,-1,1,-1,0,0,1,-1 };
int dy[] = { 0,0, 1,-1,1,-1,-1,1 };
bool isEnd = false;void printError()
{cout << "无效输入,按任意键后,重新输入" << endl;
}void initDesk()
{for (int i = 1; i <= 3; i++)for (int j = 1; j <= 3; j++)tttDesk[i][j] = '@';
}void printInterface(char son)
{int flagX = 0, flagY = 0;for (int i = 1; i <= 3; i++){for (int j = 1; j <= 3; j++){cout << vis[i][j] << " ";if (vis[i][j]){flagX = i;flagY = j;}}cout << endl;}cout << "当前要落的子为:" << son << endl;cout << "当前光标的位置在第" << flagX << "行," << "第" << flagY << "列" << endl;cout << "-------------------------------------" << endl;for (int i = 1; i <= 3; i++){for (int j = 1; j <= 3; j++){cout << tttDesk[i][j] << " ";}cout << endl;}
}void checkPos(int &sonX,int &sonY)
{for (int i  =1;i<=3;i++)for (int j = 1; j <= 3; j++){if (!tttSon[i][j]){sonX = i;sonY = j;vis[sonX][sonY] = true;return;}}
}bool checkWinOfDfs(int x, int y,int step,char me,int k)
{if (step == 3) return true;int xx = x + dx[k];int yy = y + dy[k];if (xx < 1 || xx > 3 || yy < 1 || yy > 3 || tttDesk[xx][yy] != me || tttDesk[xx][yy]=='@') return false;/*cout << xx << " " << yy << endl;*/checkWinOfDfs(xx, yy, step + 1, me, k);}void operatorDesk(int &sonX,int &sonY,char &son)
{char sonIng;bool flag = false;initDesk();int cnt = 0;while (true){bool winFlag = false;if (cnt > 4 && tttDesk[sonX][sonY]!='@'){/*cout << sonX << " " << sonY << endl;*/for (int k = 0; k < 8; k++){if (checkWinOfDfs(sonX, sonY, 1, tttDesk[sonX][sonY], k)){winFlag = true;}if (winFlag){if (tttDesk[sonX][sonY]=='O')cout << "Winer is O" << endl;else cout << "Winer is X" << endl;isEnd = true;return;}}int cnt1 = 0;for (int i = 1;i<=3;i++)for (int j = 1; j <= 3; j++){if (tttSon[i][j]) cnt1++;}if (cnt1 == 9) return;}if (!flag)checkPos(sonX,sonY);printInterface(son);cout << "请输入指令" << endl;cin >> sonIng;if (sonIng == 'w' || sonIng == 'W'){if (sonX - 1 < 1 ){printError();system("pause");system("cls");continue;}flag = true;vis[sonX][sonY] = false;sonX -= 1;vis[sonX][sonY] = true;system("cls");}else if (sonIng == 's' ||sonIng == 'S'){if (sonX + 1 > 3 ){printError();system("pause");system("cls");continue;}flag = true;vis[sonX][sonY] = false;sonX += 1;vis[sonX][sonY] = true;system("cls");}else if (sonIng == 'a'|| sonIng == 'A'){if (sonY - 1 < 1 ){printError();system("pause");system("cls");continue;}flag = true;vis[sonX][sonY] = false;sonY -= 1;vis[sonX][sonY] = true;system("cls");}else if (sonIng == 'd' || sonIng=='D'){if (sonY + 1 > 3 ){printError();system("pause");system("cls");continue;}flag = true;vis[sonX][sonY] = false;sonY += 1;vis[sonX][sonY] = true;system("cls");}else if (sonIng == 'g' || sonIng == 'G'){if (tttSon[sonX][sonY]){printError();system("pause");system("cls");continue;}cnt++;tttSon[sonX][sonY] = true;vis[sonX][sonY] = false;flag = false;tttDesk[sonX][sonY] = son;if (son == 'O') son = 'X';else son = 'O';system("cls");}else{printError();system("pause");system("cls");continue;}}
}void PrintGame()
{cout << "----------------------" << endl;cout << "----简略井字棋游戏----" << endl;cout << "----------------------" << endl;cout << "------游戏说明--------" << endl;cout << "---按下G键开始游戏----" << endl;cout << "--通过W键控制光标上移-" << endl;cout << "-通过S键控制光标下移--" << endl;cout << "--通过A键控制光标左移-" << endl;cout << "--通过D键控制光标右移-" << endl;cout << "------通过G键落子-----" << endl;cout << "----------------------" << endl;cout << "----------------------" << endl;
}int main()
{char son = 'O';int  sonX = 1, sonY = 1;while (true){char gameStart;PrintGame();cin >> gameStart;if (gameStart == 'G' || gameStart == 'g'){system("cls");break;}else{cout << "输入错误!!!,请重新输入" << endl;system("pause");system("cls");}}operatorDesk(sonX, sonY,son);if (!isEnd){cout << "平局!!!" << endl;}return 0 ;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法-- 数组中出现次数超过一半的数字(时间复杂度的讨论)

时间效率 互联网想对时间效率格外的敏感&#xff0c;所以我们总是在需求迭代一定程度后去做优化。而且我们解决问题的时候&#xff0c;时间效率往往是一个考查的重点。因此我们平时编码过程中就必须不断的优化效率&#xff0c;追求完美的态度与能力。 首先是编码习惯&#xff…

我是如何一步步的在并行编程中将lock锁次数降到最低实现无锁编程

在并行编程中&#xff0c;经常会遇到多线程间操作共享集合的问题&#xff0c;很多时候大家都很难逃避这个问题做到一种无锁编程状态&#xff0c;你也知道一旦给共享集合套上lock之后&#xff0c;并发和伸缩能力往往会造成很大影响&#xff0c;这篇就来谈谈如何尽可能的减少lock…

常用Arthas命令

jad反编译 检查线上代码是否修改成功&#xff0c;例如修改interface后看Jar包是否引入新的&#xff0c;或者代码是否最新的。 jad com.zhenai.counseling.business.provider.facade.supremecourse.RedeemRecordFacadeImpl //反编译只展示源码 jad --source-only com.zhenai.c…

关于分布式锁的面试题都在这里了

「我今天班儿都没上&#xff0c;就为了赶紧把这篇文章分布式锁早点写完。我真的不能再贴心了。」「边喝茶边构思&#xff0c;你们可不要白嫖了&#xff01;三连来一遍&#xff1f;」引言为什么要学习分布式锁&#xff1f;最简单的理由就是作为一个社招程序员&#xff0c;面试的…

数据结构与算法--将数组排成最小的数

将数组排成最小的数 题目&#xff1a;输入一个正整数的数组&#xff0c;将数组中所有数字拼接在一起排列成一个新的数&#xff0c;打印能拼接出来的所有数字中最小的一个&#xff0c; 案例&#xff1a;输入数组{12,4&#xff0c;55}&#xff0c;则能打印出最小的数组是&#x…

Git 15周年:当年的分道扬镳,成就了今天的开源传奇

4 月 7 日&#xff0c;全球最主流的版本控制系统 —— Git 迎来 15 周年纪念日&#xff0c;项目主要维护者 Junio C Hamano&#xff08;滨野 纯&#xff09; 先生发邮件庆祝了这一日子。我们知道&#xff0c;所有的软件项目在整个生命周期中都要经过不断迭代&#xff0c;在一个…

数据结构与算法--丑数

找出排在第n位大的丑数 丑数&#xff1a;我们将只包含质因子 2,3,5的数称为丑数&#xff08;ugly Number&#xff09;。求按从小到大的熟悉怒排列的低1500 个丑数。例如6,8 都是丑数&#xff0c;但是14 不是丑数&#xff0c;因为他包含质因子7。1 是基础丑数 解法一&#xff1…

数据结构与算法--第一个只出现一次的字符

第一个只出现一次的字符 题目&#xff1a;在字符串中找出第一个只出现一次的字符&#xff0c;比如输入“wersdfxvsdfwer”&#xff0c;则输出x。 方法一&#xff1a; 还是老规矩&#xff0c;初始想法是从头遍历每一个字符&#xff0c;每遍历一个字符都与后面n-1个字符比较如果…

使用 docker 编译运行 abp 项目

在前面的两篇文章中&#xff0c;介绍了如何在华为鲲鹏架构及其Euler系统上运行dotnet core, 使用docker运行了默认的mvc模板项目&#xff0c;这篇文章继续介绍在docker中运行更复杂的dotnet core项目&#xff0c;这里以业内鼎鼎大名的abp vnext框架&#xff0c;版本 2.6 为例。…

数据结构与算法--数组中的逆序对

题目&#xff1a;在数组中的两个数字如果签名一个数字大于后面的数组&#xff0c;则这两个数字组成一个逆序对。输入一个数组&#xff0c;求出这个数组中的逆序对的总数。 案例&#xff1a;输入数组{7,5&#xff0c;6,4}中一共有5个逆序对分别是{7,6}&#xff0c;{7,5}&#x…

用了这么多年的泛型,你对它到底有多了解?

现代程序员写代码没有人敢说自己没用过泛型&#xff0c;这个泛型模板T可以被任何你想要的类型替代&#xff0c;确实很魔法很神奇&#xff0c;很多人也习以为常了&#xff0c;但就是这么有趣的泛型T底层到底是怎么帮你实现的&#xff0c;不知道有多少人清楚底层玩法&#xff0c;…

数据结构与算法--两个链表中第一个公共节点

链表中第一个公共节点 公节点定义&#xff1a;同一个节点在两个链表中&#xff0c;并不是节点值相同题目&#xff1a;输入两个节点&#xff0c;找出他们的第一个公共节点&#xff0c;节点定义如需 /*** 链表元素节点** author liaojiamin* Date:Created in 12:17 2021/3/5*/ …

ASP.NET Core技术研究-全面认识Web服务器Kestrel

因为IIS不支持跨平台的原因&#xff0c;我们在升级到ASP.NET Core后&#xff0c;会接触到一个新的Web服务器Kestrel。相信大家刚接触这个Kestrel时&#xff0c;会有各种各样的疑问。今天我们全面认识一下ASP.NET Core的默认Web服务器Kestrel。一、初识Kestrel首先&#xff0c;K…

数据结构与算法--二叉堆(最大堆,最小堆)实现及原理

二叉堆&#xff08;最大堆&#xff0c;最小堆&#xff09;实现及原理 二叉堆与二叉查找树一样&#xff0c;堆也有两个性质&#xff0c;即结构性质和堆性质。和AVL树一样&#xff0c;对堆的一次操作必须到堆的所有性质都被满足才能终止&#xff0c;也就是我们每次对堆的操作都必…