levelloader.java

来自「游戏学院《天下武王》教学实例」· Java 代码 · 共 668 行 · 第 1/2 页

JAVA
668
字号
        //多个行走区
        while (st.hasMoreElements()) {

            String walkArea = st.nextToken().trim();

            if (walkArea.length() == 0) {
                break;
            }

            st2 = new StringTokenizer(walkArea, "|");

            TiledLayer t2 = new TiledLayer(map.cols, map.cols, material,
                                           level.tileWidth, level.tileHeight);

            count = 0;
            while (st2.hasMoreTokens()) {
                int column = count % map.cols;
                int row = (count - column) / map.cols;
                t2.setCell(column, row, Integer
                           .parseInt(st2.nextToken().trim()));
                count++;
            }

            map.walkableArea.addElement(t2);
        }

        ht.put(new Integer(map.mapNo), map);

        level.maps = ht;

    }


    /**
     * 解析NPC数据段
     * @param nd
     * @param level
     */

    private void parseNPCData(String nd, Level level) {

        StringTokenizer st = new StringTokenizer(nd, "#");
        Hashtable ht = new Hashtable();
        while (st.hasMoreTokens()) {
            String npcData = st.nextToken();
            if (npcData.trim().length() == 0) {
                break;
            }
            NPC npc = new NPC();
            StringTokenizer st2 = new StringTokenizer(npcData, "|");

            String item = st2.nextToken().trim();
            npc.ID = Integer.parseInt(item);

            item = st2.nextToken().trim();
            npc.name = item;

            item = st2.nextToken().trim();
            npc.type = Integer.parseInt(item);

            item = st2.nextToken().trim();
            npc.attackPoint = Integer.parseInt(item);

            item = st2.nextToken().trim();
            npc.defendPoint = Integer.parseInt(item);

            item = st2.nextToken().trim();
            int id = Integer.parseInt(item);
            if (id >= 0) {
                Image srcImage = (Image) level.allImages.get(new Integer(id));
                int tw = Integer.parseInt(st2.nextToken().trim());
                int th = Integer.parseInt(st2.nextToken().trim());
                npc.sprite = new Sprite(srcImage, tw, th);
                item = st2.nextToken().trim();
                npc.startFrameIndex = Integer.parseInt(item);
                //				System.out.println("npc.startFrameIndex="+npc.startFrameIndex);
                item = st2.nextToken().trim();
                npc.endFrameIndex = Integer.parseInt(item);
                //				System.out.println("npc.endFrameIndex="+npc.endFrameIndex);
            }

            //对话类NPC

            if (npc.type == 1) {
                String talks = st2.nextToken().trim();
                StringTokenizer st3 = new StringTokenizer(talks, "^");
                Vector tv = new Vector();
                while (st3.hasMoreTokens()) {
                    item = st3.nextToken();

                    tv.addElement(item.trim());
                }
                npc.talkContents = tv;
                //武器贩卖类
            } else if (npc.type == 2) {
                npc.jacketVec = new Vector();
                npc.weaponVec = new Vector();
                item = st2.nextToken().trim();
                item = item.substring(1, item.length() - 1);
                StringTokenizer st3 = new StringTokenizer(item, "^");
                Hashtable all = level.properties;
                while (st3.hasMoreElements()) {
                    String temp = st3.nextToken();
                    Property p = (Property) all.get(Integer.valueOf(temp));
                    if (p.type == 1) {
                        npc.weaponVec.addElement(p);
                    } else if (p.type == 3) {
                        npc.jacketVec.addElement(p);
                    }
                }
                //药品贩卖类
            } else if (npc.type == 3) {
                npc.medicVec = new Vector();

                item = st2.nextToken().trim();
                item = item.substring(1, item.length() - 1);
                StringTokenizer st3 = new StringTokenizer(item, "^");
                Hashtable all = level.properties;
                while (st3.hasMoreElements()) {
                    String temp = st3.nextToken();
                    Property p = (Property) all.get(Integer.valueOf(temp));
                    if (p.type == 2) {
                        npc.medicVec.addElement(p);
                    }
                }

            }

            ht.put(new Integer(npc.ID), npc);

        }

        level.npcs = ht;
    }

    //解析道具数据
    private void parsePropertyData(String pd, Level level) {
        StringTokenizer st = new StringTokenizer(pd, "#");
        Hashtable ht = new Hashtable();
        while (st.hasMoreTokens()) {
            String property = st.nextToken();
            if (property.trim().length() == 0) {
                break;
            }

            Property pro = new Property();
            StringTokenizer st2 = new StringTokenizer(property, "|");

            String item = st2.nextToken().trim();

            pro.ID = Integer.parseInt(item);

            item = st2.nextToken().trim();
            pro.name = item;

            item = st2.nextToken().trim();
            pro.type = Integer.parseInt(item);

            item = st2.nextToken().trim();
            pro.description = item;

            item = st2.nextToken().trim();
            pro.price = Integer.parseInt(item);

            item = st2.nextToken().trim();
            pro.addHP = Integer.parseInt(item);

            item = st2.nextToken().trim();
            pro.addMP = Integer.parseInt(item);

            item = st2.nextToken().trim();
            pro.addAttackPoint = Integer.parseInt(item);

            item = st2.nextToken().trim();
            pro.addDefendPoint = Integer.parseInt(item);

            item = st2.nextToken().trim();
            int id = Integer.parseInt(item);
            //有图片
            if (id >= 0) {
                Image srcImage = (Image) level.allImages.get(new Integer(id));
                int tw = Integer.parseInt(st2.nextToken().trim());
                int th = Integer.parseInt(st2.nextToken().trim());
                pro.sprite = new Sprite(srcImage, tw, th);
                item = st2.nextToken().trim();
                pro.startFrameIndex = Integer.parseInt(item);

                item = st2.nextToken().trim();
                pro.endFrameIndex = Integer.parseInt(item);
            }

            ht.put(new Integer(pro.ID), pro);

        }

        level.properties = ht;

    }

    /**
     * 解析技能数据段
     * @param sd
     * @param level
     */

    private void parseSkillsData(String sd, Level level) {
        StringTokenizer st = new StringTokenizer(sd, "#");
        Hashtable ht = new Hashtable();
        while (st.hasMoreTokens()) {
            String skill = st.nextToken();
            if (skill.trim().length() == 0) {
                break;
            }
            Skill sk = new Skill();
            StringTokenizer st2 = new StringTokenizer(skill, "|");

            String item = st2.nextToken().trim();
            sk.ID = Integer.parseInt(item);

            item = st2.nextToken().trim();
            sk.name = item;

            item = st2.nextToken().trim();
            sk.description = item;

            item = st2.nextToken().trim();
            sk.type = Integer.parseInt(item);

            item = st2.nextToken().trim();
            sk.requiredLevel = Integer.parseInt(item);

            item = st2.nextToken().trim();
            sk.price = Integer.parseInt(item);

            item = st2.nextToken().trim();
            sk.isPercent = Integer.parseInt(item) > 0 ? true : false;

            item = st2.nextToken().trim();
            sk.mpCost = Integer.parseInt(item);

            item = st2.nextToken().trim();
            sk.hpCost = Integer.parseInt(item);

            item = st2.nextToken().trim();
            sk.addAttackPoint = Integer.parseInt(item);

            item = st2.nextToken().trim();
            sk.addDefendPoint = Integer.parseInt(item);

            item = st2.nextToken().trim();
            int id = Integer.parseInt(item);
            //有图片
            if (id >= 0) {
                Image srcImage = (Image) level.allImages.get(new Integer(id));
                System.out.println("srcImage=" + srcImage);
                int tw = Integer.parseInt(st2.nextToken().trim());
                int th = Integer.parseInt(st2.nextToken().trim());
                sk.sprite = new Sprite(srcImage, tw, th);
                item = st2.nextToken().trim();
                sk.startFrameIndex = Integer.parseInt(item);

                item = st2.nextToken().trim();
                sk.endFrameIndex = Integer.parseInt(item);
            }

            ht.put(new Integer(sk.ID), sk);

        }

        System.out.println("skill ht=" + ht);

        level.skills = ht;

    }

    /**
     * 解析关卡元素据段
     * @param metaData
     * @param level
     */
    private void parseMetaData(String metaData, Level level) {
        int index1 = metaData.indexOf("[");
        int index2 = metaData.indexOf("]", index1);
        String s1 = metaData.substring(index1 + 1, index2);
        StringTokenizer st = new StringTokenizer(s1, "|");

        String item = st.nextToken();
        level.name = item;

        item = st.nextToken();
        level.description = item;

        item = st.nextToken();
        level.tileWidth = (Integer.parseInt(item));

        item = st.nextToken();
        level.tileHeight = (Integer.parseInt(item));

        index1 = metaData.indexOf("[", index2 + 1);
        index2 = metaData.indexOf("]", index1 + 1);

        s1 = metaData.substring(index1 + 1, index2);
        st = new StringTokenizer(s1, "|");

        level.missionDesc = st.nextToken();
        level.missionType = Integer.parseInt(st.nextToken());
        level.missionValue = Integer.parseInt(st.nextToken());

        index1 = metaData.indexOf("[", index2 + 1);
        index2 = metaData.indexOf("]", index1 + 1);

        s1 = metaData.substring(index1 + 1, index2);
        st = new StringTokenizer(s1, "|");

        Hashtable ht = new Hashtable();

        while (st.hasMoreTokens()) {
            item = st.nextToken();
            item = item.substring(1, item.length() - 1);
            int index = item.indexOf(",");
            int id = Integer.parseInt(item.substring(0, index));
            String imageFile = item.substring(index + 1);
            Image image = (Image) ResourceLoader.pngFiles.get(imageFile);

            if (image != null) {
                ht.put(new Integer(id), image);
            }

        }
        level.allImages = (ht);
    }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?