贪吃蛇项目

今天我们用所需的qt知识,做一个贪吃蛇小游戏,感兴趣的铁子可以跟着我一起实现一下这个游戏,它伴随了我们整个童年,我今天实现的就是最原版的贪吃蛇小游戏。

Gitee源码:贪吃蛇游戏源码


目录

1.项目背景

2.项目环境

3.准备工作

5.项目实现

5.1实现思路

5.1.1GameHall

5.1.2SetSelect

5.1.3GameSelect

5.1.4GameRoom

5.1.5游戏结束

5.2项目源码

6.项目总结


1.项目背景

贪吃蛇(Snake)是一个经典的电子游戏,它的历史可以追溯到20世纪70年代的早期电子游戏。在这个游戏中,玩家控制一条不断移动的蛇,通过吃食物来增加蛇的长度,同时避免撞到墙壁或蛇自己的身体。游戏的难度随着蛇的长度增加而逐渐提升,玩家的目标是尽可能地获得更高的分数。最早的贪吃蛇游戏是1976年由Gremlin公司推出的《Blockade》。该游戏的核心机制是通过控制一条线条状的“蛇”,让它尽可能地长,同时避免撞到自己或游戏场地的边界。

在本次实现的贪吃蛇项目中,为了降低游戏难度,我们取消蛇撞击墙壁会导致游戏结束的情况,只做出蛇碰到自身会导致游戏结束的设定,来让我们一起来看看这个游戏吧!

2.项目环境

QT Creator开发软件

3.准备工作

1.贪吃蛇项目我们分为四个窗口来分别实现,分别是GameHal(游戏大厅)、SetSelect(游戏设置)、GameSelect(难度选择)、GameRoom(游戏房间)

2.提前准备好贪吃蛇游戏所需要的图片、音乐以及音效

4.项目演示

接下来给大家演示一下实现的贪吃蛇

贪吃蛇游戏 2024-09-15 22-08-41

5.项目实现

5.1实现思路

想要实现贪吃蛇小游戏,我们必须对QT中有哪些功能做到了如指掌,对每个库中的方法也做到大体了解,其次,我们可以借助QT助手,对所需要的功能进行查找。在这里,我画了一个思维导图,供大家参考,里面把实现每个窗口的各个功能都进行了展示,相信大家一看就明白了。

由于图片太大,这里分节点展示

5.1.1GameHall

说明:实现游戏大厅,重要的是按钮的设置,“开始游戏”按钮和“游戏设置”按钮都要关联信号            槽,设置点击音效,点击开始游戏按钮,进入GameSelect窗口,点击游戏设置按钮,            进入SetSelect窗口

5.1.2SetSelect

说明:在这个窗口中,设置了back返回按钮,点击back,回到GameHall窗口,设置了帮助               和开发者按钮,在这里我设置了超链接,关联信号和槽,设置点击音效,点击进入相             关网页

5.1.3GameSelect

说明:在这个窗口中设置back按钮,三种模式选择按钮,简单模式,正常模式,困难模式,            设置了历史战绩按钮

        简单模式:点击按钮,进入游戏简单模式,蛇移动速度为200

        正常模式:点击按钮,进入游戏正常模式,蛇移动速度为100

        困难模式:点击按钮,进入游戏困难模式,蛇移动速度为50

        实现不同按钮控制蛇的不同移速,主要用到的是QT中的定时器,QTimer

        历史战绩:我们要准备好一个txt文件,从GameRoom的积分中读取到积分,然后写到                              txt中

历史战绩窗口

5.1.4GameRoom

说明:GameRoom中涉及到的操作众多,图片放不下,有需要思维导图的铁汁可以私信

在这个窗口中,就是我们玩游戏的界面了,有记录积分,我们的初始积分默认为3,设置开始按钮和暂停按钮,还有四个游戏方向键,以及退出GameRoom的按钮。

