方向键控制,空格开火
[C] 纯文本查看 复制代码 #include <stdio.h>
#include "mine.h"
//画面尺寸
#define High 21
#define Width 13
//变量区:
int canvas[High][Width]={0};//二维数组记录游戏画面中对应的元素
//0是空白,1是飞机,2是子弹,3是敌机
int plane_x,plane_y;//飞机坐标位置
#define EnemyNum 5//敌机数目
int enemy_x[EnemyNum],enemy_y[EnemyNum];//敌机坐标
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[k]=random(5);
enemy_y[k]=random(Width);
canvas[enemy_x[k]][enemy_y[k]]=3;
}
canvas[plane_x][plane_y]=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[i][j]==4){
canvas[i][j]=0;
printf("X");//击中目标
}
else if(canvas[i][j]==1){
printf("A"); //输出飞机A
}
else if(canvas[i][j]==2){
printf("!");//输出子弹
}
else if(canvas[i][j]==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[i][j]==2){
for(k=0;k<EnemyNum;k++){
if(i==enemy_x[k] && j==enemy_y[k]){
//子弹击中
canvas[enemy_x[k]][enemy_y[k]]=4;
score++;
enemy_x[k]=random(5);
enemy_y[k]=random(Width);
canvas[enemy_x[k]][enemy_y[k]]=3;
hit=1;
break;
}
else if(i==enemy_x[k]+1 && j==enemy_y[k]){
//敌机在上,子弹在下
score++;
canvas[enemy_x[k]][enemy_y[k]]=4;
canvas[i][j]=0;
hit=1;
enemy_x[k]=random(5);
enemy_y[k]=random(Width);
canvas[enemy_x[k]][enemy_y[k]]=3;
break;
}
else if(i==enemy_x[k]+2 && j==enemy_y[k] && speed==speedb-1){
//防止子弹和敌机同时到达一个点
score++;
canvas[enemy_x[k]][enemy_y[k]]=0;
canvas[enemy_x[k]+1][enemy_y[k]]=4;
canvas[i][j]=0;
hit=1;
enemy_x[k]=random(5);
enemy_y[k]=random(Width);
canvas[enemy_x[k]][enemy_y[k]]=3;
break;
}
}
if(!hit){
canvas[i][j]=0;
if(i>0){
canvas[i-1][j]=2;//子弹向上移动
}
}
}
else if(canvas[i][j]==1){
for(k=0;k<EnemyNum;k++){
if(i==enemy_x[k] && j==enemy_y[k]){
//很明显的相撞
canvas[enemy_x[k]][enemy_y[k]]=4;
score--;
life=life-3;
enemy_x[k]=random(5);
enemy_y[k]=random(Width);
canvas[enemy_x[k]][enemy_y[k]]=3;
plane_x=High-1;
plane_y=Width/2;
canvas[plane_x][plane_y]=1;
hit=1;
break;
}
else if(i==enemy_x[k]+1 && j==enemy_y[k] && speed==speedb-1){
//防止我机和敌机同时到达一个点
score--;
life=life-3;
canvas[enemy_x[k]][enemy_y[k]]=0;
canvas[i][j]=4;
hit=1;
enemy_x[k]=random(5);
enemy_y[k]=random(Width);
canvas[enemy_x[k]][enemy_y[k]]=3;
plane_x=High-1;
plane_y=Width/2;
canvas[plane_x][plane_y]=1;
break;
}
}
}
}
}
speed++;
if(speed==speedb){
//敌机自动下落
for(k=0;k<EnemyNum;k++){
canvas[enemy_x[k]][enemy_y[k]]=0;
enemy_x[k]++;
canvas[enemy_x[k]][enemy_y[k]]=3;
if(enemy_x[k]>High-1){
//敌机跑出下边界
life--;
canvas[enemy_x[k]][enemy_y[k]]=0;
enemy_x[k]=random(5);
enemy_y[k]=random(Width);
canvas[enemy_x[k]][enemy_y[k]]=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[plane_x][plane_y]=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[plane_x][plane_y]=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[plane_x-1][i]=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);
}
}
|