五子棋专享版
2026-08-20 15:34:16
发布于:广东
#include<bits/stdc++.h>
using namespace std;
int x,y,lx,ly,i=19*30;
bool boo=0;
int a[50][50];
string name[3];
struct hq{
int x,y;
}hq[600];
string cf[3];
//判断是否越界
bool check(int x,int y){
return x>0&&y>0&&x<=19&&y<=30;
}
//如果一个人赢了,输出一行赢了
void coutwin(int turn){
cout<<name[turn]<<"赢了\n";
return;
}
//如果不合法,输出不合法,跳过
void illegal(){
for(int i=1;i<=100;i++){
cout<<"不合法,跳过 不合法,跳过 不合法,跳过 不合法,跳过 ";
cout<<"不合法,跳过 不合法,跳过 不合法,跳过 不合法,跳过 ";
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>30&&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>19&&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>19&&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>19&&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;
}
void couta() {
for(int i=1;i<=30;i++){
if(i==1)cout<<" ";
cout<<" ";
printf("%02d",i);
cout<<" ";
}
cout<<"\n";
for(int i=1;i<=39;i++){
cout<<" ";
for(int j=1;j<=30;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;
}
bool amax(){
for(int i=1;i<=19;i++){
for(int j=1;j<=30;j++){
if(a[i][j]==0)return 0;
}
}
return 1;
}
void mian(int turn){
couta();
cout<<"轮到"<<name[turn]<<"了\n";
cin>>x>>y;
if(x==99&&y==99){
i++;
if(i==0){
cout<<"你下棋了吗你就悔 你下棋了吗你就悔 你下棋了吗你就悔 你下棋了吗你就悔 ";
cout<<"你下棋了吗你就悔 你下棋了吗你就悔 你下棋了吗你就悔 你下棋了吗你就悔 ";
cout<<"你下棋了吗你就悔\n";
return;
}
a[hq[i].x][hq[i].y]=0;
cout<<hq[i].x<<" "<<hq[i].y<<" ";
i++;
cout<<"悔棋成功 悔棋成功 悔棋成功 悔棋成功 悔棋成功 悔棋成功 悔棋成功 悔棋成功 ";
cout<<"悔棋成功 悔棋成功 悔棋成功 悔棋成功 悔棋成功 悔棋成功 悔棋成功 悔棋成功 ";
cout<<"悔棋成功\n";
return;
}
lx=x;
ly=y;
if(x==100&&y==100){
cout<<"确认要认输吗?\n如果要,输入1\n";
bool boo;
cin>>boo;
if(boo){
for(int i=1;i<=3;i++)coutwin(turn);
for(int i=1;i<=38;i++)coutcf(turn);
exit(0);
}else{
i++;
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<=38;i++)coutcf(turn);
exit(0);
}
}else illegal(),i++;
}
int main() {
bool boo=0;
while(!boo){
cout<<"输入一号的名字,他在棋盘上显示为■\n";
cin>>name[1];
cout<<name[1]<<" 确认一号的名字是这个吗?\n是输入1,不是输入0\n";
cin>>boo;
}
boo=0;
while(!boo){
cout<<"输入二号的名字,他在棋盘上显示为□\n";
cin>>name[2];
cout<<name[2]<<" 确认二号的名字是这个吗?\n是输入1,不是输入0\n";
cin>>boo;
}
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;
}
cout<<"输入 99 99 是悔棋,输入 100 100 是认输\n";
system("pause");
system("cls");
cout<<"\n";
int turn=1;
while(i--){
mian(turn);
if(turn==1)turn=2;
else turn=1;
}
cout<<"平局\n1:棋逢对手2:承让承让";
}
全部评论 1
顺便刷点罐头
1小时前 来自 广东
0















有帮助,赞一个