飞机游戏

此博客链接:https://www.cnblogs.com/ping2yingshi/p/14065965.html

飞机游戏

慕课地址:https://www.icourse163.org/course/HHU-1206797807 。

1.分析

飞机大战游戏中,要求包括移动飞机、发射子弹、敌机移动、消灭敌机、被敌机撞击。

可以根据要求一步一步完成。

2.设计

  1. 实现移动的飞机。这里以一个*代替飞机。首先在控制台中显示一个*,其次在控制台中规定飞机移动的边界,最后在固定位置显示一个飞机,通过控制*的坐标实现在不同位置显示飞机。通过控制键盘输入的字符来改变飞机移动的方向。
  2. 给飞机添加子弹。子弹刚被发射时,应该在飞机上方,并且和飞机在同一列。当按键盘某个键时,才应该触发发射子弹,并且子弹在打出之后,应该按照原来的横坐标向上走。以|表示子弹。
  3. 添加敌机。首先在屏幕的上方显示一个敌机,这里以@表示敌机。其次敌机是可以自动下落的。每次出现的敌机应该在不同位置出现,这样更能增加游戏的趣味性。
  4. 消灭敌机。当子弹的横坐标和敌机的横坐标相同并且纵坐标相同时,表示子弹击中敌机,这时敌机应该消失。
  5. 被敌机碰撞。当敌机的横坐标和飞机的横坐标相同,敌机的纵坐标和飞机的纵坐标相同时,表示敌机与玩家飞机碰撞,这时游戏应该结束。

3.关键技术和代码片段

3.1显示飞机,子弹和敌机

3.1.1说明

在显示飞机时,使用双重循环(双重循环的是飞机可移动的范围),第一层循环控制纵坐标即换行。第二层循环控制行即空格。在循环中判断是否到达应该显示飞机的位置,如果到达则显示飞机,同理可显示子弹和敌机。

3.1.2代码片段

	for(i=0;i<bord_y;i++)
	{
		for(j=0;j<bord_x;j++)
		{
		       if((i==flay_y)&&(j==flay_x)){//显示飞机
                            printf("*");
			}
			else if((i==zidan_y)&&(j==zidan_x)){//显示子弹
                             printf("|");
			}
		        else if((i==diji_y)&&(j==diji_x)){	//显示敌机
                             printf("@");
			}
			else{
			     printf(" ");
			}
		}
		printf("
");
	}

3.2控制飞机和敌机不同速度

3.2.1说明

飞机和敌机应该是不同速度的,按理说敌机速度应该慢一点,飞机速度应该快一点,这样可以降低游戏难度。可以把敌机速度变慢,这样飞机速度也就相对变快。给敌机增加一个速度的变量,当变量增加到一定的值时,敌机才下落一次就可以实现敌机速度变慢。

3.2.2代码

        if(speed<5)
	  {
		  speed++;
	  }
	  if(speed==5){
	  //敌机边界监测
	        if((diji_y>bord_y))
	       {
                    diji_y=0;
	            diji_x=rand()%20;
	       }
	      else
		   diji_y=diji_y++;
	      speed=0;
	  }

4.测试及调试代码

4.1新建运行程序

刚新建一个项目,编译运行就报错。是 因为程序还在运行,所以链接器写exe文件失败。

重现bug,当正在运行的程序没有关闭,再次编译运行时,就会出现这个错误。把进程结束,重新编译运行就可以解决报错。

4.2测试敌机下落

4.2.1说明

当敌机下降,发射子弹时,按键盘时,控制台就不动了。

4.2.2调试

看代码没有问题呢,查看视频,发现我判断输入时,在每个判断中使用的是当前从键盘获取的字符,所以每次判断不正确时,也需要从键盘重新输入字符。

4.3测试消灭敌机

4.3.1说明

消灭敌机时,发现敌机的速度太快了,我跟不上,降低敌机速度,又发现飞机超出边界时,就没有飞机了,这个边界条件没有考虑。

4.3.1调试

修改边界条件。敌机速度太快在写消灭敌机功能时,没有想好怎样修改。在后面才知道怎么做的。

4.4测试敌机和飞机碰撞

4.4.1说明

当敌机和飞机碰撞后,我想暂停一下,让用户选择是继续游戏还是退出游戏,当输入c时,继续游戏,当输入e时结束游戏,但是从键盘获取输入的字符时,获取不到键盘输入的字符。

4.4.2调试

添加断点发现是getch()没有获取到键盘输入的字符,无论点击任何字符程序都会退出。但是感觉程序一点错也没有,后来请教师弟,经过一番测试,原来是因为我在main()函数中,在循环程序前添加了一个判断分数的语句,当分数小于0时,游戏结束。所以无论我按什么,都显示程序结束。

4.5速度问题

4.5.1说明

当希望敌机速度变慢时,加了sleep()函数,但是飞机速度也会跟着变化,这需要把敌机和飞机的速度分开,当敌机速度变慢时并不影响飞机的速度。

4.5.2设计

给敌机下降添加一个速度判断,如果敌机程序执行5次,敌机才下降一次。

5.效果动态图

 

6.psp

 7.全部代码

 git地址:https://github.com/yangping2019102953/planegame.git 。

出来混总是要还的
原文地址:https://www.cnblogs.com/ping2yingshi/p/14065965.html