打飞机游戏加强版

还是按照童老师在网易云授课写的代码,emmmm。

执行环境是VS2017.

现在功能:1,计分;2,按ESC暂停:3,绘制边框;4,根据分数控制速度,分数越高速度越快;5,飞机是复杂图形

未完成功能:1,提示用户运行飞机时候不要越界;2,在框子外右边写游戏规则;3,增加其他功能

以下为代码:


//消灭敌机加强版

#include<stdio.h> 
#include<stdlib.h>                                        
#include <windows.h>                                     //清屏函数加上隐藏光标
#include<conio.h>                                        //输入字符不显示

void Starup();
void show();;
void updateWithoutinput();
void updateWithinput();
void gotoxy(int x, int y);
void HideCursor();

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

	}

	system("pause");
	return 0;
}
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 };
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}


//函数外全局变量定义

int poison_x;                                            //飞机位置
int poison_y;

int enemy_x;                                            //敌机位置
int enemy_y;

int wideth;                                             //游戏界面
int high;

int bullet_x;                                           //子弹位置
int bullet_y;

int score;                                              //计算分数

const int num_speed = 5;

void Starup()                                           //数据初始化
{ 
     wideth = 50;                                       //游戏界面位置初始化
	 high = 20;

	 poison_x = wideth / 2;                             //飞机位置初始化在游戏界面中间
	 poison_y = high / 2;

	 enemy_x = wideth / 2;                              //敌机位置初始化在第一排最中间
	 enemy_y = 1;

	 bullet_x = poison_x;                               //初始化子弹位置,设置-1为了起初不显示子弹
	 bullet_y = -1;

	 score = 0;

	 HideCursor();                                     // 隐藏光标
}

void show()                                            //显示画面
{
	gotoxy(0, 0);                                      // 光标移动到原点位置,以下重画清屏
    
	int i, j;
	for (i = 0; i < high; i++)
	{
		for (j = 0; j < wideth; j++)
		{ 
			if (i == 0 || j == 0 || i == (high - 1) || j == (wideth - 1))     //输出边框
				printf("#");
			else if ((i == poison_y) && (j == poison_x))                      //输出飞机
				printf("*");
			else if ((i == poison_y + 1) && (j >= poison_x - 1)&(j <= poison_x + 1))
				printf("*");
			else if ((i == bullet_y) && (j == bullet_x))                      //输出子弹
				printf("|");
			else if ((i == enemy_y) && (j == enemy_x))                        //输出敌机
				printf("+");
		    else
				printf(" ");
		}
	printf("\n");
    }
}


void updateWithoutinput()                                 //与用户输入无关的更新
{
    static int speed=0;                                   //降低靶子速度
	speed++;
	
	bullet_y--;                                           //发射子弹

	if (score <= 20)                                      //根据得分分段加速
	{
		if (speed < 4 * num_speed)                        
			speed++;
		if (speed == 4 * num_speed)
		{
			if (enemy_y < high)
				enemy_y++;                                //靶子下降
			else
			{
				enemy_y = 1;
				enemy_x = rand() % wideth + 1;            //靶子下降到底端的时候取随机数1-wideth重新生成
			}
			speed = 0;
		}
	}
	else if (score <= 40)
	{
		if (speed < 2 * num_speed)
			speed++;
		if (speed == 2 * num_speed)
		{
			if (enemy_y < high)
				enemy_y++;                                //靶子下降
			else
			{
				enemy_y = 1;
				enemy_x = rand() % wideth + 1;            //靶子下降到底端的时候取随机数1-wideth重新生成
			}
			speed = 0;
		}
	}
	else
	{
		if (speed < num_speed)
			speed++;
		if (speed == num_speed)
		{
			if (enemy_y < high)
				enemy_y++;                                //靶子下降
			else
			{
				enemy_y = 1;
				enemy_x = rand() % wideth + 1;            //靶子下降到底端的时候取随机数1-wideth重新生成
			}
			speed = 0;

		}
	}
	
	if ((bullet_x == enemy_x) && (bullet_y == enemy_y))
	{
		score++;
		enemy_y = -1;
		enemy_x = rand() % wideth + 1;
	}
	printf("score:%d\n", score);                         //打印分数
}

