【C语言】以深厚地基筑伟岸高楼-基础篇(十六)

让飞机发射激光

思路:
我们按空格键后让飞机发射出激光“ | ”,就是在飞机上方显示一列竖线“ | ”,并且定义一个新的变量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;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;
}

具体效果呢,大家可以自己去试一下,很有趣的

打靶练习

思路和想法:
在上一文中我们实现了一个较为复杂的飞机图案,并且使它动了起来,接下来我们来为飞机增加一个目标——靶子“ + ” ,通过控制飞机发射激光“ | ” 击中它,通过上一文中的练习,我们熟悉了如何打印出飞机,并且使得飞机动起来。
其次,我们需要在第一行加一个靶子“ + ”,并且控制飞机发射激光,变量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)
				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; 
} 

效果图如下:

在这里插入图片描述
因为激光子弹刷新过快,并没有被截图截到,所以显示效果上没有看到激光

飞机游戏的函数重构

我们自习看我们之前所写的代码,会发现我们有很多代码都是在重复的敲很多遍,那么我们如何避免这种浪费时间的行为呢?我们可以使用函数,接下来,让我们看看用函数如何重构飞机游戏
代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

//全局变量
int position_x,position_y;		//飞机位置
int high,width;					//游戏画面尺寸

void startup()					//数据的初始化
{
	high = 20;
	width = 30;
	position_x = high/2;
	position_y= width/2;
}

void show()						//显示画面 
{
	system("cls");				//清屏函数 
	int i ,j;
	for (i=0;i<high;i++)
	{
		for (j=0;j<width;j++)
		{
			if ((i==position_x)&&(j==position_y))
				printf(" * ");	//输出飞机 * 
			else
				printf(" ");	//输出空格 
		}
		printf("\n");
	}
}

void updatewithoutinput()		//与用户无关的更新 
{
}

void updatewithinput()			//与用户输入有关的更新 
{
	char input;
	if(kbhit())
	{
		input = getch();		//根据用户的不同输入来移动,不必输入回车 
			if( input == 'a')
				position_y--;	//位置左移 
			if (input == 'd')
				position_y++; 	//位置右移
			if (input == 'w')
				position_x--;	//位置上移 
			if (input == 's')
				position_x++; 	//位置下移
	}
}

int main()
{
	startup();					//数据的初始化
	while(1)					//数据循环执行 
	{
		show();					//显示画面 
		updatewithoutinput();	//与用户输入无关的更新 
		updatewithinput();		//与用户输入有关的更新 
	}
	return 0; 
}

至此,飞机小游戏就算初步完成,并且可以游玩啦,如果大家想更深入一点,可以自己学习一下哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值