目录
1:scanf函数控制飞机的运动
通过对键盘输入的w,a,s,d键的接收,转化为飞机坐标的改变值,从而达到飞机的上下左右移动
#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=1;i<x;i++)
printf("\n");
for(j=1;j<y;j++)
printf(" ");
printf("*");
printf("\n");
scanf("%c",&input);
if(input=='a')
y--;
if(input=='d')
y++;
if(input=='s')
x++;
if(input=='w')
x--;
}
return 0;
}
当然要用清屏函数和循环体来表示一个飞机体,暂时只用一个*号表示。这样就得到了一个通过键盘控制的飞机运动的模型。
2:getch函数控制的飞机运动
将上述代码运行后我们发现,每一次的键盘输入都需要回车键来执行。交互性不强。我们可以用kbhit()来检测是否有键盘输入。用一个新的函数getch()(需要头文件#include <conio.h>)。这样不需要回车键即可用键盘即可实现控制。kbhit()函数在用户有键盘输入时返回值1,否则返回0。在没有键盘输入时if(kbhit())下面的语句不会运行。从而避免用户不输入游戏就暂停的情况。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
int main()
{
int i,j;
int x=5;
int y=10;
char input;
while (1)
{
system("cls"); //清屏函数
for(i=1;i<x;i++)
printf("\n");
for(j=1;j<y;j++)
printf(" ");
printf("*"); //打印出飞机
printf("\n");
Sleep(50); //在这个地方暂停50ms
if(kbhit())
{
input=getch();
if(input=='a') //向左移动
y--;
if(input=='d')
y++;
if(input=='s')
x++;
if(input=='w')
x--;
}
}
return 0;
}
3:打印出复杂的飞机模型
前面的飞机模型用一个*表示,接下来用循环函数表示一个稍微复杂的飞机模型
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
int main()
{
int i,j;
int x=5;
int y=10;
char input;
while (1)
{
system("cls");
for(i=1;i<x;i++)
printf("\n");
for(j=1;j<y;j++)
printf(" ");
printf("*\n");
for(j=1;j<y-2;j++)
printf(" ");
printf("*****");
printf("\n");
for(j=1;j<y-1;j++)
printf(" ");
printf("* *");
Sleep(50);
if(kbhit())
{
input=getch();
if(input=='a')
y--;
if(input=='d')
y++;
if(input=='s')
x++;
if(input=='w')
x--;
}
}
return 0;
}
4:发射子弹
接下来控制飞机发射出激光或子弹,用isfire储存发射的变量,有子弹发射时,isfire的值为1,没有发射时为0,即为当ifire为1时,在飞机上方打印 | 。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.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=1;i<x;i++)
printf("\n"); //没有空格输入时,打印出飞机上方的空格
}
else
{
for(i=0;i<x;i++)
{
for(j=1;j<y;j++)
printf(" ");
printf("|\n"); //有空格输入时,打印子弹左边的空格和子弹。
}
isfire=0; //恢复到没有子弹的状态
}
for(j=1;j<y;j++)
printf(" ");
printf("*\n");
for(j=1;j<y-2;j++)
printf(" ");
printf("*****");
printf("\n");
for(j=1;j<y-1;j++)
printf(" ");
printf("* *");
Sleep(50);
if(kbhit())
{
input=getch();
if(input=='a')
y--;
if(input=='d')
y++;
if(input=='s')
x++;
if(input=='w')
x--;
if(input==' ') //输入空格时,isfire为1,打印出|
isfire=1;
}
}
return 0;
}