贪吃蛇制作预习报告

贪吃蛇游戏所需实现的功能如下:

  1. 资源文件的使用
  2. 父子窗口的协调出现,父窗口的背景覆盖
  3. 蛇头和食物初次出现的随机数
  4. 按键函数的使用
  5. 绘图事件的使用
  6. 按钮组的使用
  7. 同一个按钮点击连接不同槽
  • 游戏所需要的注意的事项: 开始游戏后
    当点击开始游戏后,用户处于游戏状态,程序随机选择一个空白网格生成一个果实。此后,按任意方向键,贪吃蛇将向对应方向移动,并开始计时,移动速度由程序自行确定。要求游戏过程中,实时显示时间,即贪吃蛇头部移动的格子数。贪吃蛇吃到果实后,在接下来的3步中,头部延长3个格子,与此同时尾部保持不变。点击暂停游戏后,游戏处于暂停状态,贪吃蛇的移动停止,游戏时间停止。 游戏暂停时当处于暂停状态时,点击保存游戏,可以保存当前格局。由用户指定保存文件的名称与位置。文件格式自行设计,需包含贪吃蛇的状态,贪吃蛇的移动方向,障碍和果实位置,以及当前时间。
    点击继续游戏后,贪吃蛇恢复移动,恢复计时,进入游戏状态 。 游戏失败后

    满足失败条件时,游戏进入终止状态,提示游戏失败,游戏计时停止,贪吃蛇无法移动。失败条件:贪吃蛇碰到周围边界贪吃蛇碰到障碍贪吃蛇碰到自己的身体 未开始状态时当游戏处于未开始状态时,点击载入游戏,可以选择文件,载入一个已保存的格局,此时游戏进入暂停状态。暂停或终止状态时当处于暂停状态或终止状态时,点击重新开始,用户变为未开始状态,计时清零,格局恢复

  • 1.根据构造函数传入的参数,来设定游戏地图横向纵向元素个数、游戏难度、以及地图元素大小;

  • 2.加载所有图片资源,后面的绘制地图需要;

  • 3.以当前时间为种子来为后面制造随机数作准备;

  • 4.确定游戏界面大小;

  • 5.地图数字数组申请内存;

  • 6.地图元素绘制数组申请内存;

  • 7.准备一个定时器,用于后面游戏每步进行的时间间隔;

  • 8.布局;

  • 9.创建地图并绘制;

  • 10.不要忘记了添加食物、游戏操作(蛇头不能往后移动)、以及统计分数;

  • 11.开启定时器;

  • widget.h":

  • #ifndef WIDGET_H
    #define WIDGET_H

    #include <QWidget>

    namespace Ui {
    class Widget;
    }

    class Widget : public QWidget
    {
        Q_OBJECT

    public:
        explicit Widget(QWidget *parent = nullptr);
        QList<QRectF> rec;//创建一个保存矩形块儿的链表
        void paintEvent(QPaintEvent *event);//要重写画图事件函数
        ~Widget();

    private:
        Ui::Widget *ui;
    };

    #endif // WIDGET_H

  • widget.cpp:

  • #include "widget.h"
    #include "ui_widget.h"
    #include<QList>
    #include<QRectF>
    #include<QPoint>
    #include<QPainter>
    #include<QPen>
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
        rec.append(QRectF(QPoint(50,50),QPoint(250,250)));
        rec.append(QRectF(QPoint(100,100),QPoint(200,200)));
        rec.append(QRectF(QPoint(120,120),QPoint(150,150)));//尾插
        rec.insert(0,QRectF(QPoint(0,0),QPoint(300,300)));//在0号位置插入一个矩形

    }
    void Widget::paintEvent(QPaintEvent *event){
        QPainter painter;
        painter.begin(this);
        QPen pen(Qt::red);
        pen.setWidth(10);
        painter.setPen(pen);
        for(int i=0;i<rec.length();i++){
            painter.drawRect(rec.at(i));
        }//可以用at直接访问链表的元素
    }
    Widget::~Widget()
    {
        delete ui;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值