C++实现彩色飞机大战
本文实例为大家分享了C++实现彩色飞机大战的具体代码,供大家参考,具体内容如下
1.基本的能够实现键盘按上下左右进行控制飞机,击杀敌人飞机,记录得分,(缺点:死亡后不能从新玩,需要重新启动程序,),缺点将在2中解决
/*隐藏光标的代码 #include#include intmain() { HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFOCursorInfo; GetConsoleCursorInfo(handle,&CursorInfo);//获取控制台光标信息 CursorInfo.bVisible=false;//隐藏控制台光标 SetConsoleCursorInfo(handle,&CursorInfo);//设置控制台光标状态 getchar(); }*/ /* 明白两个事实, 敌人飞机和自己的飞机的横坐标和纵坐标相同时表示死亡 敌人飞机和自己的子弹碰撞即子弹坐标和自己子弹的坐标相同时,飞机死亡并且加分, */ #include"stdio.h" #include #include #include #defineEsc27//退出 #defineUp72//上,下,左,右 #defineDown80 #defineLeft75 #defineRight77 #defineKong32//发射子弹 intx=10;//飞机坐标 inty=18; intd2=10;//敌机坐标 intd1=10; intd=10;//d和r用来进行碰撞检测 intr=1; intr1=1; intr2=1; intt=1;//游戏结束 intf=0;//计分数 intm=5;//敌机数 intj=0;//歼敌数 charp;//接受按键 voidkongzhi(intbx,intby);//声明函数 voidhuatu(); voidgotoxy(intx,inty)//移动坐标 { COORDcoord; coord.X=x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3); } voidgotoxy_red(intx,inty)//移动坐标 { COORDcoord; coord.X=x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4); } voidgotoxy_blue(intx,inty)//移动坐标 { COORDcoord; coord.X=x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),1); } voidgotoxy_green(intx,inty)//移动坐标 { COORDcoord; coord.X=x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2); } voidhidden()//隐藏光标,不让光标显示 { HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFOcci; GetConsoleCursorInfo(hOut,&cci); cci.bVisible=0;//赋1为显示,赋0为隐藏 SetConsoleCursorInfo(hOut,&cci); } //************************************************************************************** //说明 voidshuoming() { printf("\t\t\t\n\n\n\n"); gotoxy_blue(0,0); printf("\t\t\t\t\t\t\tPlaneControl\n\n" "\t\t\t\t\t\t\t\tUP\n\n" "\t\t\t\t\t\t\tDown\n\n" "\t\t\t\t\t\t\tLeft\n\n" "\t\t\t\t\t\t\tRight\n\n" "\t\t\t\t\t\t\tbulletspace\n\n\n" "\t\t\t\t\t\t\tQuitEsc\n"); gotoxy_red(0,0); } //**************************************************************************************** //判断我机死没死/游戏结束 voidbyebye() { if(((x==d&&y==r)||(x==d1&&y==r1)||(x==d2&&y==r2))||((d>=19||r>=19)||(d1>=19||r1>=19)||(d1>=19||r1>=19))) { gotoxy(1,3); printf("!!!游戏结束!!!\n" "*******************\n" "您的总得分:%d\n\n" "敌机数:%d\n" "歼敌数:%d\n" "命中率:%.0f%%\n" "*******************\n",f,m,j,((float)j/(float)m)*100); while(!_kbhit()) { Sleep(500); gotoxy(1,12); printf("继续请按任意键...\n\n\n"); Sleep(900); gotoxy(1,12); printf(""); } gotoxy_red(0,0); huatu(); f=0;m=0;j=0; if(x>=18)x--; elsex++; gotoxy(x,y); printf("A"); } } //计分/更新敌机 voidjifan() {//x,y是子弹的坐标 if(x==d&&y==r)//d=10,r=1,d,d1,d2是敌机的x轴,为10,r为敌机的纵坐标 { gotoxy(d,r);printf("3"); Sleep(200); gotoxy(d,r);printf("");f+=2;r=0;j++;//让r=0,即是让敌人的飞机消失 } if(x==d1&&y==r1) { gotoxy(d1,r1);printf("1"); Sleep(200); gotoxy(d1,r1);printf("");f+=3;r1=0;j++; } if(x==d2&&y==r2) { gotoxy(d2,r2);printf("0"); Sleep(200); gotoxy(d2,r2);printf("");f+=1;r2=0;j++; } gotoxy(57,2); printf("%d\n",f); } //画图 voidhuatu() { inti,n; for(i=0;i<=20;i++) { for(n=0;n<=20;n++) { printf("*"); } printf("\n"); } for(i=1;i<=19;i++) { for(n=1;n<=19;n++) { gotoxy_red(i,n); printf(""); } } } //随机产生敌机 voiddfeiji() { while(t) { if(!r){d=rand()%17+1;m++;}//r,r1,r2初始值都为1,当变为0的时候开始产生随机数 if(!r1){d1=rand()%17+1;m++;} if(!r2){d2=rand()%17+1;m++;} while(t) { r=r+2;r1=r1+2;r2=r2+2; gotoxy(d,r);printf("b");//d,d1,d2为敌机产生的位置,都为10 gotoxy(d1,r1);printf("c"); gotoxy(d2,r2);printf("d"); Sleep(900); gotoxy(d,r);printf(""); gotoxy(d1,r1);printf(""); gotoxy(d2,r2);printf(""); kongzhi(0,0);//控制飞机后,要立即进行判断 byebye();//判断飞机有没有死亡 if(r==19)r=0; if(r1==19)r1=0; if(r2==19)r2=0; if(r==0||r1==0||r2==0)break; } } } //操控飞机 voidkongzhi(intbx,intby)//调用的时候传入了0,0 { inta; while(_kbhit()) { if((p=_getch())==-32)p=_getch(); a=p; gotoxy(22,5); switch(a) {//控制方向 caseUp:if(y!=1) { gotoxy(x,y);printf(""); y--; gotoxy(x,y);printf("A"); }break; caseDown:if(y!=18) { gotoxy(x,y);printf(""); y++; gotoxy(x,y);printf("A"); }break; caseLeft:if(x!=1) { gotoxy(x,y);printf(""); x--; gotoxy(x,y);printf("A"); }break; caseRight:if(x!=18) { gotoxy(x,y);printf(""); x++; gotoxy(x,y);printf("A"); }break; caseKong:{bx=y;//先把y的值存起来,存到bx for(by=y;by>1;)//发射子弹,y轴坐标一直减减,打印| { by--;//y的坐标 gotoxy(x,by);printf("|"); Sleep(10); gotoxy(x,by);printf(""); y=by;//记录子弹打到哪了,好进行碰撞检测 jifan();//计分数 if(r==0||r1==0||r2==0)break; } y=bx;//恢复y的值 }break; caseEsc:t=0;break;//退出 default:break; } } } intmain() { srand(time(NULL)); shuoming();//打印游戏说明,之后让光标进入0,0 hidden();//隐藏光标,不让光标显示 huatu();//画出墙壁 gotoxy(x,y);//x=10,y=8,x和y是自己飞机的坐标,是全局变量 printf("A"); gotoxy(50,2); printf("Score:"); while(t)//t是一个全局变量初始值为1 { kongzhi(0,0);//调用控制飞机函数,(操作飞机后并记分数) if(t)//如果游戏没有结束,则产生敌机 dfeiji();//产生敌机,并判断飞机有没有死亡 } }
2.(封装了一个函数)结束游戏后能够重新开始进行下一局
/*隐藏光标的代码 #include#include intmain() { HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFOCursorInfo; GetConsoleCursorInfo(handle,&CursorInfo);//获取控制台光标信息 CursorInfo.bVisible=false;//隐藏控制台光标 SetConsoleCursorInfo(handle,&CursorInfo);//设置控制台光标状态 getchar(); }*/ /* 明白两个事实, 敌人飞机和自己的飞机的横坐标和纵坐标相同时表示死亡 敌人飞机和自己的子弹碰撞即子弹坐标和自己子弹的坐标相同时,飞机死亡并且加分, */ #include"stdio.h" #include #include #include #defineEsc27//退出 #defineUp72//上,下,左,右 #defineDown80 #defineLeft75 #defineRight77 #defineKong32//发射子弹 intx=10;//飞机坐标 inty=18; intd2=10;//敌机坐标 intd1=10; intd=10;//d和r用来进行碰撞检测 intr=1; intr1=1; intr2=1; intt=1;//游戏结束 intf=0;//计分数 intm=5;//敌机数 intj=0;//歼敌数 charp;//接受按键 voidkongzhi(intbx,intby);//声明函数 voidhuatu(); voidgotoxy(intx,inty)//移动坐标 { COORDcoord; coord.X=x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3); } voidgotoxy_red(intx,inty)//移动坐标 { COORDcoord; coord.X=x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4); } voidgotoxy_blue(intx,inty)//移动坐标 { COORDcoord; coord.X=x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),1); } voidgotoxy_green(intx,inty)//移动坐标 { COORDcoord; coord.X=x; coord.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2); } voidhidden()//隐藏光标,不让光标显示 { HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFOcci; GetConsoleCursorInfo(hOut,&cci); cci.bVisible=0;//赋1为显示,赋0为隐藏 SetConsoleCursorInfo(hOut,&cci); } //************************************************************************************** //说明 voidshuoming() { printf("\t\t\t\n\n\n\n"); gotoxy_blue(0,0); printf("\t\t\t\t\t\t\tPlaneControl\n\n" "\t\t\t\t\t\t\t\tUP\n\n" "\t\t\t\t\t\t\tDown\n\n" "\t\t\t\t\t\t\tLeft\n\n" "\t\t\t\t\t\t\tRight\n\n" "\t\t\t\t\t\t\tbulletspace\n\n\n" "\t\t\t\t\t\t\tQuitEsc\n"); gotoxy_red(0,0); } //**************************************************************************************** //判断我机死没死/游戏结束 voidbyebye() { if(((x==d&&y==r)||(x==d1&&y==r1)||(x==d2&&y==r2))||((d>=19||r>=19)||(d1>=19||r1>=19)||(d1>=19||r1>=19))) { gotoxy(1,3); printf("!!!gameover!!!\n" "*******************\n" "score:%d\n\n" "dijishu:%d\n" "jiandishu:%d\n" "mingzhonglv:%.0f%%\n" "*******************\n",f,m,j,((float)j/(float)m)*100); t=0; } } //计分/更新敌机 voidjifan() {//x,y是子弹的坐标 if(x==d&&y==r)//d=10,r=1,d,d1,d2是敌机的x轴,为10,r为敌机的纵坐标 { gotoxy(d,r);printf("3"); Sleep(200); gotoxy(d,r);printf("");f+=2;r=0;j++;//让r=0,即是让敌人的飞机消失 } if(x==d1&&y==r1) { gotoxy(d1,r1);printf("1"); Sleep(200); gotoxy(d1,r1);printf("");f+=3;r1=0;j++; } if(x==d2&&y==r2) { gotoxy(d2,r2);printf("0"); Sleep(200); gotoxy(d2,r2);printf("");f+=1;r2=0;j++; } gotoxy(57,2); printf("%d\n",f); } //画图 voidhuatu() { inti,n; for(i=0;i<=20;i++) { for(n=0;n<=20;n++) { printf("*"); } printf("\n"); } for(i=1;i<=19;i++) { for(n=1;n<=19;n++) { gotoxy_red(i,n); printf(""); } } } //随机产生敌机 voiddfeiji() { while(t) { if(!r){d=rand()%17+1;m++;}//r,r1,r2初始值都为1,当变为0的时候开始产生随机数 if(!r1){d1=rand()%17+1;m++;} if(!r2){d2=rand()%17+1;m++;} while(t) { r=r+2;r1=r1+2;r2=r2+2; gotoxy(d,r);printf("b");//d,d1,d2为敌机产生的位置,都为10 gotoxy(d1,r1);printf("c"); gotoxy(d2,r2);printf("d"); Sleep(900); gotoxy(d,r);printf(""); gotoxy(d1,r1);printf(""); gotoxy(d2,r2);printf(""); kongzhi(0,0);//控制飞机后,要立即进行判断 byebye();//判断飞机有没有死亡 if(r==19)r=0; if(r1==19)r1=0; if(r2==19)r2=0; if(r==0||r1==0||r2==0)break; } } } //操控飞机 voidkongzhi(intbx,intby)//调用的时候传入了0,0 { inta; while(_kbhit()) { if((p=_getch())==-32)p=_getch(); a=p; gotoxy(22,5); switch(a) {//控制方向 caseUp:if(y!=1) { gotoxy(x,y);printf(""); y--; gotoxy(x,y);printf("A"); }break; caseDown:if(y!=18) { gotoxy(x,y);printf(""); y++; gotoxy(x,y);printf("A"); }break; caseLeft:if(x!=1) { gotoxy(x,y);printf(""); x--; gotoxy(x,y);printf("A"); }break; caseRight:if(x!=18) { gotoxy(x,y);printf(""); x++; gotoxy(x,y);printf("A"); }break; caseKong:{bx=y;//先把y的值存起来,存到bx for(by=y;by>1;)//发射子弹,y轴坐标一直减减,打印| { by--;//y的坐标 gotoxy(x,by);printf("|"); Sleep(10); gotoxy(x,by);printf(""); y=by;//记录子弹打到哪了,好进行碰撞检测 jifan();//计分数 if(r==0||r1==0||r2==0)break; } y=bx;//恢复y的值 }break; caseEsc:t=0;break;//退出 default:break; } } } voidzuzhong(){ x=10;//飞机坐标 y=18; d2=10;//敌机坐标 d1=10; d=10;//d和r用来进行碰撞检测 r=1; r1=1; r2=1; t=1;//游戏结束 f=0;//计分数 m=5;//敌机数 j=0;//歼敌数 charp;//接受按键 srand(time(NULL)); shuoming();//打印游戏说明,之后让光标进入0,0 hidden();//隐藏光标,不让光标显示 huatu();//画出墙壁 gotoxy(x,y);//x=10,y=8,x和y是自己飞机的坐标,是全局变量 printf("A"); gotoxy(50,2); printf("Score:"); while(t)//t是一个全局变量初始值为1 { kongzhi(0,0);//调用控制飞机函数,(操作飞机后并记分数) if(t)//如果游戏没有结束,则产生敌机 dfeiji();//产生敌机,并判断飞机有没有死亡 } } intmain() { while(1){ system("cls"); zuzhong(); printf("pleaseenterEnterkeycontine"); getchar(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。