Qt课程设计--贪吃蛇游戏设计 联系客服

发布时间 : 星期五 文章Qt课程设计--贪吃蛇游戏设计更新完毕开始阅读8b9ebf16f68a6529647d27284b73f242336c31d2

int s=data.size(); int ws=wdata.size(); int n;

//蛇头不能与蛇身重合 for(n=1;n

int bhx=data[n]->x(); int bhy=data[n]->y(); if(nhx==bhx&&nhy==bhy) {

QString word=\ Over!\\nEat yourself!So you die!\; GameOver(word); } }

//蛇头不能撞墙 for(n=1;n

int wx=wdata[n]->x(); int wy=wdata[n]->y(); if(nhx==wx&&nhy==wy) {

QString word=\ Over!\\nEat yourshit!So you die!\; GameOver(word); } }

//蛇头与食物重合

if(nhx==food->x()&&nhy==food->y()) {

if(data.size()>6) {

for(int cc=0;cc<5;cc++) {

data[data.size()-1]->setPalette(QPalette(QColor(130,130,130))); wdata.push_back(data[data.size()-1]); data.pop_back(); } }

13

food->hide(); food=getFood(); }

//蛇头位置超过边界 if(nhx<0) {

nhx=800; }

if(nhx>800) {

nhx=-20; }

if(nhy<0) {

nhy=480; }

if(nhy>480) {

nhy=-20; } //移动

s=data.size(); switch(dire) {

case d_up:nhy-=20;break; case d_down:nhy+=20;break; case d_left:nhx-=20;break; case d_right:nhx+=20;break; default:break; }

//后一个向前一个移动 for(int i=s-1;i>0;i--) {

data[i]->move(data[i-1]->x(),data[i-1]->y()); }

data[0]->move(nhx,nhy); }

14

//键盘操作

void deathsnake::keyPressEvent(QKeyEvent *e) {

if(e->key()==Qt::Key_Up) {

if(dire==d_down); else dire=d_up; }

else if(e->key()==Qt::Key_Down) {

if(dire==d_up); else dire=d_down; }

else if(e->key()==Qt::Key_Left) {

if(dire==d_right); else dire=d_left; }

else if(e->key()==Qt::Key_Right) {

if(dire==d_left); else dire=d_right; } else ; } //计时器

void deathsnake::timerEvent(QTimerEvent *e) {

sec++;

if(sec>9&&hou==0) {

min++;

jsq2->resize(128,128); jsq2->move(282,176); jsq->move(390,176); sec=0; clear=true;

15

}

if(sec>9&&hou!=0) {

min++; sec=0; }

if(min>9) {

hou++;

jsq3->resize(128,128); jsq3->move(228,176); jsq2->move(336,176); jsq->move(444,176); min=0; sec=0; }

jsq->setPixmap(QString::number(sec)+\); jsq2->setPixmap(QString::number(min)+\); jsq3->setPixmap(QString::number(hou)+\); if(time==20) {

QString word=\ win!\; GameOver(word); } time-=2;

timer->setInterval(time); data.push_back(snakeGrow()); if(clear==true&&wdata.size()>0) {

wdata[0]->hide(); wdata.pop_front(); } }

//游戏结束

void deathsnake::GameOver(QString go) {

QMessageBox msg;

16