while(x<1||x>20||y<1||y>20) {
cout<<\出界,请重新输入:\ cin>>x>>y; cout< board[y-1][x-1]='o'; num_xy++; } bool MyGobang::isFirstWin()//判断第一人是否赢 { int num1=1,num2=1,num3=1,num4=1; int i,j; //这里是判断X坐标向右的'0'连续数 for(i=x;i<=x+3&&i<20;i++) { if(board[y-1][i]=='o') num1++; else break; } //这里是判断X坐标向左的'0'连续数 for(i=x-2;0<=i&&i>=x-5;i--) { if(board[y-1][i]=='o') num1++; else break; } //这里是判断Y坐标向下的'0'连续数 for(j=y;j<20&&j<=y+3;j++) { if(board[j][x-1]=='o') num2++; else break; } //这里是判断Y坐标向上的'0'连续数 for(j=y-2;j>=0&&j>=y-5;j--) { if(board[j][x-1]=='o') num2++; else break; } //这里是判断右斜上'0'连续数 for(i=x,j=y;i<20&&j<20&&i<=x+3&&j<=y+3;i++,j++) { if(board[j][i]=='o') num3++; else break; } //这里是判断左斜下'0'连续数 for(i=x-2,j=y-2;i>=0&&j>=0&&i>=i-5&&j>=5;i--,j--) { if(board[j][i]=='o') num3++; else break; } //这里是判断左斜上'0'连续数 for(i=x-2,j=y;i>=0&&j<20&&i>=x-5&&j<=y+3;i--,j++) { if(board[j][i]=='o') num4++; else break; } //这里是判断右斜下'0'连续数 for(i=x,j=y-2;i<20&&j>=0&&i<=x+3&&j>=y-5;i++,j--) { if(board[j][i]=='o') num4++; else break; } if(num1==5||num2==5||num3==5||num4==5) return 1; // 这里总结 X,Y ,左斜,右斜 的'0'连续数,有等于五的就直接返回 1 否则返回0 else return 0; } void MyGobang::getPointMN()//第二人落子函数 { cout<<\请输入第\步黑旗X,Y的坐标(x,y在1和20之间):\ cin>>m>>n; cout< while(m<1||m>20||n<1||n>20) { cout<<\出界,请重新输入:\ cin>>m>>n; cout< while(board[n-1][m-1]!='.') { cout<<\该位置已被占,重新输入:\ cin>>m>>n; cout< while(m<1||m>20||n<1||n>20) { cout<<\出界,请重新输入:\ cin>>m>>n; cout< board[n-1][m-1]='x'; num_mn++; } bool MyGobang::isSecondWin()//第二人是否赢 { int num1=1,num2=1,num3=1,num4=1; int i,j; for(i=m;i<=m+3&&i<20;i++) { if(board[n-1][i]=='x') num1++; else break; } for(i=m-2;0<=i&&i>=m-5;i--) { if(board[n-1][i]=='x') num1++; else break; } for(j=n;j<20&&j<=n+3;j++) { if(board[j][m-1]=='x') num2++; else break; } for(j=n-2;j>=0&&j>=n-5;j--) { if(board[j][m-1]=='x') num2++; else break; } for(i=m,j=n;i<20&&j<20&&i<=m+3&&j<=n+3;i++,j++) { if(board[j][i]=='x') num3++; else break; } for(i=m-2,j=n-2;i>=0&&j>=0&&i>=i-5&&j>=5;i--,j--) { if(board[j][i]=='x') num3++; else break; } for(i=m-2,j=n;i>=0&&j<20&&i>=m-5&&j<=n+3;i--,j++) { if(board[j][i]=='x') num4++; else break; } for(i=m,j=n-2;i<20&&j>=0&&i<=m+3&&j>=n-5;i++,j--) { if(board[j][i]=='x') num4++; else break; } if(num1==5||num2==5||num3==5||num4==5) return 1; else return 0; } int main() { cout<<\五子棋*****************\ MyGobang gobang; gobang.printBoard ();//申明MYGobang类的一个对象 for(int i=0;;i++) { gobang.getPointXY();//调用这个函数 gobang.printBoard ();//调用绘制棋盘 if(gobang.isFirstWin ()!=0)//调用第一人是否赢的函数 { cout<<\白棋胜利***************\ break; } gobang.getPointMN(); gobang.printBoard (); if(gobang.isSecondWin ()!=0) { cout<<\黑棋胜利***************\ break; } } system(\ }