五子棋专享版
2026-08-27 13:41:31
发布于:广东
#include<bits/stdc++.h>
using namespace std;
int x,y,lx,ly,i,n,m;
bool boo=0;
int a[100][100];
string name[3];
struct hq{
int x,y;
}hq[10000];
string cf[3];
//判断是否越界
bool check(int x,int y){
return x>0&&y>0&&x<=n&&y<=m;
}
//如果一个人赢了,输出一行赢了
void coutwin(int turn){
cout<<name[turn]<<"赢了\n";
return;
}
//如果不合法,输出不合法,跳过
void illegal(){
for(int i=1;i<=100;i++){
cout<<"不合法,跳过 不合法,跳过 不合法,跳过 不合法,跳过 ";
}
cout<<"\n\n\n\n\n";
return;
}
//判断横着的有没有连成五个
bool hj(int x,int y){
int b[10];
for(int i=-4;i<5;i++){
if(y+i>0&&y+i<=m&&a[x][y+i]==a[x][y])b[i+4]=1;
else b[i+4]=0;
}
for(int i=0;i<5;i++){
if(b[i]==1&&b[i]==b[i+1]&&b[i]==b[i+2]&&b[i]==b[i+3]&&b[i]==b[i+4])return 1;
}
return 0;
}
//判断竖着的有没有连成五个
bool sj(int x,int y){
int b[10];
for(int i=-4;i<5;i++){
if(x+i>0&&x+i<=n&&a[x+i][y]==a[x][y])b[i+4]=1;
else b[i+4]=0;
}
for(int i=0;i<5;i++){
if(b[i]==1&&b[i]==b[i+1]&&b[i]==b[i+2]&&b[i]==b[i+3]&&b[i]==b[i+4])return 1;
}
return 0;
}
//判断从左上到右下斜着的有没有连成五个
bool xj1(int x,int y){
int b[10];
for(int i=-4;i<5;i++){
if(x+i>0&&x+i<=n&&y+i<=0&&y+i>30&&a[x+i][y+i]==a[x][y])b[i+4]=1;
else b[i+4]=0;
}
for(int i=0;i<5;i++){
if(b[i]==1&&b[i]==b[i+1]&&b[i]==b[i+2]&&b[i]==b[i+3]&&b[i]==b[i+4])return 1;
}
return 0;
}
//判断从左上下到右上斜着的有没有连成五个
bool xj2(int x,int y){
int b[10];
for(int i=-4;i<5;i++){
if(x+i>0&&x+i<=n&&y-i>0&&y-i<=m&&a[x+i][y-i]==a[x][y])b[i+4]=1;
else b[i+4]=0;
}
for(int i=0;i<5;i++){
if(b[i]==1&&b[i]==b[i+1]&&b[i]==b[i+2]&&b[i]==b[i+3]&&b[i]==b[i+4])return 1;
}
return 0;
}
void couta() {
for(int i=1;i<=m;i++){
if(i==1)cout<<" ";
cout<<" ";
printf("%02d",i);
cout<<" ";
}
cout<<"\n";
for(int i=1;i<=n*2+1;i++){
cout<<" ";
for(int j=1;j<=m;j++){
if(j==1){
if(i%2==0){
printf("%.2d",i/2);
cout<<"| ";
}else{
cout<<" +";
}
}
if(i%2==0){
if(a[i/2][j]){
if(a[i/2][j]==1){
cout<<"■";
}else cout<<"□";
}else cout<<" ";
cout<<" | ";
}else cout<<"----+";
}
cout<<"\n";
}
return;
}
void coutcf(int turn){
int a=0;
while(a<120){
cout<<turn<<":"<<cf[turn]<<" ";
a+=cf[turn].size()+1;
}
cout<<"\n";
return;
}
void mian(int turn){
couta();
cout<<"轮到"<<name[turn]<<"了\n";
cin>>x>>y;
if(x==99&&y==99){
i++;
if(i==0){
cout<<"你下棋了吗你就悔 你下棋了吗你就悔 你下棋了吗你就悔 你下棋了吗你就悔 ";
cout<<"你下棋了吗你就悔\n";
return;
}
a[hq[i].x][hq[i].y]=0;
cout<<hq[i].x<<" "<<hq[i].y<<" ";
i++;
cout<<"悔棋成功 悔棋成功 悔棋成功 悔棋成功 悔棋成功 悔棋成功 悔棋成功 悔棋成功 ";
cout<<"悔棋成功\n";
return;
}
lx=x;
ly=y;
if(x==100&&y==100){
cout<<"确认要认输吗?\n如果要,输入1,不然输入0\n";
bool boo;
cin>>boo;
if(boo){
for(int i=1;i<=3;i++)coutwin(turn);
for(int i=1;i<=8;i++)coutcf(turn);
exit(0);
}else{
i++;
if(turn==1)turn=2;
else turn=1;
return;
}
}
if(check(x,y)&&a[x][y]==0){
a[x][y]=turn;
hq[i].x=x;
hq[i].y=y;
if(hj(x,y)||sj(x,y)||xj1(x,y)||xj2(x,y)){
couta();
for(int i=1;i<=3;i++)coutwin(turn);
for(int i=1;i<=8;i++)coutcf(turn);
exit(0);
}
}else illegal(),i++;
}
int main() {
bool boo=0;
while(!boo){
system("cls");
cout<<"输入棋盘大小,输入两个数字,表示长和宽\n";
cin>>m>>n;
i=m*n;
cout<<"确认是这么大吗?\n";
couta();
cout<<"是输入1,不是输入0\n";
cin>>boo;
}
boo=0;
while(!boo){
system("cls");
cout<<"输入一号的名字,他在棋盘上显示为■\n";
cin>>name[1];
cout<<name[1]<<"\n确认一号的名字是这个吗?\n是输入1,不是输入0\n";
cin>>boo;
}
boo=0;
while(!boo){
cout<<"输入二号的名字,他在棋盘上显示为□\n";
cin>>name[2];
cout<<name[2]<<"\n确认二号的名字是这个吗?\n是输入1,不是输入0\n";
cin>>boo;
}
system("cls");
boo=0;
while(!boo){
cout<<"请输入你的嘲讽语句,要用默认的话不要在后面打空格!\n";
cout<<"1:菜就多练\n2:给我擦皮鞋\n3:都是同龄人我原本没想降维打击\n";
cout<<"也可以自己输入,输入不要空格!!!!!";
cin>>cf[1]>>cf[2];
if(cf[1]=="1"){
cf[1]="菜就多练";
}else if(cf[1]=="2"){
cf[1]="给我擦皮鞋";
}else if(cf[1]=="3"){
cf[1]="都是同龄人我原本没想降维打击";
}
if(cf[2]=="1"){
cf[2]="菜就多练";
}else if(cf[2]=="2"){
cf[2]="给我擦皮鞋";
}else if(cf[2]=="3"){
cf[2]="都是同龄人我原本没想降维打击";
}
cout<<"1号是("<<cf[1]<<")\n2号是("<<cf[2]<<")\n确认吗?\n";
cout<<"如果是,输入1,如果不是,输入0\n";
cin>>boo;
}
system("cls");
cout<<"输入 99 99 是悔棋,输入 100 100 是认输\n";
system("pause");
cout<<"\n";
int turn=1;
while(i--){
mian(turn);
if(turn==1)turn=2;
else turn=1;
}
couta();
cout<<"\n平局\n1:棋逢对手2:承让承让";
}
全部评论 6
改了,可以随意调整大小
2天前 来自 广东
1《你下棋了吗你就悔》
2天前 来自 浙江
1有什么问题吗?
2天前 来自 广东
0
输出超限,您的程序超出输出限制,请检查是否循环有误
2天前 来自 上海
1要放在c++上才行
2天前 来自 广东
1
顺便刷点罐头
3天前 来自 广东
1好像没法判断输赢
2天前 来自 江西
0在中途不知道那个版本优化的时候吧胜负条件改反了,sorry sorry,改了
昨天 来自 广东
0
“酱味大鸡”
2天前 来自 四川
0这个是官方的,你也可以自己改
2天前 来自 广东
0






























有帮助,赞一个