zoukankan      html  css  js  c++  java
  • c++实现五子棋游戏

    设计思路


      先用二维数组定义一个棋盘,0代表没有玩家下过,1代表玩家一的棋子,2代表玩家二的棋子,将棋盘输出,然后让玩家依次输入所要下的位置的行数和列数,并赋值给数组,之后进行判断:判断棋盘上所有棋子是否有连续5个,如果是,则返回获胜玩家,如果否,则继续输入下一步要下的棋子坐标

    代码实现


      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 
      4 #define HEIGHT 15    //定义棋盘行数
      5 #define WIDTH 15    //定义棋盘列数
      6 #define PLAYER1 'X'    //定义玩家一棋子
      7 #define PLAYER2 'O'    //定义玩家二棋子
      8 
      9 int map[HEIGHT][WIDTH];    //定义游戏棋盘
     10 
     11 //输出棋盘
     12 void sc()
     13 {
     14     printf("    ");
     15     for (int i = 0;i < WIDTH;i++)
     16         if (i < 9)
     17             printf("0%d ", i+1);
     18         else
     19             printf("%d ",i+1);
     20     printf("
        ");
     21     for (int i = 0;i <=WIDTH;i++)
     22         printf("-  ");
     23     printf("
    ");
     24     for (int i = 0;i < HEIGHT;i++)
     25     {
     26         if (i < 9)
     27             printf("0%d ", i + 1);
     28         else
     29             printf("%d ", i + 1);
     30         printf("|");
     31         for (int j = 0;j < WIDTH;j++)
     32             if (map[i][j] == 0)
     33                 printf("+  ");
     34             else if (map[i][j] == 1)
     35                 printf("%c  ", PLAYER1);
     36             else
     37                 printf("%c  ",PLAYER2);
     38         printf("|
    ");
     39     }
     40         printf("    ");
     41     for (int i = 0;i <= WIDTH;i++)
     42         printf("-  ");
     43     printf("
    ");
     44 }
     45 //落子
     46 void play(int player)
     47 {
     48     int targetH = 0, targetW = 0;    //targetH:选定的格子行数    targetW:选定的格子列数
     49 
     50     if(player==1)
     51         printf("现在轮到玩家一,棋子:%c
    请输入格子的行数:", PLAYER1);
     52     else
     53         printf("现在轮到玩家二,棋子:%c
    请输入格子的行数:", PLAYER2);
     54     scanf_s("%d", &targetH);
     55     while (targetH <= 0 || targetH > HEIGHT)
     56     {
     57         printf("请输入正确的行数:");
     58         scanf_s("%d", &targetH);
     59     }
     60     printf("请输入格子的列数:");
     61     scanf_s("%d", &targetW);
     62     while (targetW <= 0 || targetW > WIDTH)
     63     {
     64         printf("请输入正确的行数:");
     65         scanf_s("%d",&targetW);
     66     }
     67     if(map[targetH - 1][targetW - 1] ==0)
     68         map[targetH-1][targetW-1]=player;
     69     else
     70     {
     71         printf("输入的坐标重复,请重新输入
    ");
     72         play(player);
     73     }
     74 }
     75 
     76 //判断游戏是否结束,并返回胜利玩家
     77 int pd(int player)
     78 {
     79     int k = 0;    //判断当前有多少连续的棋子
     80 
     81     for (int i = 0;i < HEIGHT;i++)
     82         for (int j = 0;j <= WIDTH;j++)
     83         {
     84             if (map[i][j] == player)    
     85             {
     86                 for (k = 1;k < 5;k++)    //判断是否一行连续5个棋子
     87                 {
     88                     if (map[i][j + k] != player)
     89                         break;
     90                 }
     91                 if (k == 5)    
     92                     return player;
     93                 for (k = 1;k < 5;k++)    //判断是否一列连续5个棋子
     94                 {
     95                     if (map[i + k][j] != player)
     96                         break;
     97                 }
     98                 if (k == 5)
     99                     return player;
    100                 for (k = 1;k < 5;k++)    //判断是否一斜线连续5个棋子
    101                 {
    102                     if (map[i + k][j + k] != player)
    103                         break;
    104                 }
    105                 if (k == 5)
    106                     return player;
    107             }
    108         }
    109     return 0;    //如果都没有连续5个棋子,游戏继续
    110 }
    111 //初始化棋盘
    112 void csh()
    113 {
    114     for (int i = 0;i < HEIGHT;i++)    //地图初始化
    115         for (int j = 0;j < WIDTH;j++)
    116             map[i][j] = 0;
    117 }
    118 
    119 
    120 void main()
    121 {
    122     int winPlayer=0,player=0,isAgain=0; //winPlayer:胜利的玩家    player:现在游戏中的玩家 isAgain:是否重开游戏
    123 
    124     csh();
    125     sc();
    126     while (winPlayer == 0)    
    127     {    
    128         play((player%2)+1);    //判断现在是哪一位玩家
    129         winPlayer=pd((player % 2) + 1);
    130         system("cls");    
    131         player++;
    132         sc();
    133     }
    134     winPlayer == 1 ? printf("恭喜玩家一获得胜利!!!
    ") : printf("恭喜玩家二获得胜利!!!
    ");
    135         printf("输入1重新开始,输入其他任意数字退出游戏");
    136         scanf_s("%d",&isAgain);
    137         if (isAgain == 1)
    138         {
    139             system("cls");
    140             main();
    141         }
    142             
    143 }

    效果截图


  • 相关阅读:
    java上传文件依赖的jar
    maven创建web项目很慢
    人才的成长与工作环境
    msdtc
    阿里巴巴的ChaosBlade
    集成电路
    晶体管
    PHPStorm如何快捷提交代码到服务器
    PHP 7新特性
    题(3)
  • 原文地址:https://www.cnblogs.com/hbsblog/p/13028531.html
Copyright © 2011-2022 走看看