ZBLOG

分析以下推箱子游戏代码做出注释InitMap::InitMap(QWidget *parent) : QWidget(parent) { connect(this, SIGNAL(finished()), this, SLOT(NextLevel())); setFocusPolicy(Qt::StrongFocus); Init(); } void InitMap::Init(){ movie = new QMovie(":/new/prefix1/i...

下面是对推箱子游戏代码的注释解析:

InitMap::InitMap(QWidget *parent) : QWidget(parent)
{
    connect(this, SIGNAL(finished()), this, SLOT(NextLevel()));
    setFocusPolicy(Qt::StrongFocus);
    Init();
}
  • 初始化函数InitMap的构造函数,继承自QWidget类。
  • 通过connect函数将当前对象与finished信号和NextLevel槽函数连接起来。
  • 设置焦点策略为Qt::StrongFocus。
  • 调用Init()函数进行初始化。
void InitMap::Init(){
    movie = new QMovie(":/new/prefix1/img/man3.gif");
    NumOfPos = 0;
    level = 1;

    int x0 = 0;
    int y0 = 0;
    int s = 60;
    
    // 创建并设置标签控件数组
    for(int x = 0; x < MAX_X; x++)
        for(int y = 0; y < MAX_Y; y++){
            QLabel *label = new QLabel(this);
            x0 = x*s;
            y0 = y*s;
            label->setGeometry(x0, y0, s, s);
            labels[x][y] = label;
        }
    
    InitSence();

    emit finished();
}
  • 初始化地图的辅助函数Init(),在构造函数中调用。
  • 加载人物动画图片文件”man3.gif”到QMovie对象movie中。
  • 初始化NumOfPos为零,level为1.
  • 定义变量x0、y0和s,并赋予初始值60。
  • 使用双层循环创建标签控件数组,并设置位置和大小。
  • 调用InitSence()函数初始化场景。
  • 发送finished信号。
void InitMap::InitSence(){
    for(int x = 0; x < MAX_X; x++)
        for(int y = 0; y < MAX_Y; y++){
            labelMatrix[x][y] = NOTHING;
            labelMatrix2[x][y] = NOTHING;
            labels[x][y]->clear();
        }
    NumOfPos = 0;
}
  • 初始化场景的辅助函数InitSence(),用于清除并初始化地图矩阵和标签数组。
  • 使用双层循环遍历地图矩阵和标签数组,将其元素都设置为NOTHING。
  • 清除标签数组中的内容。
  • 将NumOfPos重置为零。
void InitMap::displayMap(){
    for(int x = 0; x < MAX_X; x++)
        for(int y = 0; y < MAX_Y; y++){
            if(labelMatrix2[x][y] == POS){
                pixmap.load(":/new/prefix1/img/pos2.jpg");
                labels[x][y]->setPixmap(pixmap);
                labels[x][y]->setScaledContents(true);
                labels[x][y]->setVisible(true);
            }

            switch (labelMatrix[x][y]){
            case WALL:
                pixmap.load(":/new/prefix1/img/wall2.png");
                labels[x][y]->setPixmap(pixmap);
                labels[x][y]->setScaledContents(true);
                labels[x][y]->setVisible(true);
                break;
            case BOX:
                pixmap.load(":/new/prefix1/img/box2.png");
                labels[x][y]->setPixmap(pixmap);
                labels[x][y]->setScaledContents(true);
                labels[x][y]->setVisible(true);
                break;
            case MAN:
                labels[x][y]->setMovie(movie);
                labels[x][y]->setScaledContents(true);
                movie->start();
                labels[x][y]->setVisible(true);
                break;
            case NOTHING:
                if(labelMatrix2[x][y] != POS){
                    pixmap.load(":/new/prefix1/img/nothing.png");
                    labels[x][y]->setPixmap(pixmap);
                    labels[x][y]->setScaledContents(true);
                    //labels[x][y]->setVisible(false);
                }
                break;
            default:
                break;
            }
            if(labelMatrix2[x][y] == POS && labelMatrix[x][y] == BOX)
            {
                pixmap.load(":/new/prefix1/img/posAndBox2.png");
                labels[x][y]->setPixmap(pixmap);
                labels[x][y]->setScaledContents(true);
                labels[x][y]->setVisible(true);
            }
        }
}
  • 显示地图的函数displayMap(),用于根据地图矩阵和标签数组的内容,显示对应的图像。
  • 使用双层循环遍历地图矩阵和标签数组。
  • 如果labelMatrix2中对应位置为POS,则加载图片文件”pos2.jpg”到QPixmap对象pixmap中,并设置标签控件labels的图片和可见性。
  • 根据labelMatrix中的元素进行不同的处理:
    • 如果是WALL,加载图片文件”wall2.png”到pixmap中,并设置标签控件labels的图片和可见性。
    • 如果是BOX,加载图片文件”box2.png”到pixmap中,并设置标签控件labels的图片和可见性。
    • 如果是MAN,将QMovie对象movie设置为标签控件labels的动画,并启动动画播放,设置标签控件labels的可见性。
    • 如果是NOTHING,且labelMatrix2中对应位置不为POS,则加载图片文件”nothing.png”到pixmap中,并设置标签控件labels的图片和可见性。
  • 如果labelMatrix2和labelMatrix中对应位置都为POS和BOX,则加载图片文件”posAndBox2.png”到pixmap中,并设置标签控件labels的图片和可见性。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=11081

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?