做游戏,学编程(C语言) 3 利用函数对飞机游戏进行重构

本文介绍如何使用C语言函数重构飞机游戏,包括飞机移动、子弹自动上移、敌机移动、碰撞检测及得分系统。通过游戏开发实践,强调函数封装的重要性,并提供简化游戏框架,鼓励读者进行拓展,如显示复杂图形、多敌机、游戏优化等。
摘要由CSDN通过智能技术生成

在进行这个教程的学习前,强烈建议大家先尝试下教程2中的思考题,大概要一百多行代码,是对C语言基本语法、逻辑能力的一个很好的锻炼。

没有学习函数,以上功能都在main中实现,是有点痛苦的。学了函数后,这个教程我们会模块化重构飞机游戏,大家经历过上面的痛苦后才能真正理解函数的好处。如果只是被动地学习语法知识,做些简单的算法题,是很难体会到函数封装的重要性的。要写了足够复杂的代码,才有较深的体会。

还有,随着程序越来越复杂,程序调试的能力也越来越重要。大家都要学会断点单步、变量跟踪、分块调试等常用方法。这方面的教程很多,大家可以网上搜索下。

另外,在实现飞机游戏时,可能会遇到子弹运动时没法控制、键盘控制比较卡、不按键时敌人不会自动移动等问题。为了简化大家的开发难度,这里给一个简化的游戏框架:

// 函数外全局变量定义
void main()
{
     
   startup();    // 数据初始化
   while(1)  //  游戏循环执行
   {
     
        show();   // 显示画面
        updateWithoutInput();  // 与用户输入无关的更新
        updateWithInput();    // 与用户输入有关的更新
    }
}

大家的相应功能,都需要放到startup()、show()、updateWithoutInput()、updateWithInput()这四个函数中实现,主函数尽量保持以上的形式,不要修改。

第一步,利用函数和上面的框架对空战游戏进行重构,实现控制飞机的移动。另外,输出部分也改进了,通过直接二重循环,输出所有的空格回车等内容,可以进行更复杂的输出。

#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++;  // 位置下移
	}
}

void main()
{
     
	startup();  // 数据初始化	
	while (1) //  游戏循环执行
	{
     
		show();  // 显示画面
		updateWithoutInput();  // 与用户输入无关的更新
		updateWithInput();  // 与用户输入有关的更新
	}
}


第二步,实现一个正规子弹,子弹发射后自动向上移动。

v2-26a1c088a3ab7e93df857f7b3ff128f8_b.png
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

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

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

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 if ((i==bullet_x) && (j==bullet_y))
				printf("|");  //   输出子弹|
			else
				printf(" ");  //   输出空格
		}
		printf("\n&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值