关于积分:小蛇每次吃一个食物,积分都会加1

开始按钮:点击按钮,小蛇开始移动,游戏播放背景音乐

暂停按钮:点击按钮,小蛇停止移动,游戏音乐暂停

四个方向键:控制小蛇的移动方向

退出按钮:点击按钮,弹出弹窗,点击Yes,回到GameHall窗口,点击No,回到游戏

5.1.5游戏结束

对于游戏结束,我们也做了对于的画面显示

大家可以根据自己的想法设置游戏结束画面

5.2项目源码

由于代码众多,我们在这里只显示GameHall的代码,我会将源码放在Gitee中,有需要的铁汁可以自行参考。

GameHall源码

#include "gamehall.h"
#include "ui_gamehall.h"
#include"gameselect.h"
#include"setselect.h"
#include<QPainter>
#include<QPixmap>
#include<QIcon>
#include<QPushButton>
#include<QFont>
#include<QSound>
#include<QWidget>

GameHall::GameHall(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::GameHall)
{
    ui->setupUi(this);
    //调整窗口大小
    this->setFixedSize(1314,767);
    //设置窗口图标
    this->setWindowIcon(QIcon(":res/ico.png"));
    this->setWindowTitle("贪吃蛇游戏");
    //设置按钮字体的格式
    QFont font("隶书",24);

    //创建开始游戏按钮
    QPushButton *strBtn=new QPushButton(this);
    QPushButton *setBtn=new QPushButton(this);
    strBtn->move(550,600);
    strBtn->setFont(font);
    strBtn->setText("开始游戏");
    setBtn->move(550,670);
    setBtn->setFont(font);
    setBtn->setText("游戏设置");

    //去掉边框,设置样式
    strBtn->setStyleSheet("QPushButton{border:0px;}");
    setBtn->setStyleSheet("QPushButton{border:0px;}");


    //设置按钮信号槽
    //new一个窗口出来
    GameSelect *gameSelect=new GameSelect;
    SetSelect *setSelect=new SetSelect;

    //设置按钮音效
    connect(strBtn,&QPushButton::pressed,this,&GameHall::strPressed);
    connect(setBtn,&QPushButton::pressed,this,&GameHall::setPressed);

    connect(strBtn,&QPushButton::clicked,[=](){
        this->close();
        //将开始游戏窗口设置的和贪吃蛇游戏窗口一样大
        gameSelect->setGeometry(this->geometry());
        gameSelect->show();


    });
    connect(setBtn,&QPushButton::clicked,[=](){
        this->close();
        setSelect->setGeometry(this->geometry());
        setSelect->show();
    });



}

GameHall::~GameHall()
{
    delete ui;
}

void GameHall::paintEvent(QPaintEvent *event)
{
    //游戏大厅,绘制一张背景图
    //实例化画家对象
    QPainter painter(this);
    //绘图设备QPixmap
    QPixmap pix(":res/game_hall.png");
    //绘画
    painter.drawPixmap(0,0,this->width(),this->height(),pix);
}

//设置按钮音效
void GameHall::setPressed()
{
    //设置点击音效
    QSound::play(":res/clicked.wav");
}

void GameHall::strPressed()
{
    //设置点击音效
    QSound::play(":res/clicked.wav");
}

6.项目总结

1.蛇移动撞墙不死,只有撞到自己才游戏结束,可以改进为撞墙也会游戏结束,推迟到下一个版本优化
2.连续点击开始按钮,会响起多个游戏音乐,可以放到下一个版本改进
3.历史战绩只能保存最新的一个记录,可以借助C语言的文件管理,让所有游戏记录都保存下来
4.点击退出按钮时,要让小蛇停止移动,版本有待优化
5.历史战绩窗口,读取完文件后忘记关闭文件,有待优化


以上就是贪吃蛇项目的简述,希望可以帮助到铁汁们,大家下期再见!!!

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月亮夹馍干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值