C++实现五子棋小游戏

代码如下:

#include <iostream>
using namespace std;class GoBangDesk
{
public:GoBangDesk() :state('@'), flagWin(false), flagOver(false), flagDraw(false){for (int i = 0; i < 20; i++)for (int j = 0; j < 20; j++)goBangDesk[i][j] = '#';}void printDesk(){cout << "         1  2  3  4  5  6  7  8  9 10 11 12 13 14 15" << endl;for (int i = 1; i <= 15; i++){cout << "        ---------------------------------------------" << endl;cout << i<<"\t";for (int j = 1; j <= 15; j++){cout << "|" << goBangDesk[i][j]<<"|";}cout << endl;}cout<< "        ---------------------------------------------" << endl;}void clearDesk(){system("cls");}void gameProcess(){int tmpx;int tmpy;cout << "当前要落的子为:" << state << endl;cout << "请输入坐标,进行落子操作:" << endl;cin >> tmpx >> tmpy;if (tmpx < 1 || tmpx > 15 || tmpy < 1 || tmpy >15){cout << "输入有误,请重新输入" << endl;system("pause");return;}if (goBangDesk[tmpx][tmpy]!='@' && tmpx >= 1 && tmpx <= 15 && tmpy >= 1 && tmpy <=15){idx = tmpx;idy = tmpy;goBangDesk[idx][idy] = state;lastState = state;if (state == '@') state = 'O';else state = '@';checkWin();}else{cout << "输入有误,请重新输入" << endl;system("pause");}}void gameStart(){while (true){printDesk();gameProcess();if (flagOver) break;if (flagDraw){cout << "平局" << endl;break;}clearDesk();}}void checkWin(){for (int i = 0; i < 8; i++){checkWinDfs(idx, idy, i, 1);if (flagWin){cout << lastState << "方赢得比赛" << endl;flagOver = true;break;}}}void checkDesk() {bool flag = false;for (int i = 1; i <= 15; i++){for (int j = 1; j <= 15; j++){if (goBangDesk[i][j] == '@'){flag = true;flagDraw = true;if (flag) break;}}if (flag) break;}}private:void checkWinDfs(int x, int y, int k, int step){if (step == 5){flagWin = true;}char tmpState = goBangDesk[x][y];int xx = x + dx[k];int yy = y + dy[k];if (goBangDesk[xx][yy] != tmpState && goBangDesk[xx][yy] != '@' || step > 5) return;checkWinDfs(xx, yy, k, step + 1);}private:static const int N = 20;char goBangDesk[N][N];int idx;int idy;char state;//当前是哪个子(状态)char lastState;//上一次是哪个子(状态)int dx[8] = { 0,0,1,-1,1,1,-1,-1 };int dy[8] = { 1,-1,0,0,1,-1,1,-1 };bool flagWin;//判断胜利bool flagOver;//判断结束bool flagDraw;//判断棋盘满了,平局
};int main()
{GoBangDesk d;d.gameStart();return 0;}

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

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

相关文章

Mobius 一个运行在 .NET Core 上的 .NET 运行时

导语一个 .NET 应用仅仅只是一块在 .NET 运行时上面运行的二进制代码。而 .NET 运行时只是一个能执行这项任务的程序。当前的 .NET Framework 和 .NET Core 运行时采用 C 编写&#xff0c;而 Mobius 是一个使用 C# 重写的 .NET 运行时&#xff0c;重写包括 JIT 编译和 GC 等&am…

jsbridge实现及原理_JSBridge 实现原理解析

JSBridge 项目以 js 与 android 通信为例&#xff0c;讲解 JSBridge 实现原理&#xff0c;下面提到的方法在 iOS(UIWebview 或 WKWebview)均有对应方法。1. native to js两种 native 调用 js 方法&#xff0c;注意被调用的方法需要在 JS 全局上下文上loadUrlevaluateJavascript…

Autofac的切面编程实现

面向切面编程&#xff1a;Autofac.Annotation扩展组件是我开源的一款利用打标签完成autofac容器的注入组件。https://github.com/yuzd/Autofac.Annotation我们之前介绍了利用Aspect标签来完成拦截器功能Aspect是一对一的方式&#xff0c;我想要某个class开启拦截器功能我需要针…

[Java基础]体验Lambda表达式

