#include<iostream>
using namespace std;
int osheng(char a[][10]);//判断o子是否获胜的函数
int xsheng(char a[][10]);//判断x子是否获胜的函数
int he(char a[][10]);//判断是否平局(也就是棋盘下满了)的函数
void qipan(char a[10][10])//执行输出棋盘命令
{
for(int i=0;i<10;i++){
for(int j=0;j<10;j++)
cout<<a[i][j];
cout<<endl;
}
}
int main()
{
char a[10][10];
int x,y;
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
a[i][j]=' ';
qipan(a);
while(1)//用循环语句执行o,x交替下子,这些while语句看起来似乎是个死循环~实际上都会经过break结束
{
int a1=1;
while(1){
for(;a1;){
cout<<"请输入o子下的位置:";
cin>>x>>y;
if(a[x][y]=='x')//判断是否已有子
{
cout<<"已有x子请重下"<<",";
//a[x][y]='x';
continue;
}
else if(a[x][y]=='o')//判断是否已有子
{
cout<<"已有o子请重下"<<",";
//a[x][y]='o';
continue;
}
else if(x>=10||y>=10){cout<<"输入错误请重输";continue;}
else { a[x][y]='o'; a1=0; }
}
break;
}
qipan(a);//下好o子后将棋盘显示
if(osheng(a))//判断o子是否已经获胜
{
cout<<"o子获胜"<<endl;
break;
}
a1=1;
while(1){
for(;a1;){
cout<<"请输入x子下的位置:";
cin>>x>>y;
if(a[x][y]=='x')//判断是否已有子
{
cout<<"已有子请重下"<<",";
//a[x][y]='x';
continue;
}
else if(a[x][y]=='o')//判断是否已有子
{
cout<<"已有子请重下";
//a[x][y]='o';
continue;
}
else if(x>=10||y>=10){cout<<"输入错误请重输";continue;}
else { a[x][y]='x'; a1=0; }
}
break;
}
/* while(1)//下x子
{
cout<<"请输入x子下的位置:";
cin>>x>>y;
if(a[x][y]=='o'||a[x][y]=='x'||x>=10||y>=10){
for( ; a[x][y]=='o'||a[x][y]=='x'; ){
cout<<"已有子请重下";
cout<<"请输入x子下的位置:";
cin>>x>>y;continue;
}
for ( ; x>=10||y>=10||x; ){
cout<<"输入错误请重输"<<",";
cout<<"请输入x子下的位置:";
cin>>x>>y;continue ;
}
a[x][y]='x';break;
}
else{
a[x][y]='x'; break;
}
} */
qipan(a);//再一次输出棋盘
if(xsheng(a))//判断x子是否已经获胜
{
cout<<"x子获胜"<<endl;
break;
}
if(he(a))//判断是否平局
{
cout<<"平局"<<endl;
break;
}
}
return 0;
}
int osheng(char a[][10])//别看起来这么多就吓到了,实际上想法很简单
{
int i,j;//判断横着的5个是否都相等
for(i=0;i<10;i++)
for(j=0;j<6;j++)
if(a[i][j]=='o'&&a[i][j+1]=='o'&&a[i][j+2]=='o'&&a[i][j+3]=='o'&&a[i][j+4]=='o')
return 1;
for(j=0;j<10;j++)//判断竖着的5个是否都相等
for(i=0;i<6;i++)
if(a[i][j]=='o'&&a[i+1][j]=='o'&&a[i+2][j]=='o'&&a[i+3][j]=='o'&&a[i+4][j]=='o')
return 1;
for(i=0;i<6;i++)//判断左斜5个
for(j=0;j<6;j++)
if(a[i][j]=='o'&&a[i+1][j+1]=='o'&&a[i+2][j+2]=='o'&&a[i+3][j+3]=='o'&&a[i+4][j+4]=='o')
return 1;
for(i=0;i<6;i++)//右斜5个
for(j=9;j>3;j--)
if(a[i][j]=='o'&&a[i+1][j-1]=='o'&&a[i+2][j-2]=='o'&&a[i+3][j-3]=='o'&&a[i+4][j-4]=='o')
return 1;
return 0;
}
int xsheng(char a[][10])//同o,只是改字符
{
int i,j;
for(i=0;i<10;i++)
for(j=0;j<6;j++)
if(a[i][j]=='x'&&a[i][j+1]=='x'&&a[i][j+2]=='x'&&a[i][j+3]=='x'&&a[i][j+4]=='x')
return 1;
for(j=0;j<10;j++)
for(i=0;i<6;i++)
if(a[i][j]=='x'&&a[i+1][j]=='x'&&a[i+2][j]=='x'&&a[i+3][j]=='x'&&a[i+4][j]=='x')
return 1;
for(i=0;i<6;i++)
for(j=0;j<6;j++)
if(a[i][j]=='x'&&a[i+1][j+1]=='x'&&a[i+2][j+2]=='x'&&a[i+3][j+3]=='x'&&a[i+4][j+4]=='x')
return 1;
for(i=0;i<6;i++)
for(j=9;j>3;j--)
if(a[i][j]=='x'&&a[i+1][j-1]=='x'&&a[i+2][j-2]=='x'&&a[i+3][j-3]=='x'&&a[i+4][j-4]=='x')
return 1;
return 0;
}
int he(char a[][10])
{
for(int i=0;i<10;i++)
for(int j=0;j<10;j++){
if(a[i][j]==' ')//当棋盘全部子都不是' '时才能return 1,即棋盘已下满
return 0;
}
return 1;
}
wuziqi.rar_五子棋 dos
版权申诉
50 浏览量
2022-09-24
16:00:35
上传
评论
收藏 1KB RAR 举报
APei
- 粉丝: 63
- 资源: 1万+
最新资源
- 基于opencv+yolov8实现目标追踪及驻留时长统计源码.zip
- 水稻病害基于Yolov8算法优化目标检测识别与AI辅助决策python源码+模型+使用说明.zip
- 海尔618算价表_七海5.20_16.00xlsx(1)(2).xlsx
- WebCrawler.scr
- 【计算机专业毕业设计】大学生就业信息管理系统设计源码.zip
- YOLO 数据集:8种路面缺陷病害检测【包含划分好的数据集、类别class文件、数据可视化脚本】
- JAVA实现Modbus RTU或Modbus TCPIP案例.zip
- 基于YOLOv8的FPS TPS AI自动锁定源码+使用步骤说明.zip
- JAVA实现Modbus RTU或Modbus TCPIP案例.zip
- 基于yolov8+streamlit的火灾检测部署源码+模型.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