C语言—飞机大战小游戏

 函数封装的飞机大战,实现随着得分的增加,加快敌机下落的速度。

代码实现:

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

// 全局变量
int position_x,position_y; // 飞机位置
int bullet_x,bullet_y; // 子弹位置
int enemy_x,enemy_y; // 敌机位置
int high,width; //  游戏画面尺寸
int score; // 得分
int speed_score;//与分数有关的速度控制量 

void gotoxy(int x,int y)  //光标移动到(x,y)位置
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle,pos);
}

void HideCursor() // 用于隐藏光标 
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};  // 第二个值为0表示隐藏光标
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}


void startup() // 数据初始化
{
	high = 20;
	width = 30;
	position_x = high/2;
	position_y = width/2;
	bullet_x = -2;
	bullet_y = position_y;
	enemy_x = 0;
	enemy_y = position_y;
	score = 0;
	speed_score=0;

	HideCursor(); // 隐藏光标
}

void show()  // 显示画面
{
	gotoxy(0,0);
	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==enemy_x)&&(j==enemy_y))
				printf("@");
			else if((i==bullet_x)&&(j==bullet_y))
				printf("|");
			else
				printf(" ");
		}
		printf("\n");
	}
	printf("得分:%d\n",score);
	
}	


void updateWithoutInput()  // 与用户输入无关的更新
{	
	if(bullet_x>-1)
		bullet_x--;
	if((bullet_x==enemy_x)&&(bullet_y==enemy_y))
	{
		score++;
		speed_score++;
		enemy_x=-1;
		enemy_y=rand()%width;
		bullet_x=-2;
	}
	if(enemy_x>high)
	{
		enemy_x=-1;
		enemy_y=rand()%width;
	}
	static int speed=0;  //加速 
	
		if(speed<10-speed_score)	
			speed++;
		if(speed==10-speed_score){
			enemy_x++;
			speed=0;
	}
}

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++;  // 位置下移
		if (input == ' ')  // 发射子弹
		{
			bullet_x = position_x-1;  // 发射子弹的初始位置在飞机的正上方
			bullet_y = position_y;
		}
		
	}
}

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值