void updateWithinput()                                //与用户输入有关的更新
{
	char input;
	if (_kbhit())                                     // 判断是否有输入
	{
		input = _getch();                             // 根据用户的不同输入来移动,不必输入回车

		if (input == 'a')                             //通过输入字符来控制飞机运行
			poison_x--;
		if (input == 'd')
			poison_x++;
		if (input == 'w')
			poison_y--;
		if (input == 's')
			poison_y++;

		if (input == ' ')                             //发射子弹
		{   
			bullet_y = poison_y - 1;
			bullet_x = poison_x;
		}
		if (input ==27)
			system("pause");
	}
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
飞机(Fighter)是一款有趣又益智的游戏。它可以培养游戏者的逻辑推理能力,适合各种年龄段的人玩。 该游戏原本是我读本科时在宿舍里和同学一起玩的。需要两人以上合作,互相布局互相“开炮”。非常好玩。这次,我把游戏改成计算机版本,(可选计算机自动布局和手动布局两种模式),可以单机玩,也可以由别人布局在由你玩。 1、游戏界面 游戏启动后左边为10×10的“天空”,其中暗藏了三架以“士”字形分布的飞机,其中红色块表示飞机头,灰色块表示其他机身部位,黑色块表示此格无飞机,为空。 主窗口右边顶端分布六个按钮,表示各种功能。 开始:开始一局新游戏。缺省状态为由计算机自动布局。 保存:表示保存当前游戏中的飞机布局。你在玩游戏时可能觉得某一次飞机的布局特别巧妙,很难推出飞机头所在。你就可以利用本功能把该飞机布局保存下来,发给你的朋友,考考他的推理能力。 载入:载入飞机布局的文件,载入完毕后直接开始。 布局:手动布局。请按“士”字形在10×10的“天空”中分布好飞机,然后点击“开始”。游戏将自动检测飞机布局是否正确。 选项:选项里面包含许多信息。“设置”栏包括是否打开音效,是否在桌面上创建快捷方式,以及选择老板键打开的文件。“鼠标操作”栏提示游戏的鼠标操作;“关于”栏说明游戏的一些版权信息。 退出:离开本游戏游戏界面右下脚为游戏信息区,显示游戏的一些提示信息。再下面是游戏结果显示区。 鼠标操作: 游戏进行中: 左键双击:发炮弹。在推断飞机特别是在机头的所在格后请果断“开炮”。 左键单机:游戏中的辅助功能。用于表示你推断所点击的那格有飞机。再次点击取消推测。 右键单击:游戏中的辅助功能。用于表示你推断所点击的那格没有飞机。再次点击取消推测。 游戏手动布局中: 左键单击:表示该格分布为飞机头。再次点击取消该格布局。 右键单击:表示该格分布为飞机的其他机身部位。再次点击取消该格布局。 键盘操作: Enter、Escape:退出游戏。退出之前需要确认。 F2:重新启动新游戏。 Q、q:老板键,哈哈。老板过来时按此键游戏自动变小为任务栏上的小图标,随后自动打开一个cpp文件(或txt文件,由你在“选项”对话框中指定)“假装”你刚才在编程序。 玩法: 点击“开始”进行新游戏(技巧:可以直接双击“天空”开始)。然后双击“天空”。你需要分析已发炮弹的命中情况来推断三架飞机的机头。只有击中飞机头,才算击落该飞机。你的任务就是用最少的炮弹击落三架飞机游戏进行过程中会自动记录已发炮弹数,已击落飞机和炮弹命中率。 三架飞机均被击落后,游戏根据炮弹数进行排行。若进入前十名,则跳出对话框输入你的姓名,进入排行榜。 作者信息: 本游戏为自由软件。源代码公开,需要者可以向作者email联系。若你有其他建议,务必发email至:xiaogi@sohu.com 也欢迎访问作者主页:http://xiaogi.nease.net

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值