霜~涵 2022-03-04 16:02 采纳率: 50%
浏览 79
已结题

QT做贪吃蛇动不起来

QT做贪吃蛇怎么动不起来(还没做完)
这是头文件
#ifndef SNAKE_H
#define SNAKE_H

#include
#include<qpainter.h>
namespace Ui {
class Snake;
}

class Snake : public QMainWindow
{
Q_OBJECT

public:
explicit Snake(QWidget *parent = 0);
~Snake();
void paintEvent(QPaintEvent *event);
void InitSnake();
private slots:
void Snake_update();

private:
Ui::Snake *ui;
QRect vSnakeRect;//声明一条蛇
void keyPressEvent(QKeyEvent *key);//定义键盘事件
QTimer *timer;//定时器
bool blsRun;//是否开始
int nDriection;//移动方向

};

#endif // SNAKE_H

这是源代码
#include "snake.h"
#include "ui_snake.h"
#include
#include<qrect.h>
#include
#include
Snake::Snake(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Snake)
{
ui->setupUi(this);
this->setGeometry(QRect(600,300,290,310));
}

Snake::~Snake()
{
delete ui;
}
void Snake::paintEvent(QPaintEvent event){
QPainter painter(this);
if(!blsRun)
InitSnake();
//画游戏的背景
//外墙
painter.setPen(Qt::black);//设置画笔颜色
painter.setBrush(Qt::gray);//设置填充颜色
painter.drawRect(15,15,260,260);
//内墙
painter.setPen(Qt::black);//设置画笔颜色
painter.setBrush(Qt::gray);//设置填充颜色
painter.drawRect(20,20,250,250);
//画格子
painter.setPen(Qt::blue);
for(int i=2;i<=27;i++)
{
painter.drawLine(20,i
10,270,i10);//横线
painter.drawLine(i
10,20,i*10,270);//竖线
}
//画蛇
painter.setPen(Qt::black);
painter.setBrush(Qt::green);
painter.drawRect(vSnakeRect);
}
void Snake::InitSnake(){
blsRun=true;
nDriection=2;//默认向下移动

QRect rect(100,70,10,10);//蛇的初始位置
vSnakeRect=rect;//将矩形赋值给蛇
timer=new QTimer(this);//设定计时器
timer->start(500);//设定时间500ms
connect(timer,SIGNAL(timeout()),SLOT(snake_update()));
//信号连接槽,发出信号的是timer,信号是timeout,执行的槽是Snake_update

}
void Snake::keyPressEvent(QKeyEvent *event){
QKeyEvent key=(QKeyEvent) event;
switch (key->key()){
case Qt::Key_Up:nDriection=1;
break;
case Qt::Key_Down:nDriection=2;
break;
case Qt::Key_Left:nDriection=3;
break;
case Qt::Key_Right:nDriection=4;
break;
default:;
}
}

void Snake::Snake_update(){
switch(nDriection)
{
case 1:
vSnakeRect.setTop(vSnakeRect.top()-10);
vSnakeRect.setBottom(vSnakeRect.bottom()-10);
break;
case 2:
vSnakeRect.setTop(vSnakeRect.top()+10);
vSnakeRect.setBottom(vSnakeRect.bottom()+10);
break;
case 3:
vSnakeRect.setLeft(vSnakeRect.left()-10);
vSnakeRect.setRight(vSnakeRect.right()-10);
break;
case 4:
vSnakeRect.setLeft(vSnakeRect.left()+10);
vSnakeRect.setRight(vSnakeRect.right()+10);

default:;
}
    update();//更新

}

  • 写回答

1条回答 默认 最新

  • ty94666 2022-03-04 16:15
    关注
    update();//更新
    

    改为this->update()
    试试看

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月5日
  • 已采纳回答 3月4日
  • 创建了问题 3月4日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改