目录
1. scanf控制飞机移动
2. getch控制飞机
三.显示复杂的飞机图案
四.发射激光
5.打靶练习
在前面小球的基础上实现一个简单的飞机小游戏,主要包括飞机的显示,控制移动,显示复杂图案,发射激光,打靶练习等操作。
1. scanf控制飞机移动
第一步利用scanf输入不同的字符,按a,s,d,w健后改变坐标x,y的值,从而控制飞机的移动
#include<stdio.h>
int main()
{
int i,j;
int x=5;
int y = 10;
char input;
while(1)
{
system("cls");
//输出飞机上面的空行
for(i=0;i<x;i++)
printf("\n");
//输出飞机左边的空格
for(j = 0;j<y;j++)
printf(" ");
printf("*"); //输出飞机
printf("\n");
scanf("%c",&input);
if(input=='a')
y--;
if(input=='d')
y++;
if(input=='w')
x--;
if(input=='s')
x++;
}
return 0;
}
2. getch控制飞机
scanf函数要求每输入一个字符按回车健后才能执行,交互效果不好,因此第二步使用一个新的输入函数getch()(#include<conio.h>),不需要回车就可以得到输入的控制字符。另外,kbhit()函数在用户有键盘输入时返回1,否则返回0;在没有键盘输入时if(kbhit())下面的语句不会运行,从而避免出现用户不输入游戏就暂停的情况。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
int i,j;
int x=5;
int y = 10;
char input;
while(1)
{
system("cls");
//输出飞机上面的空行
for(i=0;i<x;i++)
printf("\n");
//输出飞机左边的空格
for(j = 0;j<y;j++)
printf(" ");
printf("*"); //输出飞机
printf("\n");
if(kbhit()) //判断是否输入
{
input = getch(); //根据用户的不同输入来移动,不必回车
if(input=='a')
y--;
if(input=='d')
y++;
if(input=='w')
x--;
if(input=='s')
x++;
}
}
return 0;
}
三.显示复杂的飞机图案
前面的飞机图案用一个*表示,太简单,第三步显示复杂的飞机图案,并可以用a,s,d,w健控制飞机上下左右移动。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
int i,j;
int x=5;
int y=10;
char input;
while(1)
{
system("cls");
//输出飞机上面的空行
for(i=0;i<x;i++)
printf("\n");
//下面输出一个复杂的飞机图案
for(j=0;j<y;j++)
printf(" ");
printf(" *\n"); //输出飞机
for(j=0;j<y;j++)
printf(" ");
printf("*****\n");
for(j=0;j<y;j++)
printf(" ");
printf(" * * \n");
if(kbhit()) //判断是否输入
{
input = getch(); //根据用户的不同输入来移动,不必回车
if(input=='a')
y--;
if(input=='d')
y++;
if(input=='w')
x--;
if(input=='s')
x++;
}
}
return 0;
}
四.发射激光
按空格健后让飞机发射激光子弹,即在飞机上面显示一列空格‘|’,第四步定义变量isFire,用来记录飞机是否处于发射子弹的状态。当isFire等于1时,将在飞机的正上方输出激光竖条。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
int i,j;
int x=5;
int y=10;
char input;
int isFire = 0;
while(1)
{
system("cls");
if(isFire==0)
{
for(i=0;i<x;i++)
printf("\n");
}
else
{
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
printf(" ");
printf(" |\n");
}
isFire = 0;
}
//下面输出一个复杂的飞机图案
for(j=0;j<y;j++)
printf(" ");
printf(" *\n"); //输出飞机
for(j=0;j<y;j++)
printf(" ");
printf("*****\n");
for(j=0;j<y;j++)
printf(" ");
printf(" * * \n");
if(kbhit()) //判断是否输入
{
input = getch(); //根据用户的不同输入来移动,不必回车
if(input=='a')
y--;
if(input=='d')
y++;
if(input=='w')
x--;
if(input=='s')
x++;
if(input==' ')
isFire = 1;
}
}
return 0;
}
5.打靶练习
第五步在第一行增加一个靶子‘+’,控制飞机发射激光击中它。变量isKilled用来储存是否被击中,isKill等于0显示靶子,当isKIll等于1时不在显示靶子。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
int i,j;
int x=5;
int y=10;
char input;
int isFire = 0;
int ny=5;
int iskilled=0;
while(1)
{
system("cls");
if(!iskilled)
{
for(j=0;j<=ny;j++)
printf(" ");
printf("+\n");
}
if(isFire==0)
{
for(i=0;i<x;i++)
printf("\n");
}
else
{
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
printf(" ");
printf(" |\n");
}
if(y+2 == ny)
iskilled = 1;
isFire = 0;
}
//下面输出一个复杂的飞机图案
for(j=0;j<y;j++)
printf(" ");
printf(" *\n"); //输出飞机
for(j=0;j<y;j++)
printf(" ");
printf("*****\n");
for(j=0;j<y;j++)
printf(" ");
printf(" * * \n");
if(kbhit()) //判断是否输入
{
input = getch(); //根据用户的不同输入来移动,不必回车
if(input=='a')
y--;
if(input=='d')
y++;
if(input=='w')
x--;
if(input=='s')
x++;
if(input==' ')
isFire = 1;
}
}
return 0;
}