普通写法: 代码如下: package LambdaPack01;public class MyRunnable implements Runnable{Overridepublic void run() {System.out.println("多线程启动了");} }package LambdaPack01;public class LambdaDemo01 {public static void main(String[] args) {MyRunna…

linux启动mqtt_linux下安装MQTT服务器 - EMQTT

1. 下载从官网下载https://www.emqx.io/downloads#broker&#xff0c; 本文所用版本为broker/v3.2.1/emqx-centos7-v3.2.1.ziplinux下 下载:wget https://www.emqx.io/downloads/broker/v3.2.1/emqx-centos7-v3.2.1.zip解压&#xff1b;unzip emqx-centos7-v3.2.1.zip所在目录&…

.net core 基于Dapper 的分库分表开源框架(core-data)

一、前言感觉很久没写文章了&#xff0c;最近也比较忙&#xff0c;写的相对比较少&#xff0c;抽空分享基于Dapper 的分库分表开源框架core-data的强大功能&#xff0c;更好的提高开发过程中的效率&#xff1b;在数据库的数据日积月累的积累下&#xff0c;业务数据库中的单表数…

[Java基础]Lambda表达式练习

代码如下: package LambdaPracticePack;public interface Eatable {void eat(); }package LambdaPracticePack;public class EatableImpl implements Eatable{Overridepublic void eat() {System.out.println("一天一苹果&#xff0c;医生远离我");} }package Lambd…

ltv价值 应用_用户终生价值Ltv是什么,在游戏设计中如何考虑?

简单来说.你的游戏产品&#xff0c;用户的LTV表现&#xff0c;可以判断你这个产品的生命周期。看用户LTV的表现&#xff0c;30天LTV是否&#xff1e;每用户成本&#xff1f;大于越多&#xff0c;产品的付费做的越健康。如果小于等于&#xff0c;那就意味着赔本&#xff0c;产品…

​你可能不知道的7个HTML小技巧

五一期间&#xff0c;知道大家都比较懒&#xff0c;我也是。所以写篇简单且基础的技术小文&#xff0c;不需要动脑子&#xff0c;扫一眼就能掌握的那种。DETAILS 标签<details> 标签将额外的详情信息隐藏起来&#xff0c;用户在需要的时候点击即可展开查看详情。<deta…

mysql基本架构_MySQL的基本架构

MySQL的基本架构发布时间&#xff1a;2019-02-16 23:35,浏览次数&#xff1a;178, 标签&#xff1a;MySQLMySql的基本架构示意图如下&#xff1a;一、MySQL总体上可分为Server层和存储引擎层。Server层包括连接器、查询器、分析器、优化器、执行器等&#xff0c;涵盖 MySQL的大…

青年节寄语和新课程免费上架

大家好&#xff0c;确实好久没有写东西了&#xff0c;希望这篇推送不是用来提醒你取消关注哈。2020年这突如其来的疫情&#xff0c;打乱了我们的生活&#xff0c;也让很多人更加明白了生活的无常以及可贵吧&#xff0c;在此也真诚希望大家都要好好哒&#xff0c;不负韶华&#…

MySQL错误1264和1366_Mysql错误1366 - Incorrect integer value解决方法

由于这个数据库服务器存放的数据库比较多且都是小数据库&#xff0c;所以最初的时候是运行在windows服务器上的。前一段时间由于机房服务器要做调整&#xff0c;于是我便在一个夜深人静的夜晚对数据库进行的迁移及前台应用程序进行了调整&#xff0c;调整结束后测试应用均可以正…

从堆里找回“丢失”的代码相关命令简介

前言 在上一篇文章中&#xff0c;我们主要使用了三个命令 !address&#xff0c;s&#xff0c;.writemem 把丢失的代码成功的保存到了文件中。本文简单介绍一下上文用到的这三个命令。windbg 中的地址范围语法 很多命令都会用到 地址范围。比如 s 命令&#xff0c;.writemem 命令…

mysql 3t_编译安装mysql

编译安装mysql1 查找系统是否安装了myqlrpm -q mysql mysql-server1.1如果安装了。就删除sudo yum -y remove mysql mysql-serversudo rm -rf /etc/my.cnf2 安装依赖sudo yum install ncurses-devel -ysudo yum install libaio-devel -ysudo yum install bison -ysudo yum inst…

慎用ToLower和ToUpper,小心把你的系统给拖垮了

不知道何时开始&#xff0c;很多程序员喜欢用ToLower&#xff0c;ToUpper去实现忽略大小写模式的字符串相等性比较&#xff0c;有可能这个习惯是从别的语言引进的&#xff0c;大胆猜测下是JS&#xff0c;为了不引起争论&#xff0c;我指的JS是技师的意思~一&#xff1a;背景1. …

mysql 2008 日_SQL2008 的 日期数据类型

摘要你是否曾经想在数据库中存储一个日期而没有时间部分&#xff0c;或者想存储一个时间值希望有更高的精度&#xff1f;在SQL Server 2008的介绍中&#xff0c;微软介绍了一些新的日期数据类允许你只存储一个日期、更高精度的时间值等。这些新的数据类型为你存储日期和时间相关…