Qt—贪吃蛇项目(由0到1实现贪吃蛇项目)

一、项目介绍

贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅块,扫雷等游戏位列经典游戏的⾏列。 在编程语⾔的教学中,我们以贪吃蛇为例,从设计到代码实现来提升编程能⼒和逻辑能⼒。它通过控制蛇头⽅向吃⻝物,从⽽使得蛇变得越来越⻓。在本游戏中设置了上下左右四个⽅向键来控制蛇的移动⽅向。⻝物的产⽣是随机⽣成的,当蛇每吃⼀次⻝物 就会增加⼀节⾝体,同时游戏积分也会相应的加⼀。
在本游戏的设计中,蛇的⾝体会越吃越⻓,⾝体越⻓对应的难度就越⼤,因为⼀旦蛇头和⾝体相交游戏就会结束。
本项⽬使⽤ Qt 实现⼀款简单的贪吃蛇游戏。
项目的目标:

  1. 游戏大厅界面实现
  2. 难度选择界面实现
  3. 游戏界面实现
  4. 分数记录界面实现

二、游戏大厅界面实现

2.1完成游戏大厅的背景图。

1.背景图的渲染,我们通过QT的绘图事件完成

void gamehall::paintEvent(QPaintEvent *event)
{
   
 	 //实例化一个画家
    QPainter paint(this);
    //实例化一个设备
    QPixmap pix(":res/game_hall.png");
    //进行绘画
    paint.drawPixmap(0,0,this->width(),this->height(),pix);
 }

2.对我们的标题栏进行设置

 	//设置窗口大小
    this->setFixedSize(1000,800);
    //设置标题栏图标
    this->setWindowIcon(QIcon(":res/ico.png"));
    //设置标题栏标签
    this->setWindowTitle("游戏大厅");

在这里插入图片描述

2.2创建一个按钮,给它设置样式,并且可以跳转到别的页面

1.创建一个按钮,给它设置样式

  QFont font("华文行楷",25);
    //设置按钮
    QPushButton *intoBtn= new QPushButton(this);
    intoBtn->setFont(font);
    intoBtn->setText("开始游戏");
    intoBtn->setStyleSheet("QPushButton{border:0px;}");
    intoBtn->move(450,520);
    

2.创建的新页面
点击add new
在这里插入图片描述
3. 建立信号槽,使按钮被点击后跳转界面(这个跳转的界面,是新创建的文件,点击按钮会发出声音)

	//创建另一个窗口
    GameSelect *select=new GameSelect();
    connect(intoBtn,&QPushButton::clicked,[=]{
   
        //关闭上个窗口
        this->close();
        //设置窗口大小
        select->setGeometry(this->geometry());
        //显示窗口
        select->show();
        //发出声音
         QSound::play(":res/clicked.wav");

在这里插入图片描述
4.总代码

#include "gamesnake.h"
#include "ui_gamesnake.h"
#include "gameselect.h"
#include <QPainter>
#include <QPixmap>
#include <QIcon>
#include <QPushButton>
#include <QSound>
GameSnake::GameSnake(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::GameSnake)
{
   
    ui->setupUi(this);
    //设置窗口大小
    this->setFixedSize(1000,800);
    //设置窗口图标
    this->setWindowIcon(QIcon(":res/ico.png"));
    //设置窗口标签
    this->setWindowTitle("游戏大厅");
    //设置字体
    QFont font("华文行楷",25);
    //设置按钮
    QPushButton *intoBtn= new QPushButton(this);
    intoBtn->setFont(font);
    intoBtn->setText("开始游戏");
    intoBtn->setStyleSheet("QPushButton{border:0px;}");
    intoBtn->move(450,520);
    //创建另一个窗口
    GameSelect *select=new GameSelect();
    connect(intoBtn,&QPushButton::clicked,[=]{
   
        //关闭上个窗口
        this->close();

        select->setGeometry(this->geometry());
        select->show();
        QSound::play(":res/clicked.wav");



   });
}

GameSnake::~GameSnake()
{
   
    delete ui;
}

void GameSnake::paintEvent(QPaintEvent *event)
{
   
    //实例化一个画家
    QPainter paint(this);
    //实例化一个设备
    QPixmap pix(":res/game_hall.png");
    //进行绘画
    paint.drawPixmap(0,0,this->width(),this->height(),pix);
}

注意pro文件里的配置加上multimedai

三、难度选择界面实现

我们已经把贪吃蛇的游戏界面完成了,下面就进入关卡选择界面。
在关卡选择界⾯上设置了四个游戏模式按钮,分别是:容易模式、正常模式、困难模式、地狱模式;⼀个 “历史战绩” 按钮;⼀个返回游戏⼤厅界⾯的按钮。
1. 创建按钮,给它设置样式。

    //容易关卡
   QPushButton *briefnessBtn= new QPushButton(this);
   briefnessBtn->setStyleSheet("QPushButton{background-color:#0072C6;color: black; border:0px groove gray;border-radius:10px;padding:6px;}");
   briefnessBtn->move(400,200);
   QFont font("华文行楷",25);
   briefnessBtn->setFont(font);
   briefnessBtn->setText("容易模式");

如图,我已经创建了5个按钮:
在这里插入图片描述

2. 为了使第二个界面可以返回到第一个界面,创建一个按钮,按下按钮触发信号,就可以返回第一个页面。(返回按钮)

//返回按钮
QPushButton *returnBtn= new QPushButton(this);
returnBtn->move(850,700);
returnBtn->setIcon(QIcon(":res/up.png"));

connect(returnBtn,&QPushButton::clicked,[=]{
   
    this->close();
    GameSnake *snake= new GameSnake();
    snake->show();
    QSound::play(":res/clicked.wav");
        });

在这里插入图片描述
3. 游戏选择页面跳转到游戏大厅
实现页面之间的跳转

 //实现游戏房间和选择关卡切换
    //创建另一个窗口
    GameRoom *room=new GameRoom();


    //创建按钮,给按钮设置格式
    //容易关卡
   QPushButton *briefnessBtn= new QPushButton(this);
   briefnessBtn->setStyleSheet("QPushButton{background-color:#0072C6;color: black; border:0px groove gray;border-radius:10px;padding:6px;}");
   briefnessBtn->move(400,200);
   QFont font("华文行楷",25);
   briefnessBtn->setFont(font);
   briefnessBtn->setText("容易模式");
   connect(briefnessBtn,&QPushButton::clicked,[=]{
   
       //关闭上个窗口
       this->close();

       room->setGeometry(this->geometry());
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值