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

这篇博客介绍了如何使用C语言编写一个简单的飞机小游戏。游戏通过scanf和getch函数控制飞机移动,实现了飞机的上、下、左、右移动。开始时,飞机图案为一个星号(*),后续增加了更复杂的飞机图案。通过getch()函数,玩家可以直接输入指令而无需回车,提高了游戏的交互性。文章提供了完整的代码示例,展示了如何实现飞机图案的移动以及如何改进交互体验。
摘要由CSDN通过智能技术生成

简单的飞机小游戏

游戏均为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; 
}

我们来看一下效果:
在这里插入图片描述
这就是我们实现的飞机图案,同时大家可以思考一下,这个复杂图案和一个*号的简单图案,都是怎样实现移动的,并且复杂图案是如何整体一起移动的。

暂且到此吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值