zoukankan      html  css  js  c++  java
  • 五子棋源码解析

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void init(char flag[][20]){
     5        for(int i=0;i<20;i++){ 
     6             for(int j=0;j<20;j++){
     7             flag[i][j]='|';
     8             cout<<"-";
     9             cout<<flag[i][j];
    10         }
    11         cout<<endl;
    12     }       
    13 }
    14 
    15 int main(){
    16     //设置棋盘大小 ,可以设置成变量 x,y 
    17     char flag[20][20];
    18     //初始化数据 
    19     init(flag);
    20     system("pause");
    21 }
      1 #include <iostream>
      2 using namespace std;
      3 void init(char flag[20][20]);//初始化棋盘 
      4 void draw(char flag[20][20]);//划出指定棋盘 
      5 int test(char flag[20][20],char);//判断是否棋局结束 
      6 
      7 int main(){
      8     //设置棋盘大小 ,可以设置成变量 x,y 
      9     char flag[20][20];
     10     //初始化数据 
     11     init(flag);
     12     
     13     for(int x =0;x<400;    ){//棋盘上总共能乘放下 x*y 个棋子 
     14       int i,j;
     15       if(x%4==0){
     16         cout<<"请A方走:";
     17         cin>>i;
     18         cin>>j;
     19         while(flag[i][j]=='X'||flag[i][j]=='O')//判断输入位置是否有棋子 
     20         {
     21             cout<<endl;
     22             cout<<"此地已经有棋子!请重新走:"; 
     23             cin>>i;
     24             cin>>j;
     25         }                                        
     26         flag[i][j]='X';//指定位置放上棋子 
     27         draw(flag);
     28      if(test(flag,'X'))//判断是否获胜(A) 
     29      {
     30           char replay;
     31           cout<<"A方胜利!是否再来一局?Y/N:";
     32           cin>>replay;
     33           if (replay=='Y'||replay=='y')
     34           {
     35             main();
     36           } else
     37           {
     38              break;
     39           }                                             
     40           
     41      }
     42         x+=2;
     43      }else{
     44         cout<<"请B方走:";
     45         cin>>i;
     46         cin>>j;
     47         while(flag[i][j]=='X'||flag[i][j]=='O')
     48         {
     49             cout<<endl;
     50             cout<<"此地已经有棋子!请重新走:"; 
     51             cin>>i;
     52             cin>>j;
     53         } 
     54         flag[i][j]='O';
     55         draw(flag);
     56      if(test(flag,'O'))//判断是否获胜(B) 
     57      {
     58           char replay;
     59           cout<<"B方胜利!是否再来一局?Y/N:";
     60           cin>>replay;
     61           if (replay=='Y'||replay=='y')
     62           {
     63             main();
     64           } else
     65           {
     66              break;
     67           }                                             
     68           
     69      }
     70         x+=2;
     71      }
     72     }
     73  return 0;
     74 }
     75 
     76 void init(char flag[][20]){
     77        for(int i=0;i<20;i++){ 
     78             for(int j=0;j<20;j++){
     79             flag[i][j]='|';
     80             cout<<"-";
     81             cout<<flag[i][j];
     82         }
     83         cout<<endl;
     84     }       
     85 }
     86 
     87 int test(char flag[][20],char f){
     88      int mark =0;
     89  for(int i=0;i<15;i++){
     90     for(int j=0;j<15;j++){
     91          if(//判断横着,数着,斜着三种成立情况 
     92            (f==flag[i][j]&&f==flag[i+1][j]&&f==flag[i+2][j]&&f==flag[i+3][j]&&f==flag[i+4][j])
     93          ||(f==flag[i][j]&&f==flag[i][j+1]&&f==flag[i][j+2]&&f==flag[i][j+3]&&f==flag[i][j+4])
     94          ||(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]))
     95             {
     96               cout<<endl;      
     97               mark =1;                                                                                                                              
     98             }
     99     }
    100  }
    101  return mark;
    102 }
    103 
    104 void draw(char flag[][20] ){
    105         for(int i=0;i<20;i++){
    106               for(int j=0;j<20;j++){
    107                 cout<<"-";
    108                 cout<<flag[i][j];
    109             }
    110             cout<<endl;
    111          }
    112 }
      1 //五子棋,很简明易懂的小程序,适合初学者学习
      2 #include <iostream>
      3 using namespace std;
      4 void init(char flag[20][20]);//初始化棋盘 
      5 void draw(char flag[20][20]);//划出指定棋盘 
      6 int test(char flag[20][20],char);//判断是否棋局结束 
      7 bool check(int,int);//检查玩家输入坐标是否合法 
      8 
      9 int main(){
     10     //设置棋盘大小 ,可以设置成变量 x,y 
     11     char flag[20][20];
     12     //初始化数据 
     13     init(flag);
     14     
     15     for(int x =0;x<400;    )//棋盘上总共能乘放下 x*y 个棋子,可是x加2,我认为此处为x<800; 
     16     {
     17       int i,j;
     18       if(x%4==0)//进行判断A,B方谁先走
     19       {
     20         cout<<"请A方走:";
     21         cin>>i;
     22         cin>>j;
     23         while(flag[i][j]=='X'||flag[i][j]=='O')//判断输入位置是否有棋子 
     24         {
     25             cout<<endl;
     26             cout<<"此地已经有棋子!请重新走:"; 
     27             cin>>i;
     28             cin>>j;
     29         }    
     30         if(check(i,j)==false)
     31         {
     32             cout<<endl;
     33             cout<<"输入坐标不合法!请重新输入:"; 
     34             cin>>i;
     35             cin>>j;                  
     36         }                                    
     37         flag[i][j]='X';//指定位置放上棋子 
     38         draw(flag);
     39      if(test(flag,'X'))//判断是否获胜(A) 
     40      {
     41           char replay;
     42           cout<<"A方胜利!是否再来一局?Y/N:";
     43           cin>>replay;
     44           if (replay=='Y'||replay=='y')
     45           {
     46             main();
     47           } else
     48           {
     49              break;
     50           }                                             
     51           
     52      }
     53         x+=2;
     54      }
     55       else
     56       {
     57         cout<<"请B方走:";
     58         cin>>i;
     59         cin>>j;
     60         while(flag[i][j]=='X'||flag[i][j]=='O')
     61         {
     62             cout<<endl;
     63             cout<<"此地已经有棋子!请重新走:"; 
     64             cin>>i;
     65             cin>>j;
     66         } 
     67         if(check(i,j)==false)
     68         {
     69             cout<<endl;
     70             cout<<"输入坐标不合法!请重新输入:"; 
     71             cin>>i;
     72             cin>>j;                  
     73         }
     74         flag[i][j]='O';
     75         draw(flag);
     76      if(test(flag,'O'))//判断是否获胜(B) 
     77      {
     78           char replay;
     79           cout<<"B方胜利!是否再来一局?Y/N:";
     80           cin>>replay;
     81           if (replay=='Y'||replay=='y')
     82           {
     83             main();
     84           } else
     85           {
     86              break;
     87           }                                             
     88           
     89      }
     90         x+=2;
     91      }
     92     }
     93  return 0;
     94 }
     95 
     96 void init(char flag[][20])//初始化整个棋盘
     97 {
     98        for(int i=0;i<20;i++)
     99     { 
    100             for(int j=0;j<20;j++)
    101             {
    102             flag[i][j]='|';
    103             cout<<"-";
    104             cout<<flag[i][j];
    105         }
    106         cout<<endl;
    107     }       
    108 }
    109 
    110 int test(char flag[][20],char f)//测试是否结束,加分
    111 {
    112      int mark =0;
    113  for(int i=0;i<15;i++)//15即可,因为是五子棋
    114  {
    115     for(int j=0;j<15;j++)
    116     {
    117          if(//判断横着,数着,斜着三种成立情况 
    118            (f==flag[i][j]&&f==flag[i+1][j]&&f==flag[i+2][j]&&f==flag[i+3][j]&&f==flag[i+4][j])
    119          ||(f==flag[i][j]&&f==flag[i][j+1]&&f==flag[i][j+2]&&f==flag[i][j+3]&&f==flag[i][j+4])
    120          ||(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]))
    121             {
    122               cout<<endl;      
    123               mark =1;                                                                                                                              
    124             }
    125     }
    126  }
    127  return mark;
    128 }
    129 
    130 void draw(char flag[][20] )
    131 {
    132         for(int i=0;i<20;i++)
    133         {
    134               for(int j=0;j<20;j++)
    135             {
    136                 cout<<"-";
    137                 cout<<flag[j][i];//此处原作者写的是cout<<flag[i][j];感觉不太符合我们对x轴与y轴的认识,故把他改了过来
    138             }
    139             cout<<endl;
    140          }
    141 }
    142 bool check(int x,int y)//检查是否越界
    143 {
    144           if(x>20 || y>20 || x<0 || y<0) 
    145                   return false;
    146           else
    147                   return true;
    148 } 
  • 相关阅读:
    事务
    排序算法
    二维数组中的查找
    在Linux中安装Matlab
    null和“”的区别
    【学习笔记】〖九度OJ〗题目1433:FatMouse
    【学习笔记】〖九度OJ〗题目1464:Hello World for U
    year:2017 month:8 day:1
    year:2017 month:07 day:31
    year:2017 month:7 day:27
  • 原文地址:https://www.cnblogs.com/Zblogs/p/3257908.html
Copyright © 2011-2022 走看看