Qt C++ 贪吃蛇。上下左右健只设置了蛇对应的移动,为什么在添加三个radiobutton或下拉列表来选择游戏难度的时候,按上下键蛇并不动反而是按钮的值变呢

qq_34139528 2017-07-16 12:43:50
#include "snake.h"
#include "ui_snake.h"
#include <QPainter>
#include <QKeyEvent>
#define SNAKE_NODE_WIDTH 15
#define SNAKE_NODE_HEIGHT 15

snake::snake(QWidget *parent) :
QWidget(parent),
ui(new Ui::snake)
{
ui->setupUi(this);
snakeBody<<QRect(105,105,SNAKE_NODE_WIDTH,SNAKE_NODE_HEIGHT)
<<QRect(120,105,SNAKE_NODE_WIDTH,SNAKE_NODE_HEIGHT)
<<QRect(135,105,SNAKE_NODE_WIDTH,SNAKE_NODE_HEIGHT)
<<QRect(150,105,SNAKE_NODE_WIDTH,SNAKE_NODE_HEIGHT);
food=QRect((qrand()%(width()/SNAKE_NODE_WIDTH))*SNAKE_NODE_WIDTH,
(qrand()%(height()/SNAKE_NODE_HEIGHT))*SNAKE_NODE_HEIGHT,
SNAKE_NODE_WIDTH,
SNAKE_NODE_HEIGHT);
curDir=RIGHT;
rank0=1000;
startTimer(rank0);

}

snake::~snake()
{
delete ui;
}
void snake::paintEvent(QPaintEvent *e){
QPainter p(this);
foreach(QRect r,snakeBody){//画出蛇身
p.drawRect(r);
}
p.drawRect(food);//画出食物
//head=snakeBody.first();
if(ui->easy->isChecked())
rank0=1000;
if(ui->common->isChecked())
rank0=500;
if(ui->difficult->isChecked())
rank0=100;

}
void snake::timerEvent(QTimerEvent *e){
head=snakeBody.first();
//head.setX(snakeBody.last().x()+SNAKE_NODE_WIDTH);
//head.setY(snakeBody.last().y());
switch (curDir) {
case UP:head.setX(snakeBody.last().x());
head.setY(snakeBody.last().y()-SNAKE_NODE_HEIGHT);
break;
case DOWN:head.setX(snakeBody.last().x());
head.setY(snakeBody.last().y()+SNAKE_NODE_HEIGHT);
break;
case LEFT:head.setX(snakeBody.last().x()-SNAKE_NODE_WIDTH);
head.setY(snakeBody.last().y());
break;
case RIGHT:head.setX(snakeBody.last().x()+SNAKE_NODE_WIDTH);
head.setY(snakeBody.last().y());
break;
}

head.setSize(QSize(SNAKE_NODE_WIDTH,SNAKE_NODE_HEIGHT));
if(head!=food){
snakeBody.takeFirst();
}
else{
food=QRect((qrand()%(width()/SNAKE_NODE_WIDTH))*SNAKE_NODE_WIDTH,
(qrand()%(height()/SNAKE_NODE_HEIGHT))*SNAKE_NODE_HEIGHT,
SNAKE_NODE_WIDTH,
SNAKE_NODE_HEIGHT);
}
snakeBody.append(head);
ui->score->display(snakeBody.count()*10);
update();
}
void snake::keyPressEvent(QKeyEvent *e){
if(e->key()==Qt::Key_Up){
curDir=UP;
}
if(e->key()==Qt::Key_Down){
curDir=DOWN;
}
if(e->key()==Qt::Key_Left){
curDir=LEFT;
}
if(e->key()==Qt::Key_Right){
curDir=RIGHT;
}
update();
}

...全文
275 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklinux 2017-07-16
  • 打赏
  • 举报
回复
那是因为combox对象, radiobutton对象把输入焦点抢走了。 把它们设成不占用焦点就可以了:
ui->comboBox->setFocusPolicy(Qt::NoFocus);

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