首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

两种不同作派写成的五子棋——C++

2013-03-01 
两种不同风格写成的五子棋——C++#include iostream using namespace std void init(char flag[20][20])

两种不同风格写成的五子棋——C++

#include <iostream> using namespace std; void init(char flag[20][20]);//初始化棋盘 void draw(char flag[20][20]);//划出指定棋盘 int test(char flag[20][20],char);//判断是否棋局结束 bool check(int,int);//检查玩家输入坐标是否合法int main() { //设置棋盘大小 ,可以设置成变量 x,y char flag[20][20]; //初始化数据 char* lp = (char*)flag; for(int i=0; i <400; i++) *lp++ = '|';draw(flag);for(int x =0;x <400;    ) {//棋盘上总共能乘放下 x*y 个棋子 char i,j; if(x%4==0) { cout < <"请A方走:"; //cin>>i; //cin>>j; scanf("%c %c", &i, &j);getchar(); i-='a'; j-='a';while(flag[i][j]=='X'||flag[i][j]=='O')//判断输入位置是否有棋子 { cout < <endl; cout < <"此地已经有棋子!请重新走:"; cin>>i; cin>>j; }    if(check(i,j)==false) { cout < <endl; cout < <"输入坐标不合法!请重新输入:"; cin>>i; cin>>j;                  }                                    flag[i][j]='X';//指定位置放上棋子 draw(flag); if(test(flag,'X'))//判断是否获胜(A) { char replay; cout < <"A方胜利!是否再来一局?Y/N:"; cin>>replay; if (replay=='Y'||replay=='y') { main(); } else { break; }                                           } x+=2; }else{ cout < <"请B方走:"; //cin>>i; //cin>>j; scanf("%c %c", &i, &j);getchar(); i-='a'; j-='a'; while(flag[i][j]=='X'||flag[i][j]=='O') { cout < <endl; cout < <"此地已经有棋子!请重新走:"; cin>>i; cin>>j; } if(check(i,j)==false) { cout < <endl; cout < <"输入坐标不合法!请重新输入:"; cin>>i; cin>>j;                  } flag[i][j]='O'; draw(flag); if(test(flag,'O'))//判断是否获胜(B) { char replay; cout < <"B方胜利!是否再来一局?Y/N:"; cin>>replay; if (replay=='Y'||replay=='y') { main(); } else { break; }                                           } x+=2; } } return 0; }int test(char flag[][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+1][j]&&f==flag[i+2][j]&&f==flag[i+3][j]&&f==flag[i+4][j]) ||(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+1]&&f==flag[i+2][j+2]&&f==flag[i+3][j+3]&&f==flag[i+4][j+4])) { cout < <endl;      mark =1;                                                                                                                              } } } return mark; }void draw(char flag[][20] ){ printf("  "); for(int i=0; i <20; i++) printf("%c ", 'a'+i); printf("\n"); for(int i=0;i <20;i++){ printf("%c ", 'a'+i); for(int j=0;j <20;j++){ cout < <"-"; cout < <flag[i][j]; } cout < <endl; } } bool check(int x,int y){ if(x>20 || y>20 || x <0 || y <0) return false; else return true; }

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
#include"iostream"using namespace std;int main() {    char weizhi[20][20];//定义二维数组用于保存坐标    int c,d,x,y,flag=0;//flag作为标记符号    cout<<"欢迎使用简易的双人对战的五子棋游戏"<<endl<<endl;    //输出棋盘的形状    cout<<"五子棋棋盘如下图所示" <<endl;    cout<<"  ";    for(int a=1;a<=10;a++)        cout<<" "<<a<<"";    cout<<endl;    for(a=0;a<=9;a++)    {        if(a<9)            cout<<a+1<<"  ";        else            cout<<a+1<<" ";         for(int b=0;b <=9;b++)        {            weizhi[a][b]='-';            cout<<weizhi[a][b]<<" ";        }        cout<<endl;    }    while(flag==0)    {        if(flag==0)        {            cout<<"红方使用符号o,请红方输入您要落子的位置" <<endl;            cout<<"横坐标:";            cin>>x;            cout<<"纵坐标:";            cin>>y;            if(weizhi[x-1][y-1]=='o'||weizhi[x-1][y-1]=='*')            {                cout<<"对不起,您不可以在这里落子"<<endl;                continue;            }//判断是否已经有子了            weizhi[x-1][y-1]='o';            cout<<"  ";            for(a=1;a<=10;a++)                cout<<" "<<a<<"";            cout<<endl;            for(int a=0;a<=9;a++)            {                if(a <9)                    cout<<a+1<<"  ";                else                    cout<<a+1<<" ";                for(int b=0;b<=9;b++)                    cout<<weizhi[a][b]<<" ";                cout<<endl;            }        }        if(flag==1||flag==9)            break;        for(int e=0;e<=5;e++)        {            for(int f=0;f<=5;f++)            {                if((weizhi[e][f]=='o')+(weizhi[e][f+1]=='o')+(weizhi[e][f+2]=='o')+(weizhi[e][f+3]=='o')+(weizhi[e][f+4]=='o')==5)                    flag=1;                if((weizhi[f][e]=='o')+(weizhi[f+1][e]=='o')+(weizhi[f+2][e]=='o')+(weizhi[f+3][e]=='o')+(weizhi[f+4][e]=='o')==5)                    flag=1;                if((weizhi[e][f]=='o')+(weizhi[e+1][f+1]=='o')+(weizhi[e+2][f+2]=='o')+(weizhi[e+3][f+3]=='o')+(weizhi[e+4][f+4]=='o')==5)                    flag=1;                if((weizhi[e][f]=='o')+(weizhi[e-1][f-1]=='o')+(weizhi[e-2][f-2]=='o')+(weizhi[e-3][f-3]=='o')+(weizhi[e-4][f-4]=='o')==5)                    flag=1;                if(flag==1)                    break;                if((weizhi[e][f]=='*')+(weizhi[e][f+1]=='*')+(weizhi[e][f+2]=='*')+(weizhi[e][f+3]=='*')+(weizhi[e][f+4]=='*')==5)                    flag=9;                if((weizhi[f][e]=='*')+(weizhi[f+1][e]=='*')+(weizhi[f+2][e]=='*')+(weizhi[f+3][e]=='*')+(weizhi[f+4][e]=='*')==5)                    flag=9;                if((weizhi[e][f]=='*')+(weizhi[e+1][f+1]=='*')+(weizhi[e+2][f+2]=='*')+(weizhi[e+3][f+3]=='*')+(weizhi[e+4][f+4]=='*')==5)                    flag=9;                if((weizhi[e][f]=='*')+(weizhi[e-1][f-1]=='*')+(weizhi[e-2][f-2]=='*')+(weizhi[e-3][f-3]=='*')+(weizhi[e-4][f-4]=='*')==5)                    flag=9;                if(flag==9)                    break;            }        }        if(flag==0)        {        oop:cout<<"黑方使用符号*,请黑方输入您要落子的位置"<<endl;            cout<<"横坐标:";            cin>>c;            cout<<"纵坐标:";             cin>>d;            if(weizhi[c-1][d-1]=='o'||weizhi[c-1][d-1]=='*')            {                cout<<"对不起,您不可以在这里落子"<<endl;                goto oop;            }//判断是否已经有子了            weizhi[c-1][d-1]='*';            cout<<"  ";            for(a=1;a<=10;a++)                cout<<" "<<a<<"";            cout<<endl;            for(int a=0;a<=9;a++)            {                if(a<9)                    cout<<a+1<<"  ";                else                    cout<<a+1<<" ";                for(int b=0;b<=9;b++)                    cout<<weizhi[a][b]<<" ";                cout<<endl;            }        }        if(flag==9)            break;    }    if(flag==1)        cout<<"您输了,红方赢得了比赛"<<endl;    else        cout<<"您输了,黑方后走一步,黑方赢得了比赛"<<endl;     system("pause");     return 0;}check 函数调用也不对吧? if只能检查一次输入,如果多次输入错误呢,应该改为while吧 while(check(i,j)==false) { cout < <endl; cout < <"输入坐标不合法!请重新输入:"; cin>>i; cin>>j;                  }check函数错误,应改为 bool check(int x,int y){ if(x >= 20 || y >= 20 || x < 0 || y < 0) return false; else return true; }

热点排行