前言
一、利用scanf控制飞机移动
二、getch控制飞机移动
三、显示复杂的飞机图案
四、发射激光
五、打靶练习
前言在前面弹跳小球的基础上实现一个简单的飞机游戏,主要包括飞机的显示、控制移动、显示复杂图案、发射激光、打靶练习等功能。
目前的飞机还很简单,大家不要着急,一步一步来,在后面会实现更复杂的飞机游戏效果。比如
如何让靶子移动起来?
如何统计和显示击中得分?
如何实现子弹散弹效果?
一、利用scanf控制飞机移动第一步利用scanf输入不同的字符,按a、s、d、w键后改变坐标2、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");
#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;
}
}
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;
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;
}
五、打靶练习
第五步在第一行通过定义一个变量ny,增加一个靶子‘十‘,控制飞机发射激光击中它,变量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; // 一个靶子,放在第一行,ny列上
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) // +2是因为激光在飞机的正中间,距最左边2个坐标
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;
}
到此这篇关于利用C语言实现一个最简单的飞机游戏的文章就介绍到这了,更多相关C语言飞机游戏内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!