国庆小练笔 五子棋(c++)

国庆小练笔 五子棋(c++)

原来笔记本放在大腿上,躺在床上一整天是那么的爽 废话少说 百余行代码如下(其实是参考别人的思路改的)

#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()函数呢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值