一个五子棋代码

一个五子棋代码:

view plaincopy to clipboardprint?
#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];  
    //初始化数据   
    init(flag);  
      
    for(int x =0;x<400;  ){//棋盘上总共能乘放下 x*y 个棋子   
      int i,j;  
      if(x%4==0){  
        cout<<"请A方走:";  
        cin>>i;  
        cin>>j;  
        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;  
        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;  
}  
 
void init(char flag[][20]){  
    for(int i=0;i<20;i++){   
            for(int j=0;j<20;j++){  
            flag[i][j]='|';  
            cout<<"-";  
            cout<<flag[i][j];  
        }  
        cout<<endl;  
    }         
}  
 
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] ){  
        for(int i=0;i<20;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;  
}  

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lihan6415151528/archive/2009/06/27/4302353.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值