zoukankan      html  css  js  c++  java
  • 飞机游戏

    此博客链接: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 。

    出来混总是要还的
  • 相关阅读:
    [iOS开发] 使用Jenkins自动打包并上传至蒲公英
    修改Jenkins的BUILD_NUMBER
    RabbitMQ on windows开启远程访问
    SpringMVC 表单复选框处理
    Spring文件上传配置
    ES6中Reflect 与 Proxy
    vuex中getter的用法
    Toast组建的实现
    link和@import的区别
    Vue组件之props选项
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14065965.html
Copyright © 2011-2022 走看看