QT项目-贪吃蛇

学习Qt之后便找了贪吃蛇这个小项目来练习,因为没有使用UI,因此在绘制方面工程量较大

首先了解贪吃蛇的游戏逻辑:

1.食物随机出现,蛇头与蛇尾随机(完成游戏初始化)

2.蛇碰到食物蛇身变长

3.不按键时蛇按照当前方向前进

4.按键转向

5.蛇触碰到自己和边缘游戏结束

第一阶段初步完成时,完成情况如下:

所需要实现的功能:
1.注册以及各种判定,注册信息存入数据库    √
2.更改密码以及各种判定,更新密码信息存入数据库 √
3.登录后进入相应游戏界面            √
4.游戏主体相关功能:
    蛇头和食物初次随机出现          √
    通过点击界面中相关按键控制蛇的转向   √
    游戏开始和暂停(同一个按钮连接不同的槽)  √
    游戏结束以后能够按开始键重新开始     √     BUG:有时候不够灵敏,存在小bug)
    游戏的退出    √                      BUG: 按下退出键以后直接退出程序,应用程序输出显示:程序异常结束。未能实现返回登录界面即切换用户功能。 
5.游戏得分数存入数据库         √
7.同一用户名数据能够及时更新            √
8.排行榜功能要有排序输出    ×   
    目前实现界面搭建和按键跳转功能 通过qDebug()能够将数据库中内容按得分从高到低调试输出
    编写该模块的时候存在的问题:
            在添加了QPubutton 返回按钮后,再添加QLabel或者其他任意框体控件的时候,编译时会出现"程序异常结束"的调试报告。
            通过百度以后初步怀疑应该是存在与内存有关的问题。目前该问题尚未解决。
 

第二次修改阶段

1.解决了排行榜界面不能添加按钮的问题,通过QTextEdit绘制文本框,设置关闭输入功能,利用append函数将数据库中内容按得分从高到低的顺序显示到文本框中。代码如下:

       QSqlQuery  query;
        query.exec("select username, score from userinfor order by score desc");

        while(query.next())
        {
            QString name = query.value(0).toString();
            QString score = query.value(1).toString();
  //          qDebug() << "name" << name;
            textEdit->setTextColor(Qt::white);
            textEdit->setFontPointSize(12);
            textEdit->setFontWeight(25);
            textEdit->append(name+"   \t"+score);
         }

存在问题: 在显示排行榜的时候存在部分数据不能对齐输出,同时在一行输出过长时,TextEdit文本框会自动换行

2.添加 EXIT 退出返回登录界面功能,实现便捷用户切换,不需要重新打开程序。同时添加退出提示,防止误触

3.发现游戏bug,游戏gameover时,蛇身仍然保持最后出现的长度,同时分数不清零,第一次写该段代码时不够严谨,着重点放在了如何将数据存入数据库,未添加蛇身以及分数初始化接口。修改后代码如下:

void gamemainwindow::M_CheckGameOver()
{
    if(0>snake[0][0]||snake[0][0]>600||0>snake[0][1]||snake[0][1]>480||(!Nobite))
    {
        Nobite=true;//将其设置为真,进入绘图函数画出蛇的身体
        this->update();//调用绘图事件函数
        Timer->stop();
        if(QMessageBox::Yes==QMessageBox::information(this,"Tips:","Game Over!",QMessageBox::Yes))
        {
            QString s = QString(" update userinfor set score = '%1' where username = '%2';").arg(Score).arg(UName);
            QSqlQuery  query;
            query.exec(s);

            snake_Init();

            Score = 0;   //重置分数
            Difficulty = 1;  //重置等级
            ScoreLabelNumber->setText(QString::number(Score)+"分");//写入
            LevelLabelNumber->setText(QString::number(Difficulty)+"级");
        }
    }
}

到此为止第一阶段列出所有功能全部实现。

另外,还可以添加的功能为:

1.持续按键时,增加蛇的移动速度

2.增加调节难度按钮

3.改善排行榜界面

猜你喜欢

转载自blog.csdn.net/qq_40949398/article/details/81212256