#include <bits/stdc++.h>
#include <stdlib.h>
using namespace std;
const int b=20;
int f=true,cnt=0;
char m[b][b];
char o='O',e='X';
int bg(int temp){
int t=temp,cnt=0;
while(t){
t/=10;
cnt++;
}
if(temp==0) return 1;
else return cnt;
}
char sch(int xp,int yp){ //三三联、四三联、四四联基础判断点
int opt=0,ept=0,opf=0,epf=0;
for(int i=-1;i<=1;i++){
for(int j=-1;j<=1;j++){
if(i==0&&j==0) continue;
//活2
if(m[xp+i][yp+j]==m[xp+(i*2)][yp+(j*2)]&&m[xp+i][yp+j]==o&&m[xp+(i*3)][yp+(j*3)]!=e&&m[xp+(i*-1)][yp+(j*-1)]!=e) opt++;
if(m[xp+i][yp+j]==m[xp+(i*2)][yp+(j*2)]&&m[xp+i][yp+j]==e&&m[xp+(i*3)][yp+(j*3)]!=o&&m[xp+(i*-1)][yp+(j*-1)]!=o) ept++;
if(m[xp+i][yp+j]==m[xp+(i*3)][yp+(j*3)]&&m[xp+i][yp+j]==o&&m[xp+(i*4)][yp+(j*4)]!=e&&m[xp+(i*-1)][yp+(j*-1)]!=e&&m[xp+(i*2)][yp+(j*2)]!=e) opt++;
if(m[xp+i][yp+j]==m[xp+(i*3)][yp+(j*3)]&&m[xp+i][yp+j]==e&&m[xp+(i*4)][yp+(j*4)]!=o&&m[xp+(i*-1)][yp+(j*-1)]!=o&&m[xp+(i*2)][yp+(j*2)]!=o) ept++;
if(m[xp+(i*2)][yp+(j*2)]==m[xp+(i*3)][yp+(j*3)]&&m[xp+i][yp+j]==o&&m[xp+(i*4)][yp+(j*4)]!=e&&m[xp+(i*-1)][yp+(j*-1)]!=e&&m[xp+i][yp+j]!=e) opt++;
if(m[xp+(i*2)][yp+(j*2)]==m[xp+(i*3)][yp+(j*3)]&&m[xp+i][yp+j]==e&&m[xp+(i*4)][yp+(j*4)]!=o&&m[xp+(i*-1)][yp+(j*-1)]!=o&&m[xp+i][yp+j]!=o) ept++;
//活3
if(m[xp+i][yp+j]==m[xp+(i*2)][yp+(j*2)]&&m[xp+i][yp+j]==m[xp+(i*3)][yp+(j*3)]&&m[xp+i][yp+j]==o) opf++;
if(m[xp+i][yp+j]==m[xp+(i*2)][yp+(j*2)]&&m[xp+i][yp+j]==m[xp+(i*3)][yp+(j*3)]&&m[xp+i][yp+j]==e) epf++;
}
}
if(opt+opf>=2&&ept+epf>=2) return 'b';
if(opt+opf>=2) return 'o';
if(ept+epf>=2) return 'e';
return 'N';
}
void ow(){
cout << o << "方赢了!!!";
exit(0);
}void ew(){
cout << e << "方赢了!!!";
exit(0);
}void be(){
for(int i=0;i<b;i++){
cout << i+1;
for(int j=bg(i+1);j<bg(b);j++) cout << "-";
for(int j=0;j<b;j++) cout << m[i][j];
cout << endl;
}
for(int j=0;j<bg(b);j++) cout << " ";
for(int j=1;j<=b&&bg(b)>=2;j++){
if(j/10==0) cout << "|";
else cout << j/10;
}
cout << endl;
for(int j=0;j<bg(b)&&bg(b)>=2;j++) cout << " ";
for(int j=1;j<=b;j++){
cout << j%10;
}
}
int main(){
int x,y;
for(int i=0;i<b;i++) for(int j=0;j<b;j++) m[i][j]='+';
while(f){
system("cls");
cout << "一起来下五子棋吧\n黑白子用" << o << "和" << e << "来表示哦\n";
be();
cout << "\n现在是";
if(cnt%2==0) cout << o << "方";
if(cnt%2==1) cout << e << "方";
cout << "走的时间,打出你的落子位置吧,用空格分割哦(先打行再打列)\n输入:";
cin >> x >> y;
if(m[x-1][y-1]=='+'&&x<=b&&y<=b&&x>0&&y>0&&cnt%2==0) m[x-1][y-1]=o;
else if(m[x-1][y-1]=='+'&&x<=b&&y<=b&&x>0&&y>0&&cnt%2==1) m[x-1][y-1]=e;
else{cout << "不合格哦,重新下吧!\n";system("pause");continue;}
cnt++;
for(int i=0;i<b;i++){
for(int j=0;j<b;j++){
if(m[i][j]==o){
if(i>-1&&j>1&&i<b&&j<b-2&&m[i][j-2]==o&&m[i][j-1]==o&&m[i][j]==o&&m[i][j+1]==o&&m[i][j+2]==o) ow();//左右
if(i>1&&j>1&&i<b-2&&j<b-2&&m[i-2][j-2]==o&&m[i-1][j-1]==o&&m[i][j]==o&&m[i+1][j+1]==o&&m[i+2][j+2]==o) ow();//左上右下
if(i>1&&j>-1&&i<b-2&&j<b&&m[i-2][j]==o&&m[i-1][j]==o&&m[i][j]==o&&m[i+1][j]==o&&m[i+2][j]==o) ow();//上下
if(i>1&&j>1&&i<b-2&&j<b-2&&m[i+2][j-2]==o&&m[i+1][j-1]==o&&m[i][j]==o&&m[i-1][j+1]==o&&m[i-2][j+2]==o) ow();//左下右上
}if(m[i][j]==e){
if(i>-1&&j>1&&i<b&&j<b-2&&m[i][j-2]==e&&m[i][j-1]==e&&m[i][j]==e&&m[i][j+1]==e&&m[i][j+2]==e) ew();//左右
if(i>1&&j>1&&i<b-2&&j<b-2&&m[i-2][j-2]==e&&m[i-1][j-1]==e&&m[i][j]==e&&m[i+1][j+1]==e&&m[i+2][j+2]==e) ew();//左上右下
if(i>1&&j>-1&&i<b-2&&j<b&&m[i-2][j]==e&&m[i-1][j]==e&&m[i][j]==e&&m[i+1][j]==e&&m[i+2][j]==e) ew();//上下
if(i>1&&j>1&&i<b-2&&j<b-2&&m[i+2][j-2]==e&&m[i+1][j-1]==e&&m[i][j]==e&&m[i-1][j+1]==e&&m[i-2][j+2]==e) ew();//左下右上
}
}
}
}
}
闲的没氏肝了一个五子棋
第4行改b的值可以更改棋盘大小
const int b=20;
第7行更改o和e的值可以更改黑白子符号
char o='O',e='X';