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();
}

...全文
340 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklinux 2017-07-16
  • 打赏
  • 举报
回复
那是因为combox对象, radiobutton对象把输入焦点抢走了。 把它们设成不占用焦点就可以了:
ui->comboBox->setFocusPolicy(Qt::NoFocus);
打开链接下载源码: https://pan.quark.cn/s/4d098ab046d1 ### 基于内容推荐机制:个性化服务的关键基础 #### 阐述 在信息数字化急剧增长的时代背景下,如何从庞大的数据资源中筛选出用户真正关注的资讯,成为了一个亟待解决的挑战。推荐机制应运而生,致力于为用户提供个性化的服务,协助其有效管理信息过载的问题。依据《下一代推荐系统的方向:当前技术的综述与可能的拓展》一文,作者Gediminas Adomavicius和Alexander Tuzhilin全面地梳理了推荐系统领域,详尽介绍了当前推荐技术的三大主要类别:内容驱动、协同过滤以及混合推荐策略。 #### 内容驱动推荐机制深入解析 内容驱动推荐机制是一种通过审视用户的历史行为和偏好,结合项目(例如书籍、电影)的内容特征进行推荐的技术。这种方法的核心在于构建一个模型,该模型能够把握用户的兴趣并预测用户对未接触项目的可能偏好。具体而言,内容驱动推荐机制会采集用户的历史行为数据,诸如购买记录、浏览历史等,同时收集项目本身的属性信息,例如书籍的作者、主题、关键词,电影的导演、演员、类型等。通过比较用户已知喜好和项目属性之间的相似程度,系统可以向用户推荐与其过往兴趣相契合的新项目。 #### 技术要点与操作流程 内容驱动推荐机制通常包含以下几个环节: 1. **特征抽取**:从用户历史行为和项目特征中提取关键信息,构建特征向量。 2. **相似度评估**:运用余弦相似度、皮尔逊相关系数等方法计算用户与项目之间的相似程度。 3. **推荐产生**:根据相似度得分,为用户生成推荐清单。 4. **响应收集**:获取用户对推荐结果的反馈,持续优化模型参数,以提升推荐的精确度。 #### 优点与不...

24,850

社区成员

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

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