透彻解析Qt入门级项目——贪吃蛇游戏

1、项目目的:

本项目主要通过编写贪吃蛇游戏来学习,熟悉Qt中封装的类。

2、编译环境

VS2019+Qt5.9

3、功能实现

主要实现下面所列基本功能:

  1. 控制贪吃蛇吃食物
    1. 表示蛇
    2. 控制贪吃蛇上下左右移动
    3. 控制食物的随机分配
    4. 控制蛇的增长  
  2. 暂停游戏
  3. 结束游戏

4、需求分析

4.1、控制贪吃蛇吃食物

4.1.1、表示蛇

贪吃蛇的核心功能就是控制贪吃蛇吃食物,我们很容易可以想到可以用一个个小方块来表示蛇身,那我们应该用什么样的容器来存储这些小方块呢?

蛇的移动我们可以理解为在蛇头处添加一个小方块,在蛇尾处删除掉一个小方块,如下图:

因此会在容器的头部进行插入操作,所以底层数据结构为数组的容器肯定不能选,因为数组的头部插入时间复杂度是o(n),链表就是个非常合适的数据结构,因为它在头部插入的时间复杂度是o(1),所以我们应该选底层数据结构为链表的容器,这里选的是QList,它是Qt中封装的一个类。用该容器存储蛇身后,在构造函数中对其进行初始化,再通过渲染函数将其画在界面里。

//SnakeWidget.h文件
class Snake : public QMainWindow
{
    Q_OBJECT

public:
    Snake(QWidget *parent = nullptr);
    ~Snake();


    private:
    Ui::SnakeClass ui;

    //表示蛇
    QList<QRectF> snake;

    //表示蛇身的小方块的宽高
    int nodeWidth = 20;
    int nodeHeight = 20;


    //渲染(绘图)
    void paintEvent(QPaintEvent* event);

};

4.1.2、控制蛇上下移动

使用QTimer类定义一个定时器,该定时器不断地发出timeout信号,相应的槽函数就会不断地接收该信号来执行动作以控制蛇移动,然后不断地进行重新渲染,以达到蛇不断移动的效果。前面说过蛇的移动实际上是在头部增加一个小方块,在尾部删除一个小方块,因此我们可以封装4个成员函数分别控制蛇在4个方向的头部增加,同时再封装一个成员函数表示尾部的删除。

//SnakeWidget.h文件
class Snake : public QMainWindow
{
    Q_OBJECT

public:
    Snake(QWidget *parent = nullptr);
    ~Snake();


private:
    Ui::SnakeClass ui;

    //表示蛇
    QList<QRectF> snake;

    //表示蛇身的小方块的宽高
    int nodeWidth = 20;
    int nodeHeight = 20;

    //定时器
    QTimer* timer;
    int time = 100;//超时时间间隔,单位毫秒

    //渲染(绘图)
    void paintEvent(QPaintEvent* event);

    //4个成员函数控制蛇4个方向头部的增加
    void addUp();
    void addDown();
    void addLeft();
    void addRight();

    //删除尾部
    void deleteLast();

private slots:
    void timeout();

};

4.1.3、控制食物的随机分配

食物可以用一个小方块来表示,然后封装一个成员函数来随机分配食物这个小方块的位置,先在构造函数中对其进行初始化,最后通过渲染函数将其画在界面中。

//SnakeWidget.h文件
class Snake : public QMainWindow
{
    Q_OBJECT

public:
    Snake(QWidget *parent = nullptr);
    ~Snake();


private:
    Ui::SnakeClass ui;

    //表示蛇
    QList<QRectF> snake;

    //食物
    QRectF food;

    //表示蛇身的小方块的宽高
    int nodeWidth = 20;
    int nodeHeight = 20;


    //渲染(绘图)
    void paintEvent(QPaintEvent* event);

    //4个成员函数控制蛇4个方向的移动
    void addUp();
    void addDown();
    void addLeft();
    void addRight();

    //添加食物
    void addFood();
};

4.1.4、控制蛇的增长

我们只需判断蛇头小方块是否和食物小方块重合,一旦重合,那我们在头部多增加一个小方块,就表示蛇增长了。比如蛇朝右移动,我们在头部增加一个小方块,尾部删除一个小方块,表示蛇的移动,那现在,我们在头部增加两个小方块,在尾部删除一个小方块,就表示蛇增长了。

4.2、暂停游戏

当定时器调用stop()函数时就会停止发送timeout()信号,那么timeout()信号相应的槽函数也就停止执行,timeout()相应的槽函数是控制蛇移动的,timeout相应的槽函数停止执行,那么对应的蛇也就停止了移动,也就呈现出暂停的效果了。

