五子棋专享版
2026-10-04 11:25:23
发布于:广东
复制用下面这个,粘贴到c++上直接用
#include<bits/stdc++.h>
using namespace std;int x,y,i,n,m,turn=1;bool boo=0;int a[100][100];string name[3],jl[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){int a=name[turn].size()+5,n1;for(int i=1;i<=5;i++){n1=n*5+2;while(n1-a>=0){n1-=a;cout<<name[turn]<<"赢了 ";}cout<<"\n";}return;}void illegal(){int a=15,n1;for(int i=1;i<=5;i++){n1=n*5+2;while(n1-a>=0){n1-=a;cout<<" | 不合法,重下";}cout<<" |\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){if(cf[turn]=="")return;int a=0;while(a<120){cout<<name[turn]<<":"<<cf[turn]<<" ";a+=name[turn].size()+cf[turn].size()+2;}cout<<"\n";return;}void mian(){couta();cout<<"轮到"<<name[turn]<<"了\n";cin>>x>>y;if(x==99&&y==99){i++;if(i==n*m){cout<<"你下棋了吗你就悔\n";return;}a[hq[i].x][hq[i].y]=0;cout<<hq[i].x<<" "<<hq[i].y<<" ";i++;cout<<"悔棋成功\n";return;}if(x==100&&y==100){cout<<"确认要认输吗?\n如果要,输入1,不然输入0\n";cin>>boo;if(boo){for(int i=1;i<=3;i++)coutwin(turn%2+1);for(int i=1;i<=8;i++)coutcf(turn%2+1);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;cout<<m<<" "<<n<<" 1 "<<name[1]<<" 1 "<<name[2]<<" 1 "<<jl[1]<<" "<<jl[2]<<" 1 ";for(int i=n*m-1;i>=::i;i--){cout<<hq[i].x<<" "<<hq[i].y<<" ";}cout<<"\n";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++,turn=turn%2+1;}int main(){cout<<"默认可以输入:20 20 1 1 1 2 1 0 0 1\n";while(!boo){cout<<"输入棋盘大小,输入两个数字,表示长和宽\n";cin>>m>>n;cout<<"确认是这么大吗?\n";couta();cout<<"是输入1,不是输入0\n";cin>>boo;}i=m*n;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<<"0:不启用\n1:菜就多练\n2:给我擦皮鞋\n3:都是同龄人我原本没想降维打击\n";cout<<"也可以自己输入,输入不要空格!!!!!";cin>>cf[1]>>cf[2];jl[1]=cf[1],jl[2]=cf[2];if(cf[1]=="0")cf[1]="";else if(cf[1]=="1")cf[1]="菜就多练";else if(cf[1]=="2")cf[1]="给我擦皮鞋";else if(cf[1]=="3")cf[1]="都是同龄人我原本没想降维打击";if(cf[2]=="0")cf[2]="";else 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如果是,输入1,如果不是,输入0\n";cin>>boo;}system("cls");cout<<"输入 99 99 是悔棋,输入 100 100 是认输\n";system("pause");system("cls");while(i--){mian();turn=turn%2+1;}couta();cout<<"\n平局\n1:棋逢对手2:承让承让";
}
以下是正常代码
#include<bits/stdc++.h>
using namespace std;
int x,y,i,n,m,turn=1;
bool boo=0;
int a[100][100];
string name[3],jl[3],cf[3];
struct hq{
int x,y;
}hq[10000];
//判断是否越界
bool check(int x,int y){
return x>0&&y>0&&x<=n&&y<=m;
}
//如果一个人赢了,输出一行赢了
void coutwin(int turn){
int a=name[turn].size()+5,n1;
for(int i=1;i<=5;i++){
n1=n*5+3;
while(n1-a>=0){
n1-=a;
cout<<name[turn]<<"赢了 ";
}
cout<<"\n";
}
return;
}
//如果不合法,输出不合法,跳过
void illegal(){
int a=15,n1;
for(int i=1;i<=5;i++){
n1=n*5+3;
while(n1-a>=0){
n1-=a;
cout<<" | 不合法,重下";
}
cout<<" |\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){
if(cf[turn]=="")return;
int a=0;
while(a<n*5+3){
cout<<name[turn]<<":"<<cf[turn]<<" ";
a+=name[turn].size()+cf[turn].size()+2;
}
cout<<"\n";
return;
}
void mian(){
couta();
cout<<"轮到"<<name[turn]<<"了\n";
cin>>x>>y;
//判断是否悔棋
if(x==99&&y==99){
i++;
if(i==n*m){
cout<<"你下棋了吗你就悔\n";
return;
}
cout<<hq[i].x<<" "<<hq[i].y<<" ";
i++;
cout<<"悔棋成功\n";
return;
}
//判断是否认输
if(x==100&&y==100){
cout<<"确认要认输吗?\n如果要,输入1,不然输入0\n";
cin>>boo;
if(boo){
for(int i=1;i<=3;i++)coutwin(turn%2+1);
for(int i=1;i<=8;i++)coutcf(turn%2+1);
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;
printf("%d %d 1 %s 1 %s 1 %s %s 1\n",n,m,name[1].c_str(),name[2].c_str(),jl[1].c_str(),jl[2].c_str());
for(int i=n*m-1;i>=::i;i--){
cout<<hq[i].x<<" "<<hq[i].y<<" ";
}
cout<<"\n";
//判断turn是否赢了
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++,turn=turn%2+1;
}
int main(){
cout<<"默认可以输入:20 20 1 1 1 2 1 0 0 1\n";
while(!boo){
cout<<"输入棋盘大小,输入两个数字,表示长和宽\n";
cin>>m>>n;
cout<<"确认是这么大吗?\n";
couta();
cout<<"是输入1,不是输入0\n";
cin>>boo;
}
i=m*n;
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<<"0:不启用\n1:菜就多练\n2:给我擦皮鞋\n3:都是同龄人我原本没想降维打击\n";
cout<<"也可以自己输入,输入不要空格!!!!!";
cin>>cf[1]>>cf[2];
jl[1]=cf[1],jl[2]=cf[2];
if(cf[1]=="0")cf[1]="";
else if(cf[1]=="1")cf[1]="菜就多练";
else if(cf[1]=="2")cf[1]="给我擦皮鞋";
else if(cf[1]=="3")cf[1]="都是同龄人我原本没想降维打击";
if(cf[2]=="0")cf[2]="";
else if(cf[2]=="1")cf[2]="菜就多练";
else if(cf[2]=="2")cf[2]="给我擦皮鞋";
else if(cf[2]=="3")cf[2]="都是同龄人我原本没想降维打击";
printf("1号是(%s)\n2号是(%s)\n",cf[1].c_str(),cf[2].c_str());
cout<<"确认吗?\n如果是,输入1,如果不是,输入0\n";
cin>>boo;
}
system("cls");
cout<<"输入 99 99 是悔棋,输入 100 100 是认输\n";
system("pause");
system("cls");
while(i--){
mian();
turn=turn%2+1;
}
couta();
cout<<"\n平局\n1:棋逢对手2:承让承让";
return 0;
}
全部评论 6
改了,可以随意调整大小
2026-08-26 来自 广东
1《你下棋了吗你就悔》
2026-08-26 来自 浙江
1有什么问题吗?
2026-08-26 来自 广东
0
输出超限,您的程序超出输出限制,请检查是否循环有误
2026-08-26 来自 上海
1要放在c++上才行
2026-08-26 来自 广东
1
顺便刷点罐头
2026-08-25 来自 广东
1好像没法判断输赢
2026-08-26 来自 江西
0在中途不知道那个版本优化的时候吧胜负条件改反了,sorry sorry,改了
2026-08-27 来自 广东
0
“酱味大鸡”
2026-08-26 来自 四川
0这个是官方的,你也可以自己改
2026-08-26 来自 广东
0

































有帮助,赞一个