QT实训贪吃蛇程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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();

//捕获用户按下的键值

相关文档
最新文档