QT实训贪吃蛇程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include"mainwidget.h"
#include"ui_mainwidget.h"
mainWidget::mainWidget(QWidget*parent): QWidget(parent),
ui(new Ui::mainWidget)
{
ui->setupUi(this);
initWidget();
}
mainWidget::~mainWidget()
{
delete ui;
}
//1.初始化组件面板
void mainWidget::initWidget()
{
//1-1.创建食物
qsrand(QTime::currentTime().msec());
createFood();
//1-2.创建蛇
m_snake.initSnake();
//1-3.创建定时器
m_timer=new QTimer(this);
connect(m_timer,SIGNAL(timeout()),
this,SLOT(Controller()));
//1-4.获得强聚焦
setFocusPolicy(Qt::StrongFocus);
//1-5.开始按钮初始化
m_bStart=false;
//1-6.初始化分数
m_iScore=0;
ui->scorelcd->display(m_iScore);
//1-7.初始化等级
m_iLevel=1;
ui->levellcd->display(m_iLevel);
return;
}
//2.生成食物
void mainWidget::createFood()
{
int x=0;
int y=0;
while(1)
{
x=qrand()%32;//640/20=32
y=qrand()%20;//400/20=20
QPoint pos(x,y);
if(!m_snake.isSnake(pos))
break;
}
m_Food=QPoint(x,y);
return;
}
//3.计算蛇的新位置
QPoint mainWidget::newPos()
{
QPoint offset(0,0);
switch(m_snake.getDirect())
{
case D_UP:offset=QPoint(0,-1);break;
case D_DOWN:offset=QPoint(0,1);break;
case D_LEFT:offset=QPoint(-1,0);break;
case D_RIGHT:offset=QPoint(1,0);break;
}
//新坐标计算
QPoint pos=m_snake.getHead()+offset;
return pos;
}
//4.游戏结束
void mainWidget::gameover()
{
QMessageBox::information(
NULL,"gameover","gameover");
close();
return;
}
//5.升级处理
void mainWidget::UpLevel()
{
int iLevel=m_iScore/100+1;
if(iLevel>m_iLevel)
{
//1.数值处理
m_iLevel=iLevel;
ui->levellcd->display(m_iLevel);
//2.速度处理
int speed=m_snake.getSpeed();
speed-=50;
m_snake.setSpeed(speed);
m_timer->start(speed);
}
}
//绘图事件
void mainWidget::paintEvent(QPaintEvent*)
{
QPainter painter(this);
//1.绘制游戏区域
QRect rect(10,10,640,400);
painter.fillRect(rect,Qt::white);
//2.绘制食物
int x=m_Food.x();
int y=m_Food.y();
QRect rectFood(x*20+10,y*20+10,20,20);
painter.fillRect(rectFood,Qt::red);
//3.绘制蛇
m_snake.drawSnake(painter);
return;
}
//键盘事件
void mainWidget::keyPressEvent(QKeyEvent*event) {
//获得方向值
int iDirect=m_snake.getDirect();
//捕获用户按下的键值