简单的飞机小游戏
游戏均为C语言程序设计于游戏开发实践教程的内容,此为学习后的复现。
任务目标有:
飞机的显示,控制移动,显示飞机图案,发射激光,打靶练习等功能
scanf控制飞机移动
实现思路:
我们通过利用scanf输入不同的字符来达到控制飞机移动的目的,如按下w,a,s,d后改变飞机坐标(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;
}
显示效果:
输入d 按下回车后
图案向右边移动了一格
其他方向同理
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;
}
它的实现效果,就由大家自己去尝试吧~
显示复杂的飞机图案
实现想法:
我们此前仅仅使用一个*号来表示飞机图案,我们现在来实现复杂的飞机图案,并且可以运用getch()函数来实现飞机上下左右的移动。
代码如下:
#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;
}
我们来看一下效果:
这就是我们实现的飞机图案,同时大家可以思考一下,这个复杂图案和一个*号的简单图案,都是怎样实现移动的,并且复杂图案是如何整体一起移动的。
暂且到此吧。