目录
scanf控制飞机移动:
能够运用scanf输入不同的字符,按a,s,d,w键后改变坐标x,y的值,从而控制飞机*字符上下左右移动。
#include <stdio.h>
#include <stdlib.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;
}
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;
}
显示复杂的飞机图案:
#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");
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;j<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;
}
打靶练习:
第五步在第一行增加一个靶子‘+’,控制飞机发射激光击中它,变量isKilled用来储存是否被击中,isKilled等于0显示靶子,当isKilled等于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; //一个靶子,放在第一行的ny列上
while(1)
{
system("cls"); //清屏函数
if(!isKilled)
{
for(j=0;j<ny;j++)
printf(" ");
printf("+\n");
}
if(isFire==0) //输出飞机上面的空行
{
for(i=0;j<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;
}