13 c++版本的五子棋

前言

呵呵 这大概是 大学里面的 c++ 五子棋了吧 

有一些 面向对象的理解, 但是不多 

这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用 

然后 貌似 放在 win10 上面执行 还有一些问题, 渲染的, 应该很好调整 

 

 

五子棋

#include<Windows.h>
#include<iostream>
#include<ctime>
using namespace std;
#define N 15
void setCursor(int x,int y);class FIR
{
private:int tot;int a[N][N];	//状态矩阵int attacklevel[N][N];	//攻击优先级int defenselevel[N][N];	//防御优先级int max;	//攻击优先级+防御优先级的最大值int maxattack;	//最大攻击优先级int maxdefense;	//最大防御优先级int have41,have42,have32;	//人方是否有下一子成五子;电脑方是否有下一子成五子;电脑方是否有下一子成四子;int r,c,su,sd;	//横竖斜捺连续的子数int power4(int );	//4的N次方(计算优先级)int spacerow(int ,int ,int );	//横向优先级int spacecolumn(int ,int ,int );	//竖向优先级int spaceslopeup(int ,int ,int ); 	//斜向优先级int spaceslopedown(int ,int ,int );	//捺向优先级public:int steps;	//定位光标的”步数“int x,y;	//走子的坐标FIR(){memset(a,0,sizeof(a));memset(attacklevel,0,sizeof(attacklevel));memset(defenselevel,0,sizeof(defenselevel));steps=0;tot=-1;maxattack=0;maxdefense=0;x=0;y=0;have41=0;have42=0;have32=0;r=0;c=0;su=0;sd=0;max=0;}void setmap();	//打印棋桌int play(int ,int ,int );	//下子int check(int ,int ,int );	//检查void analysis(int );	//分析,优先级,最大功防……void compute(int );	//计算走子void print();	//打印状态矩阵};int main()
{FIR fir;int x,y;int flag=0,flag2=0;fir.setmap();while(true){do{setCursor(40,fir.steps);cout<<"player1 :please input x AND y:";cin>>x>>y;flag=fir.play(x-1,y-1,1);if(flag){if(fir.check(x-1,y-1,1)){	flag2=1;setCursor(32,fir.steps);cout<<"congratuations you win !"<<endl;break;}}}while(flag==0);if(flag2)	break;setCursor(40,fir.steps);cout<<"computer :";fir.analysis(2);fir.compute(2);fir.play(fir.x,fir.y,2);if(fir.check(fir.x,fir.y,2)){flag2=1;setCursor(32,fir.steps);cout<<"you lost please practice."<<endl;break;}/*do{setCursor(0,20+fir.steps);cout<<"player2 :please input x AND y:";cin>>x>>y;flag=fir.play(x,y,2);if(flag){if(fir.check(x-1,y-1)){	flag2=1;setCursor(0,21+fir.steps);cout<<"congratuations. you win !"<<endl;break;}}}while(flag==0);*/if(flag2)	break;}
setCursor(40,1+fir.steps);
fir.print();return 0;
}void setCursor(int x,int y)	//定位光标
{HANDLE handle;handle=GetStdHandle(STD_OUTPUT_HANDLE);COORD location;location.X=x;location.Y=y;SetConsoleCursorPosition(handle,location);
}//┏  ┓  ┗  ┛ ┣  ┫  ┳  ┻  ╋  ⊙  ●
void FIR::setmap()		//画出“棋盘”
{cout<<endl<<"  FIVE IN A ROW ";int i,j;setCursor(2,5);cout<<"┏";for(i=1;i<=N-2;i++)cout<<"┳";cout<<"┓";for(i=1;i<=N-2;i++){setCursor(2,i+5);cout<<"┣";for(j=0;j<N-2;j++)cout<<"╋";cout<<"┫"<<endl;}cout<<"  ┗";for(i=0;i<N-2;i++)cout<<"┻";cout<<"┛";for(i=1;i<=N;i++){setCursor(0,i+4);cout<<i;setCursor(i*2,3);if(i>=10)	cout<<i/10;else cout<<i;setCursor(i*2,4);if(i>=10)	cout<<i%10;}
}int FIR::play(int x,int y,int k)	//落子
{if(x<0 || y<0 || x>=N || y>=N || a[x][y]!=0){setCursor(35,1+steps);cout<<"your input is error, please input int again."<<endl;steps=steps+2;return 0;}else{setCursor(2*(y+1),x+5);if(k==1){a[x][y]=1;cout<<"⊙";}else if(k==2){a[x][y]=2;cout<<"●";}else cout<<"k is error."<<endl;steps++;return 1;}
}int FIR::check(int x,int y,int k)		//检查是否有五子
{spacerow(x,y,k);spacecolumn(x,y,k);spaceslopeup(x,y,k);spaceslopedown(x,y,k);if(r>4||c>4||su>4||sd>4)return 1;else return 0;
}int FIR::power4(int n)
{int sum=4;if(n==0)sum=1;elsefor(int i=1;i<n;i++)sum*=4;return sum;
}int FIR::spacerow(int x,int y,int k)	//行的优先级
{tot=1;int _x=x,_y=y-1,_y2;while(_y>=0 && a[_x][_y]==k ){tot++;_y--;}_y2=_y;_x=x;_y=y+1;while(_y<N && a[_x][_y]==k){tot++;_y++;}r=tot;if(_y2>=0 && _y<N){if(a[_x][_y2]==2/k && a[_x][_y]==2/k)tot=0;else if(a[_x][_y2]==0 && a[_x][_y]==0)tot=power4(tot);else tot=power4(tot-1);}else tot=power4(tot-1);return tot;	
}int FIR::spacecolumn(int x,int y,int k)		//列的优先级
{tot=1;int _x=x-1,_y=y,_x2;while(_x>=0 && a[_x][_y]==k ){tot++;_x--;}_x2=_x;_x=x+1;_y=y;while(_x<N && a[_x][_y]==k){tot++;_x++;}c=tot;if(_x2>=0 && _x<N){if(a[_x2][_y]==2/k && a[_x][_y]==2/k)tot=0;else if(a[_x2][_y]==0 && a[_x][_y]==0)tot=power4(tot);else tot=power4(tot-1);}else tot=power4(tot-1);return tot;	
}int FIR::spaceslopeup(int x,int y,int k)	//斜上的优先级
{tot=1;int _x=x+1,_y=y-1,_x2,_y2;while(_x<N && _y>=0 && a[_x][_y]==k ){tot++;_x++;_y--;}_x2=_x;_y2=y;_x=x-1;_y=y+1;while(_x>=0 && _y<N && a[_x][_y]==k){tot++;_x--;_y++;}su=tot;if(_x2<N && _y2>=0 && _x>=0 &&_y<N){if(a[_x2][_y2]==2/k && a[_x][_y]==2/k)tot=0;else if(a[_x2][_y2]==0 && a[_x][_y]==0)		tot=power4(tot);else tot=power4(tot-1);}else tot=power4(tot-1);return tot;	
}int FIR::spaceslopedown(int x,int y,int k)	//斜下的优先级
{tot=1;int _x=x-1,_y=y-1,_x2,_y2;while(_x<N && _y>=0 && a[_x][_y]==k ){tot++;_x--;_y--;}_x2=_x;_y2=y;_x=x+1;_y=y+1;while(_x>=0 && _y<N && a[_x][_y]==k){tot++;_x++;_y++;}sd=tot;if(_x2>=0 && _y2>=0 && _x<N &&_y<N){if(a[_x2][_y2]==2/k && a[_x][_y]==2/k)tot=0;else if(a[_x2][_y2]==0 && a[_x][_y]==0)tot=power4(tot);else tot=power4(tot-1);}else tot=power4(tot-1);return tot;	
}void FIR::analysis(int k)		//分析每个空格的优先级(横,竖,正斜,反斜 优先级之和),并计算最高的优先级
{maxattack=0;maxdefense=0;int att[4],def[4];for(int i=0;i<N;i++){	for(int j=0;j<N ;j++){if(a[i][j]==0){attacklevel[i][j]=spacerow(i,j,k)+spacecolumn(i,j,k)+spaceslopeup(i,j,k)+spaceslopedown(i,j,k);att[0]=r;att[1]=c;att[2]=su;att[3]=sd;if(att[0]==5 || att[1]==5 || att[2]==5 || att[3]==5)	have42=1;if(att[0]==4 || att[1]==4 || att[2]==4 || att[3]==4)	have32=1;if(maxattack<attacklevel[i][j])		maxattack=attacklevel[i][j];defenselevel[i][j]=spacerow(i,j,2/k)+spacecolumn(i,j,2/k)+spaceslopeup(i,j,2/k)+spaceslopedown(i,j,2/k);def[0]=r;def[1]=c;def[2]=su;def[3]=sd;if(maxdefense<defenselevel[i][j])		maxdefense=defenselevel[i][j];	if(def[0]==5 || def[1]==5 || def[2]==5 || def[3]==5)	have41=1;}}cout<<endl;}		
}void FIR::compute(int k)		//计算……,有多个优先级最高且相同的随机取一个
{int i,j,block=256;srand((int)time(NULL));setCursor(50,steps);if(maxdefense>=block){if(have42==1){for(i=0;i<N;i++)for(j=0;j<N;j++)if(attacklevel[i][j]==maxattack){cout<<i+1<<" "<<j+1<<endl;x=i;y=j;memset(attacklevel,0,sizeof(attacklevel));memset(defenselevel,0,sizeof(defenselevel));return ;}}else if(have41==1){for(i=0;i<N;i++)for(j=0;j<N;j++)if(defenselevel[i][j]>=block)if(attacklevel[i][j]+defenselevel[i][j]>max)max=attacklevel[i][j]+defenselevel[i][j];for(i=0;i<N;i++)for(j=0;j<N;j++){	if(defenselevel[i][j]>=block)if(attacklevel[i][j]+defenselevel[i][j]==max){cout<<i+1<<" "<<j+1<<endl;x=i;y=j;max=0;memset(attacklevel,0,sizeof(attacklevel));memset(defenselevel,0,sizeof(defenselevel));return ;}}}/*else if(have31==1){for(i=0;i<N;i++)for(j=0;j<N;j++)//if(attacklevel[i][j]>=block)if(attacklevel[i][j]+defenselevel[i][j]>max)max=attacklevel[i][j]+defenselevel[i][j];for(i=0;i<N;i++)for(j=0;j<N;j++){	//if(attacklevel[i][j]>=block)if(attacklevel[i][j]+defenselevel[i][j]==max){cout<<i+1<<" "<<j+1<<endl;x=i;y=j;max=0;memset(attacklevel,0,sizeof(attacklevel));memset(defenselevel,0,sizeof(defenselevel));return ;}}}
*/else{for(i=0;i<N;i++)for(j=0;j<N;j++)if(defenselevel[i][j]>=block)if(attacklevel[i][j]+defenselevel[i][j]>max)max=attacklevel[i][j]+defenselevel[i][j];for(i=0;i<N;i++)for(j=0;j<N;j++){	if(defenselevel[i][j]>=block)if(attacklevel[i][j]+defenselevel[i][j]==max){cout<<i+1<<" "<<j+1<<endl;x=i;y=j;max=0;memset(attacklevel,0,sizeof(attacklevel));memset(defenselevel,0,sizeof(defenselevel));return ;}}}
}else if(maxattack>maxdefense){for(i=0;i<N;i++)for(j=0;j<N;j++)if(attacklevel[i][j]==maxattack)if(attacklevel[i][j]+defenselevel[i][j]>max)max=attacklevel[i][j]+defenselevel[i][j];for(i=0;i<N;i++)for(j=0;j<N;j++){	if(attacklevel[i][j]==maxattack)if(attacklevel[i][j]+defenselevel[i][j]==max){cout<<i+1<<" "<<j+1<<endl;x=i;y=j;max=0;memset(attacklevel,0,sizeof(attacklevel));memset(defenselevel,0,sizeof(defenselevel));return ;}}}else{for(i=0;i<N;i++)for(j=0;j<N;j++)if(defenselevel[i][j]==maxdefense)if(attacklevel[i][j]+defenselevel[i][j]>max)max=attacklevel[i][j]+defenselevel[i][j];for(i=0;i<N;i++)for(j=0;j<N;j++){	if(defenselevel[i][j]==maxdefense)if(attacklevel[i][j]+defenselevel[i][j]==max){cout<<i+1<<" "<<j+1<<endl;x=i;y=j;max=0;memset(attacklevel,0,sizeof(attacklevel));memset(defenselevel,0,sizeof(defenselevel));return ;}}}
}void FIR::print()	//打印最后的数字结果
{for(int i=0;i<N;i++){setCursor(40,1+steps+i);for(int j=0;j<N;j++)cout<<a[i][j]<<" ";cout<<endl;}
}/*int row(int ,int ,int );int column(int ,int ,int );int slopeup(int ,int ,int );int slopedown(int ,int ,int );int FIR::row(int x,int y,int k)	//判断行
{tot=1;int _x=x,_y=y-1;while(_y>=0 && a[_x][_y]==k){tot++;_y--;}_x=x,_y=y+1;while(_y<N && a[_x][_y]==k){tot++;_y++;}return tot;
}int FIR::column(int x,int y,int k)	//判断列
{tot=1;int _x=x-1,_y=y;while(_x>=0 && a[_x][_y]==k){tot++;_x--;}_x=x+1,_y=y;while(_x<N && a[_x][_y]==k){tot++;_x++;}return tot;
}int FIR::slopeup(int x,int y,int k)	//判断正斜
{tot=1;int _x=x-1,_y=y+1;while( _x>=0 && _y<N && a[_x][_y]==k){tot++;_x--;_y++;}_x=x+1,_y=y-1;while(_x<N && _y>=0  && a[_x][_y]==k){tot++;_x++;_y--;}return tot;
}int FIR::slopedown(int x,int y,int k)		//判断反斜
{tot=1;int _x=x-1,_y=y-1;while(_x>=0 && _y>=0 && a[_x][_y]==k){tot++;_x--;_y--;}_x=x+1,_y=y+1;while(_x<N  && _y<N && a[_x][_y]==k){tot++;_x++;_y++;}return tot;
}
*/

 

 

程序截图

这个在 win10 上面执行 貌似 渲染是存在问题的, 需要调整 

1c9d19f2273d41ad9f35c83b156e227c.png

 

 

正常执行

9580ed69246744348b4c0d08a18379f6.png

 

 

 

 

 

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

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

相关文章

elaticsearch windows安装

es下载地址 https://www.elastic.co/cn/downloads/elasticsearch https://www.elastic.co/cn/downloads/past-releases#elasticsearch 在这里插入图片描述 下载直接解压&#xff0c;解压后目录 双击bin目录下的elasticsearch.bat开启服务 注意&#xff1a;9300 端口为 Elas…

阶跃星辰:探索智能科技的星辰大海

引言 在当今快速发展的科技时代&#xff0c;人工智能已经成为推动社会进步的重要力量。阶跃星辰&#xff0c;正是在这一背景下诞生的。 阶跃星辰是一家专注于通用人工智能探索的公司&#xff0c;成立于2023年4月。该公司的创始团队由一群对人工智能充满热情和渴望的人组成&am…

半导体行业的隐形翅膀:国产RFID技术突破封锁,助力生产

半导体行业的隐形翅膀&#xff1a;国产RFID技术突破封锁&#xff0c;助力生产 RFID技术&#xff0c;简单来说&#xff0c;就是一种自动识别技术&#xff0c;通过无线电波实现对标签信息的读取和写入。而这些标签&#xff0c;就像给物品贴上的小标签&#xff0c;上面存储着它们…

《系统架构设计师教程(第2版)》第15章-面向服务架构设计理论与实践-05-SOA设计模式

文章目录 1. 服务注册表模式1.1 服务注册表1.2 SOA治理功能1.3 注册表中的配置文件 2. 企业服务总线&#xff08;ESB&#xff09;模式3. Synchro ESB3. 微服务模式3.1 概述3.2 微服务架构模式方案3.2.1 聚合器微服务1&#xff09;概述2&#xff09;几种特殊的聚合微服务 3.2.2 …

C++解方程组的库

解决多元多次方程组的问题&#xff0c;你可以考虑以下几个C库&#xff1a; Eigen: Eigen库是一个高性能的C模板库&#xff0c;用于线性代数运算。它提供了强大的矩阵运算功能&#xff0c;可以用来解多元一次方程组。对于多次方程组&#xff0c;你可能需要结合Eigen和一些数值优…

javascript(第三篇)原型、原型链、继承问题,使用 es5、es6实现继承,一网打尽所有面试题

没错这是一道【去哪儿】的面试题目&#xff0c;手写一个 es5 的继承&#xff0c;我又没有回答上来&#xff0c;很惭愧&#xff0c;我就只知道 es5 中可以使用原型链实现继承&#xff0c;但是代码一行也写不出来。 关于 js 的继承&#xff0c;是在面试中除了【 this 指针、命名提…

计算机网络-IS-IS路由计算

前面已经学习了建立IS-IS邻接关系和同步LSDB&#xff0c;然后基于此路由器会进行路由计算。 一、路由计算 因为IS-IS路由器有不同的级别&#xff0c;只维护自身级别的LSDB&#xff0c;因此就是Level-1只有区域内的路由信息&#xff0c;Level-2有Level-2的路由信息&#xff0c;L…

开源协议与商业许可:选择与遵循

文章目录 一、开源协议1.1 MIT许可证&#xff08;MIT License&#xff09;1.2 BSD许可证&#xff08;BSD License&#xff09;1.3 Apache许可证 2.0&#xff08;Apache License 2.0&#xff09;1.4 GNU宽松通用公共许可证&#xff08;GNU Lesser General Public License&#x…

C++笔试强训day7

目录 1.字符串中找出连续最长的数字串 2.岛屿数量 3.拼三角 1.字符串中找出连续最长的数字串 链接 我的思路很简洁&#xff0c;就是双指针遍历&#xff0c;然后不断更新左位置left和右位置right和长度len。 然后我写代码的时候代码思路没跟上原本思路&#xff0c;直接把所有…

局部多项式近似与 AMPM 算法

kappa3; %已在您的代码中定义% 定义窗口大小 windowSize (2*kappa1);% 初始化梯度估计值 [rows, cols] size(wrappedPhase); phi_y zeros(rows, cols); phi_x zeros(rows, cols);% 遍历每个窗口 for m 1kappa:rows-kappafor n 1kappa:cols-kappa% 提取局部窗口Z_mn wrap…

保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识

1.简介 有的小伙伴或者童鞋们可能会好奇地问&#xff0c;不是讲解和分享抓包工具了怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解&#xff0c;你就能越掌握Fiddler的使用方法&#xff0c;反过来你越使用Fiddler&#xff0c;就越能帮助你了解HTTP协议。 Fid…

hive启动beeline报错

问题一在zpark启动集群报错 出现上面的问题执行以下代码 chmod 777 /opt/apps/hadoop-3.2.1/logs 问题二启动beeline报错 执行 cd /opt/apps/hadoop-3.2.1 bin/hadoop dfsadmin -safemode leave 问题三执行查询语句报错 执行 set hive.exec.mode.local.autotrue;

【算法基础实验】图论-构建无向图

构建无向图 前提 JAVA实验环境 理论 无向图的数据结构为邻接表数组&#xff0c;每个数组中保存一个Bag抽象数据类型&#xff08;Bag类型需要专门讲解&#xff09; 实验数据 我们的实验数据是13个节点和13条边组成的无向图&#xff0c;由一个txt文件来保存&#xff0c;本…

【Java】全套云HIS源码包含EMR、LIS(多医院、卫生机构使用)

云HIS系统简介 SaaS模式Java版云HIS系统源码&#xff0c;在公立二甲医院应用三年&#xff0c;经过多年持续优化和打磨&#xff0c;系统运行稳定、功能齐全&#xff0c;界面布局合理、操作简便。 1、融合B/S版电子病历系统&#xff0c;支持电子病历四级&#xff0c;HIS与电子病…

【001_音频开发-基础篇-专业术语】

001_音频开发-基础篇-专业术语 文章目录 001_音频开发-基础篇-专业术语创作背景术语表常见音源HDMI相关声音系统立体声2.1 声音系统5.1 环绕声系统5.1.2 环绕声系统7.1 环绕声系统7.1.4 环绕声系统9.1.4 环绕声系统 音质等级定义QQ音乐网易云音乐 创作背景 学历代表过去、能力…

公钥密码学Public-Key Cryptography

公钥或非对称密码学的发展是整个密码学历史上最伟大的&#xff0c;也许是唯一真正的革命。The development of public-key, or asymmetric, cryptography is the greatest and perhaps the only true revolution in the entire history of cryptography. 公钥算法基于数学函数…

校车车载4G视频智能监控系统方案

一、项目背景 随着社会的快速发展&#xff0c;校车安全问题日益受到人们的关注。为了提高校车运营的安全性&#xff0c;保障学生的生命安全&#xff0c;我们提出了一套校车车载4G视频智能监控系统方案。该系统能够实时监控校车内部和外部环境&#xff0c;及时发现并处理潜在的…

大语言模型微调过程中的 RLHF 和 RLAIF 有什么区别?

目前想要深入挖掘大型语言模型&#xff08;LLM&#xff09;的全部潜力需要模型与我们人类的目标和偏好保持一致。从而出现了两种方法&#xff1a;来自人类反馈的人力强化学习&#xff08;RLHF&#xff09;和来自人工智能反馈的人工智能驱动的强化学习&#xff08;RLAIF&#xf…

25计算机考研院校数据分析 | 南京大学

南京大学&#xff08;Nanjing University&#xff09;&#xff0c;简称“南大”&#xff0c;是中华人民共和国教育部直属、中央直管副部级建制的全国重点大学&#xff0c;国家首批“双一流”、“211工程”、“985工程”重点建设高校&#xff0c;入选首批“珠峰计划”、“111计划…

【声网】实现web端与uniapp微信小程序端音视频互动

实现web端与uniapp微信小程序端音视频互动 利用声网实现音视频互动 开通声网服务 注册声网账号 进入Console 成功登录控制台后&#xff0c;按照以下步骤创建一个声网项目&#xff1a; 展开控制台左上角下拉框&#xff0c;点击创建项目按钮。 在弹出的对话框内&#xff0c;依…