ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-07-18 18:01:03  阅读:141  来源: 互联网

标签:游戏 五子棋 C++ game score && chessMap col row


规则原理

如图

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函数并做该项目的总结。

标签:游戏,五子棋,C++,game,score,&&,chessMap,col,row
来源: https://blog.csdn.net/qq_42759112/article/details/118880369

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有