美文网首页
C++五子棋(六&七)——游戏结束

C++五子棋(六&七)——游戏结束

作者: 无聊的CairBin | 来源:发表于2021-07-15 21:44 被阅读0次

    规则原理

    如图

    1 2 3 4 5

    判断游戏结束

    • chessData.h
    //row,col   表示当前落子
    bool checkWin(ChessData* game, int row, int col);
    
    • 横、竖、斜(斜有两种)共四种情况,每种情况根据当前落子往后遍历5个子,有一种符合就胜利
    • chessData.cpp
    bool checkWin(ChessData* game, int row, int col){
      //横
      for(int i = 0; i < 5; i++){
        if(col - i >= 0 &&
          col - i + 4 < BOARD_GRAD_SIZE &&
          game->chessMap[row][col-i] == game->chessMap[row][col-i+1] &&
          game->chessMap[row][col-i] == game->chessMap[row][col-i+2] &&
          game->chessMap[row][col-i] == game->chessMap[row][col-i+3] &&
          game->chessMap[row][col-i] == game->chessMap[row][col-i+4]){return true;}
      }
      
      //竖
      for(int i = 0; i < 5; i++){
        if(row - i >= 0 &&
          row - i + 4 < BOARD_GRAD_SIZE &&
          game->chessMap[row-i][col] == game->chessMap[row-i+1][col] &&
          game->chessMap[row-i][col] == game->chessMap[row-i+2][col] &&
          game->chessMap[row-i][col] == game->chessMap[row-i+3][col] &&
          game->chessMap[row-i][col] == game->chessMap[row-i+4][col]){return true;}
      }
      
      // “/”方向
      for(int i = 0; i < 5; i++){
        if(row + i < BOARD_GRAD_SIZE &&
           row + i - 4 >= 0 &&
           col - i >= 0 &&
           col - i + 4 < BOARD_GRAD_SIZE &&
          game->chessMap[row+i][col-i] == game->chessMap[row+i-1][col-i+1] &&
          game->chessMap[row+i][col-i] == game->chessMap[row+i-2][col-i+2] &&
          game->chessMap[row+i][col-i] == game->chessMap[row+i-3][col-i+3] &&
          game->chessMap[row+i][col-i] == game->chessMap[row+i-4][col-i+4]){return true;}
      }
      
      // “\”方向
      for(int i = 0; i < 5; i++){
        if(row - i >= 0 &&
           row - i - 4 < BOARD_GRAD_SIZE &&
           col - i >= 0 &&
           col - i + 4 < BOARD_GRAD_SIZE &&
          game->chessMap[row-i][col-i] == game->chessMap[row-i+1][col-i+1] &&
          game->chessMap[row-i][col-i] == game->chessMap[row-i+2][col-i+2] &&
          game->chessMap[row-i][col-i] == game->chessMap[row-i+3][col-i+3] &&
          game->chessMap[row-i][col-i] == game->chessMap[row-i+4][col-i+4]){return true;}
      }
      
      return false;
      
    }
    

    调用接口

    • main.cpp
    #include <stdio.h>
    
    bool checkOver(){
      if(checkWin(&game, clickPosRow, clickPosCol)){
        Sleep(1500);
        if(game.playFlag = false){
          //黑棋胜利,此时标记已经转为白棋落子
          mciSendString("play res/不错.mp3", 0, 0, 0);
          loadimage(0, "res/胜利.jpg");
          score += 100; //更新分数
        }else{
          mciSendString("play res/失败.mp3", 0, 0, 0);
          loadimage(0, "res/失败.jpg");
          score -= 100; //同理
        }
        
        
        //用于显示分数
        char scoreText[64];
        sprintf(scoreText, "当前分数:%d", score);
        outtextxy(310, 800, scoreText);
        
        //记录分数
        FILE* fp = fopen("score.data", "wb");
        fwrite(&score, sizeof(score), 1, fp);
        fclose(fp);
        
        
        getch();
        return true;
        
      }
      
      return false;
      
    }
    

    显示分数

    • main.cpp
    #define INIT_SCORE 1000
    int score; //全局变量
    
    void initScore(){
      //分数字体设置
      settextcolor(WHITE); //color
      settextstyle(50, 0, "微软雅黑");  //style
      
      FILE *fp = fopen("score.data", "rb");
      if(fp == NULL){
        score = INIT_SCORE;
      }else{
        fread(&score, sizeof(score), 1, fp);
      }
      if (fp)fclose(fp);
      
    }
    
    • 然后在main.cpp文件的 init() 函数定义中 继续 添加代码
    initScore();    //这一行添加到init()函数定义中
    

    main函数

    • main.cpp 代码如下
    int main(void){
      init();
      
      while(1){
        //一直检测鼠标点击
        MOUSEMSG msg == GetMouseMsg();
        if(msg.uMsg == WM_LBUTTONDOWN){
          manGo();
          if(checkOver()){
            init();
            continue;
          }
          
          AI_GO();
          if(checkOver()){
            init();
            continue;
          }
          
        }
        
      }
      
      closegraph();
      return 0;
      
    }
    

    结束

    到了这里我们的项目就结束了,这篇文章是我个人博客的那两篇文章合并版本,少了项目总结和个人开发感受(我认为这方面不大重要),如果想要看这部分内容可以访问我的个人博客

    相关文章

      网友评论

          本文标题:C++五子棋(六&七)——游戏结束

          本文链接:https://www.haomeiwen.com/subject/qtwmpltx.html