贪吃蛇项目
今天我们用所需的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);//绘图设备QPixmapQPixmap 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.历史战绩窗口,读取完文件后忘记关闭文件,有待优化
以上就是贪吃蛇项目的简述,希望可以帮助到铁汁们,大家下期再见!!!