C语言小游戏:飞机小战(1)

这篇文章展示了如何使用C语言的scanf和getch函数控制飞机在控制台中的移动,以及如何通过键盘输入发射子弹。初始版本仅用星号(*)表示飞机,后续增加了更复杂的飞机模型,并添加了子弹发射功能,当按下空格键时,飞机上方会打印出代表子弹的竖线。
摘要由CSDN通过智能技术生成

目录

1:scanf函数控制飞机的运动

2:getch函数控制的飞机运动

3:打印出复杂的飞机模型

4:发射子弹


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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值