打飞机游戏3.0
方向键控制,空格开火
#include <stdio.h>
#include "mine.h"
//画面尺寸
#define High 21
#define Width 13
//变量区:
int canvas={0};//二维数组记录游戏画面中对应的元素
//0是空白,1是飞机,2是子弹,3是敌机
int plane_x,plane_y;//飞机坐标位置
#define EnemyNum 5//敌机数目
int enemy_x,enemy_y;//敌机坐标
int bullet;//判断子弹等级
int speed,speedb;//控制敌机下落速度 speed 量变 speedb 质变
int score;//得分
int life;//生命
int hit;//判断碰撞和击中
int headnum;//控制头部
void head(){
//名字
switch(headnum%3){
case 0:printf(" >>【 鹰 击 长 空 】<<\n");break;
case 1:printf(">> 【 鹰 击 长 空 】 << \n");break;
case 2:printf(" >>【 鹰 击 长 空 】<<\n");break;
}
}
void start(){
//数据初始化
HideCursor();
plane_x=High-1;
plane_y=(Width-1)/2;
headnum=0;
int k;
for(k=0;k<EnemyNum;k++){
enemy_x=random(5);
enemy_y=random(Width);
canvas]]=3;
}
canvas=1;
speedb=40;
speed=0;
score=0;
life=10;
hit=0;
bullet=0;//表示子弹等级为0
}
void jifenban(){
//计分板
int i;
printf(" 【得分:%2d】",score);
printf("【火力等级:");
for(i=0;i<=bullet;i++){
printf("★");
}
for(;i<3;i++){
printf("☆");
}
printf("】");
printf("\n 【生命: ");
for(i=0;i<life;i++){
printf("◆");
}
for(;i<10;i++){
printf("◇");
}
printf("】");
}
void showup(){
//画面显示
cls();
head();
int i,j;
for(i=0;i<High;i++){
printf(" ┃ ");
for(j=0;j<Width;j++){
if(canvas==4){
canvas=0;
printf("X");//击中目标
}
else if(canvas==1){
printf("A"); //输出飞机A
}
else if(canvas==2){
printf("!");//输出子弹
}
else if(canvas==3){
printf("W");//输出敌机
}
else{
printf(" "); //输出空格
}
}
printf("┃\n");
}
if(hit){
printf("\a");
sleep(20);
hit=0;
}
}
void wginputupdate(){
//输入无关更新
headnum++;
int i,j,k;
for(i=0;i<High;i++){
for(j=0;j<Width;j++){
if(canvas==2){
for(k=0;k<EnemyNum;k++){
if(i==enemy_x && j==enemy_y){
//子弹击中
canvas]]=4;
score++;
enemy_x=random(5);
enemy_y=random(Width);
canvas]]=3;
hit=1;
break;
}
else if(i==enemy_x+1 && j==enemy_y){
//敌机在上,子弹在下
score++;
canvas]]=4;
canvas=0;
hit=1;
enemy_x=random(5);
enemy_y=random(Width);
canvas]]=3;
break;
}
else if(i==enemy_x+2 && j==enemy_y && speed==speedb-1){
//防止子弹和敌机同时到达一个点
score++;
canvas]]=0;
canvas+1]]=4;
canvas=0;
hit=1;
enemy_x=random(5);
enemy_y=random(Width);
canvas]]=3;
break;
}
}
if(!hit){
canvas=0;
if(i>0){
canvas=2;//子弹向上移动
}
}
}
else if(canvas==1){
for(k=0;k<EnemyNum;k++){
if(i==enemy_x && j==enemy_y){
//很明显的相撞
canvas]]=4;
score--;
life=life-3;
enemy_x=random(5);
enemy_y=random(Width);
canvas]]=3;
plane_x=High-1;
plane_y=Width/2;
canvas=1;
hit=1;
break;
}
else if(i==enemy_x+1 && j==enemy_y && speed==speedb-1){
//防止我机和敌机同时到达一个点
score--;
life=life-3;
canvas]]=0;
canvas=4;
hit=1;
enemy_x=random(5);
enemy_y=random(Width);
canvas]]=3;
plane_x=High-1;
plane_y=Width/2;
canvas=1;
break;
}
}
}
}
}
speed++;
if(speed==speedb){
//敌机自动下落
for(k=0;k<EnemyNum;k++){
canvas]]=0;
enemy_x++;
canvas]]=3;
if(enemy_x>High-1){
//敌机跑出下边界
life--;
canvas]]=0;
enemy_x=random(5);
enemy_y=random(Width);
canvas]]=3;
hit=2;
score--;
}
speed=0;
switch(score/20){
case 1:speedb=30;break;
case 2:speedb=20;bullet=1;break;
case 3:speedb=10;bullet=2;break;
case 4:speedb=5;break;
default:break;
}
}
}
if(score<0)
score=0;
}
void yginputupdate(){
//输入有关更新
char input;
if(kbhit()){
input=getch();
if(input==-32){
input=getch();
canvas=0;
switch(input){
case 72:plane_x--;break;
case 80:plane_x++;break;
case 75:plane_y--;break;
case 77:plane_y++;break;
default:break;
}
if(plane_y<=0){
plane_y=0;
}
if(plane_y>=Width-1){
plane_y=Width-1;
}
if(plane_x<=1){
plane_x=1;
}
if(plane_x>=High-1){
plane_x=High-1;
}
canvas=1;
}
else if(input=' '){
int left,right,i;
left=plane_y-bullet;
right=plane_y+bullet;
if(left<0){
left=0;
}
if(right>Width-1){
right=Width-1;
}
for(i=left;i<=right;i++){
canvas=2;
}
}
else{
input=getchar();
input=getchar();
}
}
}
int main(){
start();//数据初始化
while(life>0){
showup();//画面显示
wginputupdate();//输入无关更新
yginputupdate();//输入有关更新
if(score==100){
printf("\a");
break;
}
jifenban();
}
if(score==100){
system("cls");
char c;
printf("\n\n\n\n\n\n\n\t\t\t > Game Pass! <");
switch(life){
case 1:c='E';break;;
case 2:;
case 3:c='D';break;;
case 4:;
case 5:c='C';break;;
case 6:;
case 7:c='B';break;;
case 8:;
case 9:c='A';break;;
case 10:c='S';break;
default:break;
}
printf("\n\n\t\t\t > Level%c <",c);
sleep(3000);
}
else {
system("cls");
printf("\n\n\n\n\n\n\n\t\t\t > Game Over! <");
sleep(3000);
}
}
cooked 发表于 2021-3-19 15:27
想学着写写,这是用C写的吗?有啥推荐用的编辑器吗
VSCode {:301_998:} 这乍一看,我想崴了 真他娘的是个人才 把意大利炮拿出来 想学着写写,这是用C写的吗?有啥推荐用的编辑器吗{:301_997:} 和我想的打飞机不一样啊老铁{:301_971:} 打飞机还需要代码么,需要的是手艺{:301_1004:} 看起来很好玩 这游戏,颜值何在?直男游戏鉴定完毕!但还是要给楼主点个赞。有值得学习的东西。
页:
[1]
2