欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
用嵌入式ok6410實(shí)現(xiàn)坦克大戰(zhàn)源代碼
[打印本頁(yè)]
作者:
christian-gao
時(shí)間:
2017-7-20 10:36
標(biāo)題:
用嵌入式ok6410實(shí)現(xiàn)坦克大戰(zhàn)源代碼
這是我上學(xué)期的課程設(shè)計(jì),用嵌入式開(kāi)發(fā)板ok6410實(shí)現(xiàn)的坦克大戰(zhàn),花費(fèi)了一周的時(shí)間完成,有興趣的朋友可以看看。
0.png
(61.52 KB, 下載次數(shù): 69)
下載附件
2017-7-20 16:05 上傳
所有資料51hei提供下載:
tank.tar.gz
(4.92 MB, 下載次數(shù): 8)
2017-7-20 10:35 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
ok6410源程序如下:
#include "pub.h"
#include "tank.h"
#include <QtGui>
//#include <QKeyEvent>
#include "missile.h"
#include "tankclient.h"
#include "explode.h"
#include "wall.h"
#include <QKeyEvent>
QList<QImage> Tank::tankImgs;
Tank::Tank(int x,int y,int w,int h,TankClient* tc,bool good,int liveValue)
{
this->x=x;
this->y=y;
this->w=w;
this->h=h;
BU=BD=BL=BR=false;
this->tc=tc;
dir=STOP;
ptDir=U;
this->good=good;
live=true;
step=0;
xtemp=ytemp=0;
count=8;
this->liveValue=liveValue;
}
void Tank::drawTank(QPainter &p)
{
if(!live)
{
tc->etanks.removeOne(this);
return ;
}
if(dir!=STOP)
ptDir=dir;
switch(ptDir)
{
case U: p.drawImage(x,y,tankImgs[0]);break;
case D: p.drawImage(x,y,tankImgs[1]);break;
case L: p.drawImage(x,y,tankImgs[2]);break;
case R: p.drawImage(x,y,tankImgs[3]);break;
case LU: p.drawImage(x,y,tankImgs[4]);break;
case LD: p.drawImage(x,y,tankImgs[5]);break;
case RU: p.drawImage(x,y,tankImgs[6]);break;
case RD: p.drawImage(x,y,tankImgs[7]);break;
default:break;
}
p.setPen(Qt::yellow);
p.setBrush(Qt::black);
p.drawRect(x,y,25,5);
p.setBrush(Qt::red);
p.drawRect(x,y,liveValue/4,5);//畫(huà)坦克生命值
moveTank();
}
void Tank::keyPress(int key)
{
switch(key)
{
case Qt::Key_Up: BU=true;break;
case Qt::Key_Down: BD=true;break;
case Qt::Key_Left: BL=true;break;
case Qt::Key_Right: BR=true;break;
case Qt::Key_Return: fire();break;
case Qt::Key_K:
{
if(count>0)superfire();
count--;
if(count<=0)count=0;
break;
}
case Qt::Key_F2:
{
tc->step=0;
tc->start=!tc->start;
if(!(tc->start))//暫停/繼續(xù)
{
tc->button[1]->setText(QObject::tr("continue"));
}
break;
}
case Qt::Key_F1:
{
//重啟游戲
while(tc->missile.size())
tc->missile.removeOne(tc->missile[0]);
while(tc->etanks.size())
tc->etanks.removeOne(tc->etanks[0]);
while(tc->myWall.size())
tc->myWall.removeOne(tc->myWall[0]);
tc->AllObject();
tc->start=true;
tc->gameover=false;
break;
}
case Qt::Key_Escape:exit(0);break;//退出游戲
default:break;
}
if(BU&&!BD&&!BL&&!BR)dir=U;
else if(!BU&&BD&&!BL&&!BR)dir=D;
else if(!BU&&!BD&&BL&&!BR)dir=L;
else if(!BU&&!BD&&!BL&&BR)dir=R;
else if(BU&&!BD&&BL&&!BR)dir=LU;
else if(!BU&&BD&&BL&&!BR)dir=LD;
else if(BU&&!BD&&!BL&&BR)dir=RU;
else if(!BU&&BD&&!BL&&BR)dir=RD;
else dir=STOP;
}
void Tank::keyRelease(int key)
{
switch(key)
{
case Qt::Key_Up: BU=false;break;
case Qt::Key_Down: BD=false;break;
case Qt::Key_Left: BL=false;break;
case Qt::Key_Right: BR=false;break;
default:break;
}
if(BU&&!BD&&!BL&&!BR)dir=U;
else if(!BU&&BD&&!BL&&!BR)dir=D;
else if(!BU&&!BD&&BL&&!BR)dir=L;
else if(!BU&&!BD&&!BL&&BR)dir=R;
else if(BU&&!BD&&BL&&!BR)dir=LU;
else if(!BU&&BD&&BL&&!BR)dir=LD;
else if(BU&&!BD&&!BL&&BR)dir=RU;
else if(!BU&&BD&&!BL&&BR)dir=RD;
else dir=STOP;
}
void Tank::moveTank()
{
xtemp=x;
ytemp=y;
switch(dir)
{
case U: y-=5;break;
case D: y+=5;break;
case L: x-=5;break;
case R: x+=5;break;
case LU: x-=5;y-=5;break;
case LD: x-=5;y+=5;break;
case RU: x+=5;y-=5;break;
case RD: x+=5;y+=5;break;
default:break;
}
if(x<=0)x=0;
if(y<=0)y=0;
if(x>=TankClient::GAME_WIDTH-w)x=TankClient::GAME_WIDTH-w;
if(y>=TankClient::GAME_HEIGHT-h)y=TankClient::GAME_HEIGHT-h;
if(!good)
{
if(qrand()%20>18)fire();
if(step==0)
{
dir=Dir(qrand()%9);
step=qrand()%15+10;
}
step--;
}
}
void Tank::fire()
{
int mw=10;
int mh=10;
int mx=x+w/2-mw/2;
int my=y+h/2-mh/2;
Missile* m=new Missile(mx,my,mw,mh,ptDir,tc,good);
tc->missile.push_back(m);
}
void Tank::fire(Dir tdir)
{
int mw=10;
int mh=10;
int mx=x+w/2-mw/2;
int my=y+h/2-mh/2;
Missile* m=new Missile(mx,my,mw,mh,tdir,tc,good);
tc->missile.push_back(m);
}
void Tank::superfire()//朝八個(gè)方向開(kāi)火
{
for(int i=0;i<8;i++)
fire(Dir(i));
}
bool Tank::TankHitWall(Wall* w) //檢測(cè)坦克和墻壁是否碰撞
{
if(live&&getRect().intersects(w->getRect()))
{
x=xtemp;//回到上一次的位置
y=ytemp;
return true;
}
return false;
}
void Tank::TankHitWalls(QList<Wall*> ws)
{
for(int i=0;i<ws.size();i++)
{
if(TankHitWall(ws[i]))
return;
}
}
void Tank::init()
{
tankImgs.push_back(QImage(":/images/etU.gif"));
tankImgs.push_back(QImage(":/images/etD.gif"));
tankImgs.push_back(QImage(":/images/etL.gif"));
tankImgs.push_back(QImage(":/images/etR.gif"));
tankImgs.push_back(QImage(":/images/etLU.gif"));
tankImgs.push_back(QImage(":/images/etLD.gif"));
tankImgs.push_back(QImage(":/images/etRU.gif"));
tankImgs.push_back(QImage(":/images/etRD.gif"));
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1