【Qt】贪吃蛇

该文章已生成可运行项目,

目录

贪吃蛇小游戏

一.项目介绍及演示

1. 项目介绍

2. 项目演示

3. 窗口介绍

3.1 游戏大厅窗口

3.2 游戏关卡选择窗口

3.3 游戏房间窗口

二、创建项目及资源配置

1. 创建项目(QWidget)

​编辑

2. 资源配置(图片声音素材)

三、项目实现

1. 游戏大厅

1.1 重写绘图事件

1.2 设置窗口大小、图标、标题

1.3 设置开始按钮样式

2. 游戏关卡选择

2.1 创建GameSelect类

2.2 连接按钮和窗口跳转

3. 游戏房间

3.1 创建GameRoom类

3.2 对游戏房间数据结构进行封装

3.3 初始化游戏房间界面

3.4 绘制界面窗口

3.5 蛇的移动

3.6 绘制蛇头身体尾巴

3.6 绘制食物与分数

3.7 判定游戏结束

3.8 随机生成食物节点

3.9 创建游戏开始和暂停按钮

3.10 实现定时器的超时槽函数

3.11 设置游戏退出按钮

3.12 获取历史战绩

四.贪吃蛇移动的逻辑讲解

 1.贪吃蛇的一次普通移动:

2.贪吃蛇吃到食物的一次移动:

3.贪吃蛇的持续移动:


贪吃蛇小游戏

一.项目介绍及演示


1. 项目介绍

贪吃蛇游戏规则:简单来说,贪吃蛇游戏规则是玩家通过四个方向键来控制蛇的移动控制其在地图上吃豆子。蛇运动过程中撞到蛇身,则立即结束游戏


2. 项目演示


3. 窗口介绍

3.1 游戏大厅窗口


3.2 游戏关卡选择窗口


3.3 游戏房间窗口

二、创建项目及资源配置


1. 创建项目(QWidget)

在桌面上创建一个名为Snake的文件夹,用于存放项目代码

新建一个项目

2. 资源配置(图片声音素材)

在上述创建完成后,新建一个qrc文件,步骤如下:

此时资源文件,如图示:


三、项目实现


1. 游戏大厅
1.1 重写绘图事件

在gamehall.h文件中,进行重写绘图事件函数的声明

鼠标当到painEvent函数上点击Alt+Enter(回车),为painEvent函数添加定义

在这里插入图片描述

在上述过程后,开始编辑painEvent函数。
第一步:

先实例化画家,使用QPainter painter(this)实例化一个画家,this是让画家在当前窗口(gamehall)进行绘制。注意在使用QPainter需要包含头文件#include<QPainter>
第二步:

再实例化绘图设备,将图片加载到绘图设备中。注意在使用QPixmap需要包含头文件#include<QPixmap>
第三步:

再进行绘画,使用drawPixmap()方法,参数1和参数2,表示绘制开始的坐标;参数3,表示绘制的宽度;参数4,表示绘制的高度;参数5,表示绘制的图片。

void GameHall::paintEvent(QPaintEvent *event)
{
    //实例化画家,this:让画家在当前窗口进行绘制
    QPainter painter(this);
    //实例化绘图设备
    QPixmap pix(":/res/game_hall.png");
    //绘画 0,0从界面左上角开始绘画根据窗口的宽和高进行绘制
    painter.drawPixmap(0,0,this->width(),this->height(),pix);
}

1.2 设置窗口大小、图标、标题

第一步,先修改窗口的大小通过setFixedSize()方法将窗口的宽度设置为1000,高度设置为800。
第二步,设置窗口的图标先通过QIcon()将图片加载到项目中,再通过setWindowIcon()方法设置到窗口中。
第三步,设置窗口的标题通过setWindowTitle()方法将文字设置到窗口标题中。

GameHall::GameHall(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::GameHall)
{
    ui->setupUi(this);
    //设置窗口大小
    this->setFixedSize(1000,800);
    //设置窗口的图标
    this->setWindowIcon(QIcon(":/res/ico.png"));
    //设置窗口标题
    this->setWindowTitle("游戏大厅");
}

1.3 设置开始按钮样式

第一步,通过QPushButton创建一个游戏开始按钮,按钮文本设置为"开始游戏",this在父窗口中显示。
第二步,通过move移动按钮再窗口中的位置,消除按钮的边框。
第三步,修改按钮中的文本样式,需要先创建一个字体样式(字体为黑体,大小为20像素),最后通过setFont方法将字体样式加载到按钮中

GameHall::GameHall(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::GameHall)
{
    ui->setupUi(this);
    //设置窗口大小
    this->setFixedSize(1000,800);
    //设置窗口的图标
    this->setWindowIcon(QIcon(":/res/ico.png"));
    //设置窗口标题
    this->setWindowTitle("游戏大厅");


    //添加开始游戏按钮
    QPushButton * startButton = new QPushButton("开始游戏",this);
    //设置按钮的位置
    startButton->move(450,600);
    //消除按钮边框
    startButton->setStyleSheet("QPushButton{border:0px}");
    //创建字体样式
    QFont font("黑体", 20);
    //将字体样式加入到按钮文本中
    startButton->setFont(font);

}

点击运行,此时游戏大厅绘制成功


2. 游戏关卡选择

2.1 创建GameSelect类

先创建一个新的类,名为为GameSelect,基类选择QWidget
在这里插入图片描述

本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值