• 大小: 4.25MB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2024-02-05
  • 语言: 其他
  • 标签:

资源简介

Qt写的连连看小游戏,之前的被删了,重新传一遍。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 

#include “game_model.h“


// 游戏逻辑模型,与界面分离
GameModel::GameModel() :
    gameStatus(PLAYING)
    gameLevel(BASIC)
{

}

GameModel::~GameModel()
{
    if(gameMap)
    {
        free(gameMap);
        free(hintArray);
        gameMap = NULL;
    }
}

void GameModel::startGame(GameLevel level)
{
    // 用C的方式初始化数组,怀旧一下~
    gameMap = (int *)malloc(sizeof(int) * MAX_ROW * MAX_COL);
    memset(gameMap 0 MAX_ROW * MAX_COL);
    for (int i = 0; i < MAX_ROW * MAX_COL; i++) // 必须这样赋初值,memset容易出问题
        gameMap[i] = 0;

    hintArray = (int *)malloc(sizeof(int) * 4);
    memset(hintArray 0 4);
    for (int i = 0; i < 4; i++)
        hintArray[i] = -1;

    gameStatus = PLAYING;

    gameLevel = level;

    int gameLevelNum;
    switch (gameLevel)
    {
    case BASIC:
        gameLevelNum = kBasicNum;
        break;
    case MEDIUM:
        gameLevelNum = kMediumNum;
        break;
    case HARD:
        gameLevelNum = kHardNum;
    }

    // 填充方块标号
    int iconID = 0;
    for(int i = 0; i < gameLevelNum; i += 2)
    {
        // 每次填充连着的两个,图片用尽了就循环
        gameMap[i] = iconID % MAX_ICON + 1;
        gameMap[i + 1] = iconID % MAX_ICON + 1;
        iconID++;
    }

    // 打乱方块
    srand((unsigned)time(0));
    for(int i = 0; i < MAX_ROW * MAX_COL; i++)
    {
        int randomID = rand() % (MAX_ROW * MAX_COL);
        std::swap(gameMap[i] gameMap[randomID]);
    }

    // 初始化判断模式
    isFrozenMode = false;

    // 初始化绘制点
    paintPoints.clear();
}

// 重载
void GameModel::startGame()
{
    startGame(gameLevel);
}

int *GameModel::getGameMap()
{

    return gameMap;
}

bool GameModel::isFrozen()
{
    // 暴力法,所有方块两两判断是否可以连接
    // 每次消除后做一次判断
    // 其实在这个过程中记录提示

    for (int i = 0; i < MAX_ROW * MAX_COL - 1; i++)
        for( int j = i + 1; j < MAX_ROW * MAX_COL; j++)
        {
            int srcX = i % MAX_COL;
            int srcY = i / MAX_COL;
            int dstX = j % MAX_COL;
            int dstY = j / MAX_COL;

            // 只要能找到可以连接的就不为僵局
            isFrozenMode = true;
            if (isCanlink(srcX srcY dstX dstY))
            {
                // 记录第一个可以连接的hint
                hintArray[0] = srcX;
                hintArray[1] = srcY;
                hintArray[2] = dstX;
                hintArray[3] = dstY;

                isFrozenMode = false;

                return false;
            }
        }
    isFrozenMode = false;

    return true;
}

bool GameModel::isWin()
{
    for (int i = 0; i < MAX_ROW * MAX_COL; i++)
    {
        if (gameMap[i])
            return false;
    }
    gameStatus = WIN;
    return true;
}

int *GameModel::getHint()
{
    return hintArray;
}

// 最重要的判断连接算法
bool GameModel::canlinkDirectly(int srcX int srcY int dstX int dstY)
{
    // 竖线
    if (srcX == dstX)
    {
        if (srcY > dstY)
            std::swap(srcY dstY);
        for (int y = srcY + 1; y < dstY; y++)
            if (gameMap[MAX_COL * y + srcX])
                re

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-12-16 11:31  QtLianliankan-master\
     文件        6148  2016-12-16 11:31  QtLianliankan-master\.DS_Store
     文件         463  2016-12-16 11:31  QtLianliankan-master\QtLianliankan.pro
     文件       24181  2016-12-16 11:31  QtLianliankan-master\QtLianliankan.pro.user
     文件         275  2016-12-16 11:31  QtLianliankan-master\README.md
     文件       12751  2016-12-16 11:31  QtLianliankan-master\game_model.cpp
     文件        2033  2016-12-16 11:31  QtLianliankan-master\game_model.h
     文件         182  2016-12-16 11:31  QtLianliankan-master\main.cpp
     文件       12345  2016-12-16 11:31  QtLianliankan-master\main_game_window.cpp
     文件        1478  2016-12-16 11:31  QtLianliankan-master\main_game_window.h
     文件        2810  2016-12-16 11:31  QtLianliankan-master\main_game_window.ui
     目录           0  2016-12-16 11:31  QtLianliankan-master\pic\
     文件     1629043  2016-12-16 11:31  QtLianliankan-master\pic\llkan.gif
     文件        1123  2016-12-16 11:31  QtLianliankan-master\res.qrc
     目录           0  2016-12-16 11:31  QtLianliankan-master\res\
     文件        6148  2016-12-16 11:31  QtLianliankan-master\res\.DS_Store
     目录           0  2016-12-16 11:31  QtLianliankan-master\res\image\
     文件        6031  2016-12-16 11:31  QtLianliankan-master\res\image\1.png
     文件        4944  2016-12-16 11:31  QtLianliankan-master\res\image\10.png
     文件        3425  2016-12-16 11:31  QtLianliankan-master\res\image\11.png
     文件        4176  2016-12-16 11:31  QtLianliankan-master\res\image\12.png
     文件        4036  2016-12-16 11:31  QtLianliankan-master\res\image\13.png
     文件        3109  2016-12-16 11:31  QtLianliankan-master\res\image\14.png
     文件        3759  2016-12-16 11:31  QtLianliankan-master\res\image\15.png
     文件        3117  2016-12-16 11:31  QtLianliankan-master\res\image\16.png
     文件        3098  2016-12-16 11:31  QtLianliankan-master\res\image\17.png
     文件        4830  2016-12-16 11:31  QtLianliankan-master\res\image\18.png
     文件        4063  2016-12-16 11:31  QtLianliankan-master\res\image\19.png
     文件        8940  2016-12-16 11:31  QtLianliankan-master\res\image\2.png
     文件        2879  2016-12-16 11:31  QtLianliankan-master\res\image\20.png
     文件        3516  2016-12-16 11:31  QtLianliankan-master\res\image\21.png
............此处省略17个文件信息

评论

共有 条评论

相关资源