当前位置: 首页 > news >正文

贪吃蛇项目

今天我们用所需的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.历史战绩窗口,读取完文件后忘记关闭文件,有待优化


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


http://www.mrgr.cn/news/27980.html

相关文章:

  • 一文了解什么是TTP — 技术、战术与程序
  • 二分算法——优选算法
  • linux进程优先级
  • 多态(下)【C++】
  • Python酷库之旅-第三方库Pandas(117)
  • Python--常见的数据格式转换
  • 数据中台过时了?是否需要升级到数据飞轮?
  • 【字幕】恋上数据结构与算法之013动态数组01线性表
  • JavaScript 函数式编程之函子相关代码分享
  • pip install、yum install和conda install三者技术区分
  • jwt报错,位置:找不到符号 parseClaimsJws(java.lang.String)
  • 并发容器(Map、List、Set)实战及其原理分析
  • 在javascript中对象的键为什么只能是字符串或Symbol?
  • C++速通LeetCode简单第17题-爬楼梯
  • 【JS逆向分析】某药品网站价格(Price)解密
  • NFS在docker环境下无法写入文件的问题解决、NFS文件共享查看挂载客户端列表、mount监控及使用script命令保存屏幕终端输出内容
  • TS.38-2
  • 基于yolov8的无人机检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • THREE.js:网页上的3D世界构建者
  • AIGC文本生成