timer->stop();

4.3、结束游戏

可以封装一个成员函数来判断游戏是否结束,这里判断游戏结束的标志就是蛇头碰到蛇身。

bool SnakeWideget::checkContact()
{
	for (int i = 0; i < snake.length(); i++)
	{
		for (int j = i+1;j < snake.length(); j++)
		{
			if (snake[i] == snake[j])
				return true;
		}
	}
	
	return false;
}

2023.2.13更新:新增背景音乐,更换了背景图片,优化了界面

源码链接:Snake · IT大文豪/MyProject - 码云 - 开源中国 (gitee.com)

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: "C++ GUI Qt 4编程"是一本介绍Qt4编程的著作。Qt是一种跨平台的GUI应用程序框架,由Qt Company开发Qt具有高度的灵活性和可定制性,它可以帮助开发者构建高质量、易于维护的GUI应用程序。Qt提供了丰富的组件和工具,如控件、布局管理器、绘图、网络、数据库、XML、多线程等,极大地方便了GUI应用程序的编写和开发。 本书适合有C++语言基础的读者阅读,书中详细介绍了Qt的基本概念、语法、API及其应用。其中,包括信号槽机制、Qt Designer界面设计工具、多线程、网络编程、数据库操作等方面的内容。同时,读者也能学到了如何在不同平台编写GUI应用程序,如Windows、Mac OS和Linux等。本书的实例非常丰富,可以帮助读者快速掌握Qt4编程技能,提升自己的编程能力。 总之,"C++ GUI Qt 4编程"是一本非常实用的编程指南,适合那些想要学习Qt编程的读者,能帮助他们快速了解Qt4的开发框架和技术,以及如何利用这些技能构建高质量的GUI应用程序。 ### 回答2: 《C++ GUI Qt 4编程》是一本介绍Qt 4编程的经典著作,第二版在原版的基础上增加了很多新的内容。本书主要面向想要学习Qt 4编程的C++程序员,通过本书可以系统而全面的了解Qt 4框架的各种组件,学会使用Qt 4来开发GUI应用程序。 本书的第一部分主要介绍了Qt 4的概念和基本使用,包括Qt 4的主要组件,Qt 4的对象模型,Qt 4的信号和槽机制等等;第二部分则介绍了如何使用Qt 4进行GUI编程,包括如何使用Qt Designer来设计GUI界面,如何使用Qt的QWidget类和QLayout类来创建窗口、对话框、工具栏等等。此外,本书还介绍了如何使用Qt的容器类、绘图类、数据模型类、多线程类等等来实现更加复杂的功能。 本书的另一个重要特点是涵盖了很多实例,这些实例涵盖了从简单示例到完整的应用程序的所有层次。这些实例可以帮助读者更好的理解Qt 4编程的各个方面,并提供了实践经验。此外,本书还介绍了一些最佳实践和Qt 4的设计模式,有助于读者在开发Qt应用程序时遵循规范和减少错误。 总之,《C++ GUI Qt 4编程》是一本非常优秀的Qt编程入门指南,尤其适合那些想要学习Qt编程的C++程序员。通过学习本书,读者可以快速掌握Qt 4的基本知识和使用方法,为日后开发高质量的GUI应用程序打下坚实的基础。 ### 回答3: Qt是一个面向对象的跨平台开发框架,它提供了大量的类库和工具,可以帮助开发者快速开发高质量的GUI程序。Qt 4是Qt框架的第四个版本,在此基础上引入了许多新的特性和改进。 本书《C++ GUI Qt 4编程(第二版)》是一本系统地介绍Qt 4编程的实用指南书籍,它主要面向那些初学Qt的程序员和具有一定C++编程基础的读者。本书的主要内容分为三部分:基础篇、进阶篇和实战篇。其中,基础篇从Qt 4的安装、开发环境、Qt基础知识等方面入手,介绍了Qt的发展历程、基本概念、对象模型、信号与槽机制、常用控件等内容。进阶篇在基础篇的基础上讲解了Qt的高级功能,包括数据库编程、多线程编程、网络编程等方面。实战篇则通过实际项目例子展示了如何使用Qt 4进行实际开发,如绘图、文本编辑器、图像处理、音频处理等多个项目。 总的来说,本书思路清晰,内容详实,注重实用性,在编写Qt 4程序时作为参考书是非常不错的选择。同时,这本书也是学习Qt编程入门的必备经典教材之一,读者可以透彻了解Qt 4的各种功能和应用,能够熟练编写出自己想要的GUI程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

子非鱼Swx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值