今天我们用所需的qt知识,做一个贪吃蛇小游戏,感兴趣的铁子可以跟着我一起实现一下这个游戏,它伴随了我们整个童年,我今天实现的就是最原版的贪吃蛇小游戏。
Gitee源码:贪吃蛇游戏源码
目录
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.历史战绩窗口,读取完文件后忘记关闭文件,有待优化
以上就是贪吃蛇项目的简述,希望可以帮助到铁汁们,大家下期再见!!!