原来笔记本放在大腿上,躺在床上一整天是那么的爽 废话少说 百余行代码如下(其实是参考别人的思路改的)
#include <iostream>
using namespace std;
class wuziqi
{
public:
void init(char flag[20][20]);//初始化棋盘
void draw(char flag[20][20]);//显示棋子
int isWin(char flag[20][20],char );//判断是否获胜
bool check(int ,int);//检查玩家输入坐标是否合法
};
void wuziqi :: init(char flag[20][20])
{
cout<<"提示:请输入0-19之间的两个整数:例如 1 1"<<endl<<endl;
for(int i=0;i<20;i++){
for(int j=0;j<20;j++){
flag[i][j] = '|';
cout<<'-';
cout<<flag[i][j];
}
cout<<endl;
}
}
void wuziqi :: draw(char flag[20][20])
{
for(int i=0;i<20;i++){
for(int j=0;j<20;j++){
cout<<'-'<<flag[i][j];
}
cout<<endl;
}
}
bool wuziqi::check(int x,int y)
{
if(x>-1 && x<21 && y>-1 && y<21)
return true;
else
return false;
}
int wuziqi::isWin(char flag[20][20],char f)
{
int mark = 0;
for(int i=0;i<15;i++){//判断横着,竖着,斜着三种成立情况
for(int j=0;j<15;j++){
if(f==flag[i][j] && f==flag[i][j+1] && f==flag[i][j+2] && f==flag[i][j+3] && f==flag[i][j+4]
||f==flag[i][j] && f==flag[i+1][j] && f==flag[i+2][j] && f==flag[i+3][j] && f==flag[i+4][j]
||f==flag[i][j] && f==flag[i+1][j+1] && f==flag[i+2][j+2] && f==flag[i+3][j+3]
&& f==flag[i+4][j+4] ||f==flag[i][j+4] && f==flag[i+1][j+3]
&& f==flag[i+2][j+2] && f==flag[i+3][j+1] && f==flag[i+4][j])
mark = 1;
break;
}
if(mark == 1)
break;
}
return mark;
}
void main()
{
char flag[20][20],replay;//设置棋盘大小 ,可以设置成变量 x,y
int i,x,y;
wuziqi wzq; //定义五子棋的对象
wzq.init(flag);//初始化数据
for(i=0;i<400;i++){ //棋盘上总共能乘放下 x*y 个棋子
if(i%2==0){
cout<<endl<<"请A走:"<<endl;
cin>>x;
cin>>y;
if(!wzq.check(x,y)){
cout<<"坐标不合法,请重新输入"<<endl;
cin>>x;
cin>>y;
}
if(flag[x][y]=='X'||flag[x][y]=='O' )//判断输入位置是否有棋子
{
cout<<endl;
cout<<"此地已经有棋子!请重新走:";
cin>>x;
cin>>y;
}
flag[x][y] = 'X';
wzq.draw(flag);
if(wzq.isWin(flag,'X')){//判断是否获胜(A)
cout<<"A获胜^_^! 是否重玩?(Y/N)";
cin>>replay;
if(replay == 'y' || replay == 'Y'){
main();
}
else break;
}
}
else{
cout<<endl<<"请B走:"<<endl;
cin>>x;
cin>>y;
if(flag[x][y]=='X'||flag[x][y]=='O')//判断输入位置是否有棋子
{
cout<<endl;
cout<<"此地已经有棋子!请重新走:";
cin>>x;
cin>>y;
}
if(!wzq.check(x,y)){
cout<<"坐标不合法,请重新输入"<<endl;
cin>>x;
cin>>y;
}
flag[x][y] = 'O';
wzq.draw(flag);
if(wzq.isWin(flag,'O')){//判断是否获胜(B)
cout<<"B获胜- -!是否重玩?(Y/N)";
cin>>replay;
if(replay == 'y' || replay == 'Y')
main();
else break;
}
}
if(i==399){
cout<<"平分秋色(*^__^*) 是否重玩?(Y/N)";
if(replay == 'Y'|| replay == 'y'){
main();
}
else break;
}
}
}
有点我想好久都没头绪 如果有人找麻烦 输入坐标(我定义的是int型的)的硬不是输入数字 而是字母或其他的话 就会出错 我怎么改check()函数呢