• 大小: 264KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: 其他
  • 标签: qt5  五子棋  

资源简介

亲测通过,这是一个单机人机、人人版本的五子棋源码程序。我的文章参考:https://blog.csdn.net/u013457167/article/details/83859312,

资源截图

代码片段和文件信息

#include 
#include 
#include
#include “GameModel.h“

GameModel::GameModel()
{

}

void GameModel::startGame(GameType type)
{
    gameType = type;
    // 初始棋盘
    gameMapVec.clear();
    for (int i = 0; i < kBoardSizeNum; i++)
    {
        std::vector lineBoard;
        for (int j = 0; j < kBoardSizeNum; j++)
            lineBoard.push_back(0);
        gameMapVec.push_back(lineBoard);
    }

    // 如果是AI模式,需要初始化评分数组
    if (gameType == BOT)
    {
        scoreMapVec.clear();
        for (int i = 0; i < kBoardSizeNum; i++)
        {
            std::vector lineScores;
            for (int j = 0; j < kBoardSizeNum; j++)
                lineScores.push_back(0);
            scoreMapVec.push_back(lineScores);
        }
    }

    // 己方下为true对方下位false
    playerFlag = true;


}

void GameModel::updateGameMap(int row int col)
{
    if (playerFlag)
        gameMapVec[row][col] = WHITECHESS;
    else
        gameMapVec[row][col] = BLACKCHESS;

    // 换手
    playerFlag = !playerFlag;
}

void GameModel::actionByPerson(int row int col)
{
    updateGameMap(row col);
}

void GameModel::actionByAI(int &clickRow int &clickCol)
{
    // 计算评分
    calculateScore();

    // 从评分中找出最大分数的位置
    int maxScore = 0;
    std::vector> maxPoints;

    for (int row = 1; row < kBoardSizeNum; row++)
        for (int col = 1; col < kBoardSizeNum; col++)
        {
            // 前提是这个坐标是空的
            if (gameMapVec[row][col] == 0)
            {
                if (scoreMapVec[row][col] > maxScore)          // 找最大的数和坐标
                {
                    maxPoints.clear();
                    maxScore = scoreMapVec[row][col];
                    maxPoints.push_back(std::make_pair(row col));
                }
                else if (scoreMapVec[row][col] == maxScore)     // 如果有多个最大的数,都存起来
                    maxPoints.push_back(std::make_pair(row col));
            }
        }

    // 随机落子,如果有多个点的话
    srand((unsigned)time(0));
    int index = rand() % maxPoints.size();

    std::pair pointPair = maxPoints.at(index);
    clickRow = pointPair.first; // 记录落子点
    clickCol = pointPair.second;
    updateGameMap(clickRow clickCol);
}

// 最关键的计算评分函数
void GameModel::calculateScore()
{
    // 统计玩家或者电脑连成的子
    int personNum = 0; // 玩家连成子的个数
    int botNum = 0; // AI连成子的个数
    int emptyNum = 0; // 各方向空白位的个数

    // 清空评分数组
    scoreMapVec.clear();
    for (int i = 0; i < kBoardSizeNum; i++)
    {
        std::vector lineScores;
        for (int j = 0; j < kBoardSizeNum; j++)
            lineScores.push_back(0);
        scoreMapVec.push_back(lineScores);
    }

    // 计分(此处是完全遍历,其实可以用bfs或者dfs加减枝降低复杂度,通过调整权重值,调整AI智能程度以及攻守风格)
    for (int row = 0; row < kBoardSizeNum; row++)
        for (int col = 0; col < kBoardSizeNum; col++)
        {
            // 空白点就算
            if (row > 0 && col > 0 &&
     

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-11-07 16:03  .git\
     目录           0  2016-12-24 09:44  .git\branches\
     文件           7  2016-12-25 17:38  .git\COMMIT_EDITMSG
     文件         331  2016-12-25 17:38  .git\config
     文件          73  2016-12-24 09:44  .git\description
     文件          99  2016-12-25 17:38  .git\FETCH_HEAD
     文件          23  2016-12-24 09:44  .git\HEAD
     目录           0  2018-11-07 16:03  .git\hooks\
     文件         452  2016-12-24 09:44  .git\hooks\applypatch-msg.sample
     文件         896  2016-12-24 09:44  .git\hooks\commit-msg.sample
     文件         189  2016-12-24 09:44  .git\hooks\post-update.sample
     文件         398  2016-12-24 09:44  .git\hooks\pre-applypatch.sample
     文件        1642  2016-12-24 09:44  .git\hooks\pre-commit.sample
     文件        1352  2016-12-24 09:44  .git\hooks\pre-push.sample
     文件        4951  2016-12-24 09:44  .git\hooks\pre-rebase.sample
     文件        1239  2016-12-24 09:44  .git\hooks\prepare-commit-msg.sample
     文件        3611  2016-12-24 09:44  .git\hooks\update.sample
     文件        1088  2016-12-25 17:38  .git\index
     目录           0  2018-11-07 16:03  .git\info\
     文件         240  2016-12-24 09:44  .git\info\exclude
     目录           0  2018-11-07 16:03  .git\logs\
     文件        1047  2016-12-25 17:38  .git\logs\HEAD
     目录           0  2018-11-07 16:03  .git\logs\refs\
     目录           0  2018-11-07 16:03  .git\logs\refs\heads\
     文件        1047  2016-12-25 17:38  .git\logs\refs\heads\master
     目录           0  2018-11-07 16:03  .git\logs\refs\remotes\
     目录           0  2018-11-07 16:03  .git\logs\refs\remotes\origin\
     文件         185  2016-12-24 09:44  .git\logs\refs\remotes\origin\HEAD
     文件         876  2016-12-25 17:38  .git\logs\refs\remotes\origin\master
     目录           0  2018-11-07 16:03  .git\objects\
     目录           0  2018-11-07 16:03  .git\objects\09\
............此处省略131个文件信息

评论

共有 条评论