1、采用面向对象的方法,封装了蛇与奖励对象
2、背景图片需要更换为自己本地图片,程序自动调整窗口大小为背景图片大小
3、屏幕刷新使用repaint(),使用update()不起作用
主要代码
1、蛇类 Snake
#ifndef SNAKE_H
#define SNAKE_H
#include <QPaintDevice>
#include <QList>
#include <QRectF>
#include <QPainter>
#include <QDebug>
class Snake
{
public:
Snake(QPaintDevice *device);
~Snake();
void move_up();
void move_down();
void move_right();
void move_left();
void draw();
QRectF getHead();
void growUp();
private:
QList <QRectF> snakeBody;
int nodeWidth = 50;
int nodeHeight = 50;
QPaintDevice *device;
void drawEyes();
int moveDirection;
};
#endif // SNAKE_H
#include "snake.h"
#include "widget.h"
Snake::Snake(QPaintDevice *device)
{
this->device = device;
for (int i = 0; i <4 ; i++){
snakeBody.insert(i,QRectF(300,200+i*nodeHeight,nodeWidth,nodeHeight));
}
moveDirection = MV_UP;
}
Snake::~Snake()
{
}
void Snake::move_up()
{
moveDirection = MV_UP;
if (snakeBody[0].topLeft().y() - nodeHeight <0 ){
// 超过屏幕上方
snakeBody.insert(0,QRectF(snakeBody[0].topLeft().x(),
snakeBody[0].topLeft().y() - nodeHeight + device->height(),nodeWidth,nodeHeight));
}else{
snakeBody.insert(0,QRectF(snakeBody[0].topLeft().x(),
snakeBody[0].topLeft().y() - nodeHeight,nodeWidth,nodeHeight));
}
// qDebug()<<"Device Height-----" << device->height();
// qDebug()<<"Device Width-----" << device->width();
qDebug()<<"Left point----"<< snakeBody[0].topLeft().y();
snakeBody.removeLast();
qDebug()<<"Snake Length----"<< snakeBody.length();
}
void Snake::move_down()
{
moveDirection = MV_DOWN;
if (snakeBody[0].topLeft().y() + nodeHeight > device->height() ){
// 超过屏幕下方
snakeBody.insert(0,QRectF(snakeBody[