zoukankan      html  css  js  c++  java
  • Java课程设计——个人

    飞机大战

    1.小组博客链接

    https://www.cnblogs.com/yt0617/p/14337817.html)

    2.个人负责部分

    功能架构图(黄圈内为个人负责部分)

    ①碰撞检测

    碰撞检测是游戏中不可或缺的一部分,难点在于确定碰撞的触发如何去实现条件化、数据化。

    本次程序中采用的方法如上图所示,利用敌机和友机的坐标以及长宽,来确定碰撞条件,因为飞机有大小,所以必须确定碰撞产生的区域,如上图灰色区域,当友机的坐标出现在上图灰色的区域内,则判定为触发碰撞。
    设想,未实现

    如上图,将飞机图片细化为一个不规则图形,利用直线进行描边,使得空白碰撞区域更少(如图中飞机周边紫线),理论上来说,描的边越多,碰撞的检测就越精准,但产生碰撞的区域范围很难用代码描述,且需要检测的游戏物品太多,工程量巨大,尚未实现。
    关键实现代码(部分):

    // 判断飞机是否吃到道具
            for (int i = 0; i < this.backGroundPanel.items.size(); i++) {
    
                Item item = this.backGroundPanel.items.get(i);
                
                //当飞机坐标达到临界条件时触发
                if (this.x >= item.x - this.width && this.x <= item.x + item.width && this.y >= item.y - this.height
                        && this.y <= item.y + item.height) {
    
                	//碰撞后道具被吃掉
                    item.eated();
    
                    //吃到升级子弹道具
                    if (item.powerType == 1) {
    
                        if (attackType == 2) {
                            attackType = 3;
                        }
    
                        if (attackMode == 3 && attackType == 1) {
                            attackType = 2;
                        }
    
                        if (attackMode < 3) {
                            attackMode++;
                        }
    
                    }
                }
            }
    

    ②游戏内部动画特效

    游戏中的特效会使得游戏具有更强的观赏性,增加玩游戏的乐趣,因此在游戏中依旧必不可少。
    本程序中利用Graphics类的drawImage等绘图方法,在程序不断运行的过程,将一个动画连续图片,在极短的时间里连续画出来,利用人眼错觉达到动画特效效果。并且,不同的物品有着不同的动画效果和触发效果的条件。
    关键实现代码(部分):

    public Image[] dieImages = new Image[]{
    
                Toolkit.getDefaultToolkit().getImage("images/特效/bullet1/110.png"),
                Toolkit.getDefaultToolkit().getImage("images/特效/bullet1/111.png"),
                Toolkit.getDefaultToolkit().getImage("images/特效/bullet1/112.png"),
                Toolkit.getDefaultToolkit().getImage("images/特效/bullet1/113.png")};
    
    public int dieImageindex = 0;
    
    if (hp > 0) {
        g.drawImage(this.image, x, y, width, height, null);
    } else {
    
        g.drawImage(dieImages[dieImageindex], x, y, width, height, null);
    
        if (backGroundPanel.getTime() % 10 == 0) {
    
             dieImageindex++;
    
             if (dieImageindex >= this.dieImages.length) {
    
                 killed();
    
             }
        }
    }
    

    效果展示

    3.本次课程设计的感想和不足之处

    ①开发过程中的感想

    在游戏中会出现很多不同种类的敌机,如果在代码中将敌机直接实例化写死,这将是一个很大的工程,需要实例化成千上百的对象,这很低效,因此我想到了以前看到过的一种反射机制,利用特殊的Class类和各个类名来在程序运行过程中动态的创建对象,从而高效的减轻了工作量,提高了代码效率

    ②不足之处及展望

    程序的碰撞检测机制实现的太过粗略,只是初级到达了本次课设的要求,并不是一个合格游戏程序可取的,但是在前期的设想中是有更加完善的想法的,例如将飞机图片细化为一个不规则图形,利用直线进行描边,使得空白碰撞区域更少,但产生碰撞的区域范围很难用代码描述,且需要检测的游戏物品太多,工程量巨大,尚未实现,因为始终无法应用出来,逻辑很难实现而放弃了,之后可以在空余时间里将其完善实现出来,让程序更加的成熟。

  • 相关阅读:
    集合(双列)
    集合(单列)
    Struts2.0第三章(文件上传、ajax开发、json、Fastjson、Jackson、注解开发)
    Struts2.0第二章(封装数据获取请求参数、servlet api的获取、ServletActionContext、注入、ognl、valueStack、ActionContext、interceptor拦截器)
    Struts2.0第一章(struts2.0概述,使用步骤,执行流程,各配置文件介绍,Action详解)
    servlet3.0实现文件上传功能
    annotation注解
    ClassLoader类加载器
    Proxy 动态代理(在过滤器中对request使用动态代理解决接受参数乱码问题)
    Filter过滤器(自动登陆、通用的字符集编码的过滤【处理不同请求的乱码问题】、。。。)
  • 原文地址:https://www.cnblogs.com/zx224569/p/14338515.html
Copyright © 2011-2022 走看看