用easy图形库做一个简单的c++小游戏—简单版飞机大战

某大一学生,无奈在家上网课,慌得无聊。无意间认识了easyx图形库,便有了新的想法,搞一个飞机大战。当时每天写一点,日积月累,也就完成了。

以下为某大一学生,学习了半年c++以及一些课外知识所实现的:(其实课上学不了多少东西,很多知识都要课外自学的)

开发环境:visual c++6.0
库:easyx图形库 下载地址>>> (https://easyx.cn/downloads/)

我当初分成6步实现(瞎设计的,其实就是想到啥写啥):

下面附上每一段实现的图片效果以及源代码。

1.首先实现人物的移动:

人物的移动很简单,加个“conio.h”头文件,根据ascii码判断就得了。

这段代码很简单:

#include <iostream>
#include <graphics.h>
#include <conio.h>
using namespace std;int main(){int x=20;int y=20;int s[50][50];for(int i=0;i<50;i++){for(int j=0;j<50;j++){s[i][j]=0;}}initgraph(500,500);BeginBatchDraw();while(1){s[x][y]=1;Sleep(50);setfillcolor(WHITE);solidrectangle(0,0,500,500);if(GetKeyState(65)<0&&x>1)x--;//a,向左if(GetKeyState(68)<0&&x<49)x++;//d,向右if(GetKeyState(83)<0&&y<49)y++;//s,向下if(GetKeyState(87)<0&&y>1)y--;//w,向上for(i=0;i<50;i++){for(int j=0;j<50;j++){if(s[i][j]==1){s[i][j]=0;setfillcolor(GREEN);solidrectangle((i-1)*10,(j-1)*10,i*10,j*10);}//if}//for}//forFlushBatchDraw();}//while
}//main

2.其次就是增加子弹的发射

加个数组来整子弹的数据

这段代码可还行:(改变不大)

#include <iostream>
#include <graphics.h>
#include <conio.h>
using namespace std;int main(){int bid(0),btim(0);int mbx[500];int mby[500];int x=20;int y=20;int s[50][50];for(int i=0;i<50;i++){for(int j=0;j<50;j++){s[i][j]=0;}}initgraph(500,500);BeginBatchDraw();while(1){btim++;s[x][y]=1;Sleep(50);setfillcolor(WHITE);solidrectangle(0,0,500,500);if(GetKeyState(65)<0&&x>1)x--;//a,向左if(GetKeyState(68)<0&&x<49)x++;//d,向右if(GetKeyState(83)<0&&y<49)y++;//s,向下if(GetKeyState(87)<0&&y>1)y--;//w,向上if(GetKeyState(74)<0&&btim>3){//攻击btim=0;mbx[bid]=x;mby[bid]=y-1;bid++;}for(i=0;i<bid;i++){mby[i]--;setfillcolor(RED);solidcircle(mbx[i]*10-5,mby[i]*10,2);if(mby[i]==0)mbx[i]=-999;}//iffor(i=0;i<50;i++){for(int j=0;j<50;j++){if(s[i][j]==1){s[i][j]=0;setfillcolor(GREEN);solidrectangle((i-1)*10,(j-1)*10,i*10,j*10);}//if}//for}//forFlushBatchDraw();}//while
}//main

3.再其次就是先增加一个boss,加上武器的伤害设置和血量设置,同时新含增加了一个武器(激光)

设一个随机移动的物体,另外加点判断

附上代码:

#include <iostream>
#include <graphics.h>
#include <conio.h>
#include <time.h>
using namespace std;int main(){srand((int)time(0));int bid(0),btim(0),mlx(0),mly(0),bossmove(0),bosstim(0),bosshp(200),mhp(20);int mbx[50],mby[50];int x=20,y=40;int bossx=30,bossy=5;char c[10];int s[50][50];for(int i=0;i<50;i++){for(int j=0;j<50;j++){s[i][j]=0;}}initgraph(500,500);BeginBatchDraw();while(1){btim++;bosstim++;s[x][y]=1;s[bossx][bossy]=-1;Sleep(50);setfillcolor(WHITE);solidrectangle(0,0,500,500);if(bosstim>5){bosstim=0;bossmove=-1+rand()%3;if(bossmove==-1&&bossx>2)bossx-=1;if(bossmove==1&&bossx<48)bossx+=1;}//ifif(GetKeyState(75)<0){//激光攻击mlx=x;mly=y-1;setfillcolor(LIGHTGRAY);solidrectangle((mlx-1)*10,10,mlx*10,mly*10);if(mlx==bossx||mlx==bossx+1){settextcolor(RED);settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);outtextxy((bossx-3)*10,(bossy-1)*10,"-1");bosshp-=1;}//if}//ifif(GetKeyState(65)<0&&x>1)x--;//a,向左if(GetKeyState(68)<0&&x<49)x++;//d,向右if(GetKeyState(83)<0&&y<49)y++;//s,向下if(GetKeyState(87)<0&&y>1)y--;//w,向上if(GetKeyState(74)<0&&btim>3){//子弹攻击btim=0;mbx[bid]=x;mby[bid]=y-1;bid++;if(bid>=50)bid=0;}for(i=0;i<50;i++){//子弹攻击mby[i]--;setfillcolor(RED);solidcircle(mbx[i]*10-5,mby[i]*10,2);if(mby[i]==0)mbx[i]=-999;if(mbx[i]==bossx&&mby[i]==bossy){mbx[i]=-999;settextcolor(RED);settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);outtextxy((bossx-4)*10,(bossy-1)*10,"-4");bosshp-=4;}//ifif(mbx[i]==bossx+1&&mby[i]==bossy){mbx[i]=-999;settextcolor(RED);settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);outtextxy((bossx-4)*10,(bossy-1)*10,"-4");bosshp-=4;}//if}//for for(i=0;i<50;i++){//物质描绘for(int j=0;j<50;j++){if(s[i][j]==1){s[i][j]=0;setfillcolor(GREEN);solidrectangle((i-1)*10,(j-1)*10,i*10,j*10);}//ifif(s[i][j]==-1){s[i][j]=0;setfillcolor(BLACK);solidrectangle((i-1)*10,(j-1)*10,(i+1)*10,(j+1)*10);}//if}//for}//forsettextcolor(RED);//boss血量的描绘settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);itoa(bosshp,c,10);outtextxy((bossx-1)*10,(bossy-3)*10,c);itoa(mhp,c,10);outtextxy((x-1)*10,(y-3)*10,c);FlushBatchDraw();if(bosshp<=0)break;}//whilereturn 0;
}//main

4.一个boss肯定不够打的嘛,再外加两个炮台,增加上敌方的子弹设置(随机发射)

外设两个不动的物体。再来加数组来整敌方的子弹。(重点加上数学函数,实现子弹的随机)

附上代码:

#include <iostream>
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <math.h>
using namespace std;float cot(float angle){//定义cot函数return 1/tan(angle*1.0/180*3.1415926);//弧度=角度*1/180*pi
}
float *rexy(float angle){//角度判断static float re[2];if(angle>360)angle-=360;if(angle<0)angle+=360;float co,xa,ya;if(angle==0){xa=0;ya=-5;}if(angle<90){co=cot(90-angle);ya=-1*sqrt(25*1.0/(1+co*co));xa=-1*co*ya;//co=xa/ya}if(angle==90){ya=0;xa=5;}if(angle>90&&angle<180){co=cot(angle-90);ya=sqrt(25*1.0/(1+co*co));xa=co*ya;}if(angle==180){xa=0;ya=5;}if(angle>180&&angle<270){co=cot(270-angle);ya=sqrt(25*1.0/(1+co*co));xa=-1*co*ya;    }if(angle==270){xa=-5;ya=0;}if(angle>270&&angle<360){co=cot(angle-270);ya=-1*sqrt(25*1.0/(1+co*co));xa=co*ya;}if(angle==360){xa=0;ya=-5;}re[0]=xa;re[1]=ya;return re;
}int main(){//主函数,战斗界面srand((int)time(0));int bid(0),btim(0),mlx(0),mly(0),bossmove(0),bosstim(0),bosshp(200),bossbid(0),mhp(20);int smallforthp1(100),smallforthp2(100),smallfortbid1(0),smallfortbid2(0);int mbx[50],mby[50];//人物子弹变量int bossbx[100],bossby[100],bossbxa[100],bossbya[100];//boss子弹变量int smallfortbx1[100],smallfortby1[100],smallfortbxa1[100],smallfortbya1[100];//左炮塔子弹变量int    smallfortbx2[100],smallfortby2[100],smallfortbxa2[100],smallfortbya2[100];//右炮塔子弹变量int x=20,y=40;//人物初始坐标int bossx=25,bossy=5;//boss初始坐标int smallfortx1=8,smallforty1=8;//左炮塔初始坐标int smallfortx2=42,smallforty2=8;//右炮塔初始坐标bool a1=true,a2=true,a3=true;char c[10];int s[50][50];bool weapon=true;for(int i=0;i<50;i++){for(int j=0;j<50;j++){s[i][j]=0;}//for}//forinitgraph(500,500);BeginBatchDraw();while(1){btim++;bosstim++;s[x][y]=1;s[bossx][bossy]=-1;Sleep(50);setfillcolor(WHITE);solidrectangle(0,0,500,500);if(bosstim>5){//boss移动bosstim=0;bossmove=-1+rand()%3;if(bossmove==-1&&bossx>2)bossx-=1;if(bossmove==1&&bossx<48)bossx+=1;}//ifif(GetKeyState(75)<0){//激光攻击mlx=x;mly=y-1;setfillcolor(LIGHTGRAY);solidrectangle((mlx-1)*10,10,mlx*10,mly*10);settextcolor(RED);settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);if(mlx==bossx&&mly>=bossy-1&&a3==true||mlx==bossx+1&&mly>=bossy-1&&a3==true){//激光打boss的伤害               outtextxy((bossx-3)*10,(bossy-1)*10,"-1");bosshp-=1;}//ifif(mlx==smallfortx1+1&&mly>=smallforty1&&a1==true){outtextxy((smallfortx1-2)*10,smallforty1*10,"-1");//激光打左炮塔的伤害smallforthp1-=1;}//ifif(mlx==smallfortx2+1&&mly>=smallforty2&&a2==true){outtextxy((smallfortx2-2)*10,smallforty2*10,"-1");//激光打左炮塔的伤害smallforthp2-=1;}//if}//ifif(GetKeyState(65)<0&&x>1)x--;//a,向左if(GetKeyState(68)<0&&x<49)x++;//d,向右if(GetKeyState(83)<0&&y<49)y++;//s,向下if(GetKeyState(87)<0&&y>1)y--;//w,向上if(GetKeyState(74)<0&&btim>3){//子弹攻击btim=0;mbx[bid]=x;mby[bid]=y-1;bid++;if(bid>=50)bid=0;}for(i=0;i<50;i++){//子弹攻击mby[i]--;setfillcolor(RED);solidcircle(mbx[i]*10-5,mby[i]*10,2);if(mby[i]==0)mbx[i]=-999;if(mbx[i]==bossx&&mby[i]==bossy&&a3==true||mbx[i]==bossx+1&&mby[i]==bossy&&a3==true){//子弹打boss的伤害mbx[i]=-999;settextcolor(RED);settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);outtextxy((bossx-4)*10,(bossy-1)*10,"-4");bosshp-=4;}//ifif(mbx[i]==smallfortx1+1&&mby[i]==smallforty1&&a1==true){//子弹打左炮塔的伤害mbx[i]=-999;settextcolor(RED);settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);outtextxy((smallfortx1-2)*10,smallforty1*10,"-4");smallforthp1-=4;}//ifif(mbx[i]==smallfortx2+1&&mby[i]==smallforty2&&a2==true){//子弹打右炮塔的伤害mbx[i]=-999;settextcolor(RED);settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);outtextxy((smallfortx2-2)*10,smallforty2*10,"-4");smallforthp2-=4;}//if}//for    for(i=0;i<50;i++){//物质描绘for(int j=0;j<50;j++){//人物描绘if(s[i][j]==1){s[i][j]=0;setfillcolor(GREEN);solidrectangle((i-1)*10,(j-1)*10,i*10,j*10);}//ifif(s[i][j]==-1&&a3==true){//boss的描绘s[i][j]=0;setfillcolor(BLACK);solidrectangle((i-1)*10,(j-1)*10,(i+1)*10,(j+1)*10);}//if}//for}//forint r=rand()%360;//方向随机if(a3==true){//boss子弹设置float *bossrexy;bossbid+=1;bossbx[bossbid]=bossx*10;bossby[bossbid]=bossy*10;bossrexy=rexy(r);bossbxa[bossbid]=*bossrexy;bossbya[bossbid]=*(bossrexy+1);}//ifif(bossbid>=100)bossbid=0;for(i=0;i<100;i++){bossbx[i]=bossbx[i]+bossbxa[i];bossby[i]=bossby[i]+bossbya[i];setfillcolor(BLACK);solidcircle(bossbx[i],bossby[i],2);if(bossbx[i]<=0||bossbx[i]>=500||bossby[i]<=0||bossby[i]>=500)bossbx[i]=-999;if(bossbx[i]>=(x-1)*10&&bossbx[i]<=x*10&&bossby[i]>=(y-1)*10&&bossby[i]<=y*10){bossbx[i]=-999;mhp-=1;}//if}//forif(a1==true){//左炮塔子弹设置float *smallfortbid1rexy;smallfortbid1+=1;smallfortbx1[smallfortbid1]=smallfortx1*10;smallfortby1[smallfortbid1]=smallforty1*10;smallfortbid1rexy=rexy(r);smallfortbxa1[smallfortbid1]=*smallfortbid1rexy;smallfortbya1[smallfortbid1]=*(smallfortbid1rexy+1);}//ifif(smallfortbid1>=100)smallfortbid1=0;for(i=0;i<100;i++){smallfortbx1[i]=smallfortbx1[i]+smallfortbxa1[i];smallfortby1[i]=smallfortby1[i]+smallfortbya1[i];setfillcolor(BLACK);solidcircle(smallfortbx1[i],smallfortby1[i],2);if(smallfortbx1[i]<=0||smallfortbx1[i]>=500||smallfortby1[i]<=0||smallfortby1[i]>=500)smallfortbx1[i]=-999;if(smallfortbx1[i]>=(x-1)*10&&smallfortbx1[i]<=x*10&&smallfortby1[i]>=(y-1)*10&&smallfortby1[i]<=y*10){smallfortbx1[i]=-999;mhp-=1;}//if}//forif(a2==true){//右炮塔子弹设置float *smallfortbid2rexy;smallfortbid2+=1;smallfortbx2[smallfortbid2]=smallfortx2*10;smallfortby2[smallfortbid2]=smallforty2*10;smallfortbid2rexy=rexy(r);smallfortbxa2[smallfortbid2]=*smallfortbid2rexy;smallfortbya2[smallfortbid2]=*(smallfortbid2rexy+1);}//ifif(smallfortbid2>=100)smallfortbid2=0;for(i=0;i<100;i++){smallfortbx2[i]=smallfortbx2[i]+smallfortbxa2[i];smallfortby2[i]=smallfortby2[i]+smallfortbya2[i];setfillcolor(BLACK);solidcircle(smallfortbx2[i],smallfortby2[i],2);if(smallfortbx2[i]<=0||smallfortbx2[i]>=500||smallfortby2[i]<=0||smallfortby2[i]>=500)smallfortbx2[i]=-999;if(smallfortbx2[i]>=(x-1)*10&&smallfortbx2[i]<=x*10&&smallfortby2[i]>=(y-1)*10&&smallfortby2[i]<=y*10){smallfortbx2[i]=-999;mhp-=1;}//if}//forsetfillcolor(BLACK);settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);if(a1==true){//左炮塔描绘    solidrectangle(smallfortx1*10,smallforty1*10,(smallfortx1+1)*10,(smallforty1+1)*10);itoa(smallforthp1,c,10);outtextxy(smallfortx1*10-5,(smallforty1-2)*10,c);     }//ifif(a2==true){//右炮塔描绘solidrectangle(smallfortx2*10,smallforty2*10,(smallfortx2+1)*10,(smallforty2+1)*10);itoa(smallforthp2,c,10);outtextxy(smallfortx2*10-5,(smallforty2-2)*10,c);    }//ifsettextcolor(RED);if(a3==true){itoa(bosshp,c,10);//boss血量的描绘outtextxy((bossx-1)*10,(bossy-3)*10,c);}//ifitoa(mhp,c,10);//人物血量描绘outtextxy((x-1)*10,(y-3)*10,c);FlushBatchDraw();if(smallforthp1<=0)a1=false;//左炮塔血量小于0时损坏if(smallforthp2<=0)a2=false;//右炮塔血量小于0时损坏if(bosshp<=0)a3=false;//boss血量小于0时死亡if(a1==false&&a2==false&&a3==false)break;//所有敌人消灭后胜利if(mhp<=0)break;//我的血量小于0时退出}//whilereturn 0;
}//main

完成到这里也就差不多了,再美化一下就可以了

5.增加图片,再把开始界面,死亡界面,胜利界面整一下

把函数整理一下,加上点图片(乱搜的)


这时候一个简易版的飞机大战就完成啦!!!(原本还想增加敌方飞机的更新出现,但是就没有然后了)。

附上最后实现的代码:

#include <iostream>
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <math.h>
using namespace std;
int hphp=0;
MOUSEMSG m;
bool a1=true,a2=true,a3=true;//a1是左炮塔,a2是右炮塔,a3是bossfloat cot(float angle){//定义cot函数return 1/tan(angle*1.0/180*3.1415926);//弧度=角度*1/180*pi
}
float *rexy(float angle){//角度判断,随机子弹static float re[2];if(angle>360)angle-=360;if(angle<0)angle+=360;float co,xa,ya;if(angle==0){xa=0;ya=-5;}if(angle<90){co=cot(90-angle);ya=-1*sqrt(25*1.0/(1+co*co));xa=-1*co*ya;//co=xa/ya}if(angle==90){ya=0;xa=5;}if(angle>90&&angle<180){co=cot(angle-90);ya=sqrt(25*1.0/(1+co*co));xa=co*ya;}if(angle==180){xa=0;ya=5;}if(angle>180&&angle<270){co=cot(270-angle);ya=sqrt(25*1.0/(1+co*co));xa=-1*co*ya;    }if(angle==270){xa=-5;ya=0;}if(angle>270&&angle<360){co=cot(angle-270);ya=-1*sqrt(25*1.0/(1+co*co));xa=co*ya;}if(angle==360){xa=0;ya=-5;}re[0]=xa;re[1]=ya;return re;
}void initial_interface(){//初始界面initgraph(500,500);BeginBatchDraw();do{setfillcolor(WHITE);solidrectangle(0,0,500,500);settextcolor(BLUE);settextstyle(50,0,"宋体");setbkmode(TRANSPARENT);outtextxy(140,100,"飞机大战");settextstyle(20,0,"宋体");outtextxy(200,150,"biubiubiu");setfillcolor(LIGHTGRAY);solidrectangle(190,200,300,230);solidrectangle(190,250,300,280);settextcolor(BLUE);settextstyle(20,0,"宋体");outtextxy(205,205,"极限模式");outtextxy(205,255,"普通模式");m = GetMouseMsg();if(m.x>=190&&m.x<=300&&m.y>=200&&m.y<=230){setfillcolor(DARKGRAY);solidrectangle(190,200,300,230);outtextxy(205,205,"极限模式");}if(m.mkLButton==true&&m.x>=190&&m.x<=300&&m.y>=200&&m.y<=230){hphp=1;break;}if(m.x>=190&&m.x<=300&&m.y>=250&&m.y<=280){setfillcolor(DARKGRAY);solidrectangle(190,250,300,280);outtextxy(205,255,"普通模式");}if(m.mkLButton==true&&m.x>=190&&m.x<=300&&m.y>=250&&m.y<=280){hphp=20;break;}FlushBatchDraw();}while(1);
}void win_interface(){//胜利界面initgraph(500,500);BeginBatchDraw();setfillcolor(WHITE);solidrectangle(0,0,500,500);settextcolor(BLUE);settextstyle(40,0,"宋体");setbkmode(TRANSPARENT);outtextxy(100,100,"恭喜你获得胜利");FlushBatchDraw();Sleep(3000);
}void lose_interface(){//失败界面initgraph(500,500);BeginBatchDraw();setfillcolor(WHITE);solidrectangle(0,0,500,500);settextcolor(BLUE);settextstyle(40,0,"宋体");setbkmode(TRANSPARENT);outtextxy(80,100,"很遗憾,再接再厉");FlushBatchDraw();Sleep(3000);
}void fighting_interface(){//战斗界面srand((int)time(0));IMAGE img1,img2,img3;int bid(0),btim(0),mlx(0),mly(0),bossmove(0),bosstim(0),bosshp(200),bossbid(0),mhp(hphp);int smallforthp1(100),smallforthp2(100),smallfortbid1(0),smallfortbid2(0);int mbx[50],mby[50];//人物子弹变量int bossbx[100],bossby[100],bossbxa[100],bossbya[100];//boss子弹变量int smallfortbx1[100],smallfortby1[100],smallfortbxa1[100],smallfortbya1[100];//左炮塔子弹变量int smallfortbx2[100],smallfortby2[100],smallfortbxa2[100],smallfortbya2[100];//右炮塔子弹变量int x=20,y=40;//人物初始坐标int bossx=25,bossy=5;//boss初始坐标int smallfortx1=8,smallforty1=8;//左炮塔初始坐标int smallfortx2=42,smallforty2=8;//右炮塔初始坐标char c[10];int s[50][50];bool weapon=true;for(int i=0;i<50;i++){for(int j=0;j<50;j++){s[i][j]=0;}//for}//forBeginBatchDraw();while(1){btim++;bosstim++;s[x][y]=1;s[bossx][bossy]=-1;Sleep(50);setfillcolor(WHITE);solidrectangle(0,0,500,500);if(bosstim>5){//boss移动bosstim=0;bossmove=-1+rand()%3;if(bossmove==-1&&bossx>2)bossx-=1;if(bossmove==1&&bossx<48)bossx+=1;}//ifif(GetKeyState(75)<0){//激光攻击mlx=x;mly=y-1;setfillcolor(LIGHTBLUE);solidrectangle((mlx-1)*10+3,10,mlx*10-3,mly*10);settextcolor(RED);settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);if(mlx==bossx&&mly>=bossy-1&&a3==true||mlx==bossx+1&&mly>=bossy-1&&a3==true){//激光打boss的伤害             outtextxy((bossx-3)*10,(bossy-1)*10,"-1");bosshp-=1;}//ifif(mlx==smallfortx1+1&&mly>=smallforty1&&a1==true){outtextxy((smallfortx1-2)*10,smallforty1*10,"-1");//激光打左炮塔的伤害smallforthp1-=1;}//ifif(mlx==smallfortx2+1&&mly>=smallforty2&&a2==true){outtextxy((smallfortx2-2)*10,smallforty2*10,"-1");//激光打左炮塔的伤害smallforthp2-=1;}//if}//ifif(GetKeyState(65)<0&&x>1)x--;//a,向左if(GetKeyState(68)<0&&x<49)x++;//d,向右if(GetKeyState(83)<0&&y<49)y++;//s,向下if(GetKeyState(87)<0&&y>1)y--;//w,向上if(GetKeyState(74)<0&&btim>3){//子弹攻击btim=0;mbx[bid]=x;mby[bid]=y-1;bid++;if(bid>=50)bid=0;}for(i=0;i<50;i++){//子弹攻击mby[i]--;setfillcolor(RED);solidcircle(mbx[i]*10-5,mby[i]*10,2);if(mby[i]==0)mbx[i]=-999;if(mbx[i]==bossx&&mby[i]==bossy&&a3==true||mbx[i]==bossx+1&&mby[i]==bossy&&a3==true){//子弹打boss的伤害mbx[i]=-999;settextcolor(RED);settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);outtextxy((bossx-4)*10,(bossy-1)*10,"-4");bosshp-=4;}//ifif(mbx[i]==smallfortx1+1&&mby[i]==smallforty1&&a1==true){//子弹打左炮塔的伤害mbx[i]=-999;settextcolor(RED);settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);outtextxy((smallfortx1-2)*10,smallforty1*10,"-4");smallforthp1-=4;}//ifif(mbx[i]==smallfortx2+1&&mby[i]==smallforty2&&a2==true){//子弹打右炮塔的伤害mbx[i]=-999;settextcolor(RED);settextstyle(15,0,"宋体");setbkmode(TRANSPARENT);outtextxy((smallfortx2-2)*10,smallforty2*10,"-4");smallforthp2-=4;}//if}//for    for(i=0;i<50;i++){//物质描绘for(int j=0;j<50;j++){//人物描绘if(s[i][j]==1){s[i][j]=0;loadimage(&img1,".\\飞机.jpg",10,10);putimage((i-1)*10,(j-1)*10,&img1);}//ifif(s[i][j]==-1&&a3==true){//boss的描绘s[i][j]=0;loadimage(&img2,".\\敌机1.jpg",20,20);putimage((i-1)*10,(j-1)*10,&img2);}//if}//for}//forint r=rand()%360;//方向随机if(a3==true){//boss子弹设置float *bossrexy;bossbid+=1;bossbx[bossbid]=bossx*10;bossby[bossbid]=bossy*10;bossrexy=rexy(r);bossbxa[bossbid]=*bossrexy;bossbya[bossbid]=*(bossrexy+1);}//ifif(bossbid>=100)bossbid=0;for(i=0;i<100;i++){bossbx[i]=bossbx[i]+bossbxa[i];bossby[i]=bossby[i]+bossbya[i];setfillcolor(BLACK);solidcircle(bossbx[i],bossby[i],2);if(bossbx[i]<=0||bossbx[i]>=500||bossby[i]<=0||bossby[i]>=500)bossbx[i]=-999;if(bossbx[i]>=(x-1)*10&&bossbx[i]<=x*10&&bossby[i]>=(y-1)*10&&bossby[i]<=y*10){bossbx[i]=-999;mhp-=1;}//if}//forif(a1==true){//左炮塔子弹设置float *smallfortbid1rexy;smallfortbid1+=1;smallfortbx1[smallfortbid1]=smallfortx1*10;smallfortby1[smallfortbid1]=smallforty1*10;smallfortbid1rexy=rexy(r);smallfortbxa1[smallfortbid1]=*smallfortbid1rexy;smallfortbya1[smallfortbid1]=*(smallfortbid1rexy+1);}//ifif(smallfortbid1>=100)smallfortbid1=0;for(i=0;i<100;i++){smallfortbx1[i]=smallfortbx1[i]+smallfortbxa1[i];smallfortby1[i]=smallfortby1[i]+smallfortbya1[i];setfillcolor(BLACK);solidcircle(smallfortbx1[i],smallfortby1[i],2);if(smallfortbx1[i]<=0||smallfortbx1[i]>=500||smallfortby1[i]<=0||smallfortby1[i]>=500)smallfortbx1[i]=-999;if(smallfortbx1[i]>=(x-1)*10&&smallfortbx1[i]<=x*10&&smallfortby1[i]>=(y-1)*10&&smallfortby1[i]<=y*10){smallfortbx1[i]=-999;mhp-=1;}//if}//forif(a2==true){//右炮塔子弹设置float *smallfortbid2rexy;smallfortbid2+=1;smallfortbx2[smallfortbid2]=smallfortx2*10;smallfortby2[smallfortbid2]=smallforty2*10;smallfortbid2rexy=rexy(r);smallfortbxa2[smallfortbid2]=*smallfortbid2rexy;smallfortbya2[smallfortbid2]=*(smallfortbid2rexy+1);}//ifif(smallfortbid2>=100)smallfortbid2=0;for(i=0;i<100;i++){smallfortbx2[i]=smallfortbx2[i]+smallfortbxa2[i];smallfortby2[i]=smallfortby2[i]+smallfortbya2[i];setfillcolor(BLACK);solidcircle(smallfortbx2[i],smallfortby2[i],2);if(smallfortbx2[i]<=0||smallfortbx2[i]>=500||smallfortby2[i]<=0||smallfortby2[i]>=500)smallfortbx2[i]=-999;if(smallfortbx2[i]>=(x-1)*10&&smallfortbx2[i]<=x*10&&smallfortby2[i]>=(y-1)*10&&smallfortby2[i]<=y*10){smallfortbx2[i]=-999;mhp-=1;}//if}//forsettextstyle(15,0,"宋体");setbkmode(TRANSPARENT);if(a1==true){//左炮塔描绘loadimage(&img3,".\\炮塔.jpg",10,10);putimage(smallfortx1*10,smallforty1*10,&img3);itoa(smallforthp1,c,10);outtextxy(smallfortx1*10-5,(smallforty1-2)*10,c);       }//ifif(a2==true){//右炮塔描绘loadimage(&img3,".\\炮塔.jpg",10,10);putimage(smallfortx2*10,smallforty2*10,&img3);itoa(smallforthp2,c,10);outtextxy(smallfortx2*10-5,(smallforty2-2)*10,c);    }//ifsettextcolor(RED);if(a3==true){itoa(bosshp,c,10);//boss血量的描绘outtextxy((bossx-1)*10,(bossy-3)*10,c);}//ifitoa(mhp,c,10);//人物血量描绘outtextxy((x-1)*10,(y-3)*10,c);FlushBatchDraw();if(smallforthp1<=0)a1=false;//左炮塔血量小于0时损坏if(smallforthp2<=0)a2=false;//右炮塔血量小于0时损坏if(bosshp<=0)a3=false;//boss血量小于0时死亡if(a1==false&&a2==false&&a3==false){//所有敌人消灭后胜利win_interface();break;}if(mhp<=0){//我的血量小于0时失败lose_interface();break;}}//while
}int main(){cout<<"操作介绍:a左w上s下d右  j子弹攻击  k激光攻击"<<endl;cout<<"-----------------------按任意键进入游戏------------------------";getch();initial_interface();fighting_interface();return 0;
}//main

有人可能会问:为什么不用类与对象去实现呢?还不是当时学类与对象的时候基础不扎实,用不习惯。我是直到后来学了数据结构与算法后才对类与对象有了新的了解。(这个小游戏是我大一寒假的时候整的,实现不好的话还往多多指教!)

这就是我在easyx图形库和c++学习过程中制作的小游戏,在此记录!

逐步实现一个简易的飞机大战(c++)相关推荐

  1. 简易版飞机大战源码下载

    简易版飞机大战,实现飞机发射子弹,随机出现怪物,碰撞检测,分数记录,OC语音开发 网盘下载地址:http://pan.baidu.com/s/1gfMHdYj 密码:jwjr 查看原文:http:// ...

  2. 用java写一个简单的飞机大战游戏

    制作一个简单的飞机大战 注意!!!!!,图片素材在我的资源里有. 下面代码排序,非先后顺序.请看清楚类名 Airplane类 package Flyplane;public class Airplan ...

  3. Java之简易版飞机大战

    本篇博客主要利用java实现了一个简易版的飞机大战,适合初学者练手,所涉及到的知识主要有以下几点: 1,面向对象.飞机大战的功能是针对每个英雄机.子弹和敌机对象实现的. 2,数组.由于敌机和子弹对象有 ...

  4. 用Java实现简易的飞机大战---附源码和图片

    先看演示 Java简易飞机大战 源码链接:(内置图片) 此项目源码链接[百度网盘]提取码:1234https://pan.baidu.com/s/1EoBdg_47nYgLWgB6Zee9gg 一.基 ...

  5. PIXIJS实现豌豆侠大战愤怒鸟(简易版飞机大战)

    PIXIJS简易教程 发现一款超好用的2D渲染引擎-PixiJS,非常适合制作H5小游戏. pixiJS学习网址如下: https://aitrade.ga/pixi.js-cn/PIXI.Sprit ...

  6. 用 Python 写一个经典的飞机大战(附源代码)

    当年微信 5.0 发布时,首页被设置成了一款新推出的小游戏,它就是微信版飞机大战,游戏一经推出便是火爆异常,铅笔画风格的游戏界面也受到了很多人的喜欢. 最近重温了一下这款小游戏,尽管时隔多年,但无论是 ...

  7. JAVA飞机移动斜着走_java复习 做一个简易的飞机游戏

    最近闲来无事复习下java基础,没有特别复杂的功能,一切从简,旨在回顾知识点!!! 游戏效果如下: 我们通过键盘控制飞机前后移动躲避炮弹,如果碰到炮弹则会爆炸,游戏结束并显示游戏坚持的时间 基本的功能 ...

  8. python做飞机大战游戏单机_Python制作简易版飞机大战小游戏

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 相关文件 欢迎与我交流 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即 ...

  9. 飞机大战c++语言源代码,C++编写简易的飞机大战

    初学C/C++的小伙伴可以用做这个小游戏来熟悉一下编程的乐趣. #include #include"resource.h" #include #include #include # ...

最新文章

  1. [译]Effective Kotlin系列之探索高阶函数中inline修饰符(三)
  2. Ubuntu 16.04下减小/释放/清理VirtualBox虚拟硬盘文件的大小
  3. python创建新工程_个人博客二|创建项目
  4. UML 中extend和include的区别
  5. 第七季4:网络telnet调试、海思proc文件系统调试接口
  6. POJ 1523 SPF (割点 点双连通分量)
  7. 编译安装python3.6_编译安装Python3.6及以上
  8. 语言 标签倾斜 绘图_一文搞懂ggplot2:老板再也不用担心我的科研绘图
  9. mysql 主主切换_mysql 主-主配置中进行切换
  10. 概率论与数理统计浙大第五版 第三章 部分习题
  11. 51单片机对GPS卫星信号的解码并通过LCD1602或12864显示
  12. Java串口通信(RXTX)
  13. 开启微信悬浮窗权限有什么用_这个功能比微信自带的还好用
  14. Android仿淘宝京东商品规格参数颜色筛选
  15. python输出多行数据合并_pandas之多行按类合并为一行
  16. 【目标跟踪】|STARK
  17. 如何卸载avast free antivirus软件?
  18. Pentest Wiki Part5 提权
  19. 人人都是产品经理读书笔记
  20. rancher/ui 路由资源对应表

热门文章

  1. 教你用PixiJs实现复杂动画
  2. chromedriver、geckodriver、MicrosoftWebDriver、IEDriverServer和operadriver之间的恩怨纠葛
  3. 一个简易的dota改键助手
  4. 下载kafka安装包
  5. 神经网络适用于分类问题的最后一层-Softmax和交叉熵损失介绍及梯度推导
  6. 铁威马NAS安装bittorrent QB下载PT/BT
  7. 希玛 AR907C绝缘电阻测试仪基本实验
  8. python从键盘输入列表有缺陷_程序员必知的Python陷阱与缺陷列表-阿里云开发者社区...
  9. nginx免安装二进制包制作(安装推荐)
  10. python 动漫卡通人物图片大全_用Python实现抖音上的“人像动漫化”特效,原来这么简单...