# MagicTower **Repository Path**: laijunxiangit/MagicTower ## Basic Information - **Project Name**: MagicTower - **Description**: 魔塔v1.12 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-28 - **Last Updated**: 2021-07-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 游戏素材 ## 图像素材 | 资源名 | frame 0 | frame 1 | | ------- | :--------------------- | ---------------------- | | 0.png | ![](/res/map0/0.png) | ![](/res/map1/0.png) | | 1.png | ![](/res/map0/1.png) | ![](/res/map1/1.png) | | 2.png | ![](/res/map0/2.png) | ![](/res/map1/2.png) | | 3.png | ![](/res/map0/3.png) | ![](/res/map1/3.png) | | 4.png | ![](/res/map0/4.png) | ![](/res/map1/4.png) | | 5.png | ![](/res/map0/5.png) | ![](/res/map1/5.png) | | 6.png | ![](/res/map0/6.png) | ![](/res/map1/6.png) | | 7.png | ![](/res/map0/7.png) | ![](/res/map1/7.png) | | 8.png | ![](/res/map0/8.png) | ![](/res/map1/8.png) | | 9.png | ![](/res/map0/9.png) | ![](/res/map1/9.png) | | 10.png | ![](/res/map0/10.png) | ![](/res/map1/10.png) | | 11.png | ![](/res/map0/11.png) | ![](/res/map1/11.png) | | 12.png | ![](/res/map0/12.png) | ![](/res/map1/12.png) | | 13.png | ![](/res/map0/13.png) | ![](/res/map1/13.png) | | 14.png | ![](/res/map0/14.png) | ![](/res/map1/14.png) | | 15.png | ![](/res/map0/15.png) | ![](/res/map1/15.png) | | 19.png | ![](/res/map0/19.png) | ![](/res/map1/19.png) | | 20.png | ![](/res/map0/20.png) | ![](/res/map1/20.png) | | 21.png | ![](/res/map0/21.png) | ![](/res/map1/21.png) | | 22.png | ![](/res/map0/22.png) | ![](/res/map1/22.png) | | 23.png | ![](/res/map0/23.png) | ![](/res/map1/23.png) | | 24.png | ![](/res/map0/24.png) | ![](/res/map1/24.png) | | 25.png | ![](/res/map0/25.png) | ![](/res/map1/25.png) | | 26.png | ![](/res/map0/26.png) | ![](/res/map1/26.png) | | 27.png | ![](/res/map0/27.png) | ![](/res/map1/27.png) | | 28.png | ![](/res/map0/28.png) | ![](/res/map1/28.png) | | 30.png | ![](/res/map0/30.png) | ![](/res/map1/30.png) | | 31.png | ![](/res/map0/31.png) | ![](/res/map1/31.png) | | 32.png | ![](/res/map0/32.png) | ![](/res/map1/32.png) | | 33.png | ![](/res/map0/33.png) | ![](/res/map1/33.png) | | 34.png | ![](/res/map0/34.png) | ![](/res/map1/34.png) | | 35.png | ![](/res/map0/35.png) | ![](/res/map1/35.png) | | 36.png | ![](/res/map0/36.png) | ![](/res/map1/36.png) | | 38.png | ![](/res/map0/38.png) | ![](/res/map1/38.png) | | 39.png | ![](/res/map0/39.png) | ![](/res/map1/39.png) | | 40.png | ![](/res/map0/40.png) | ![](/res/map1/40.png) | | 41.png | ![](/res/map0/41.png) | ![](/res/map1/41.png) | | 42.png | ![](/res/map0/42.png) | ![](/res/map1/42.png) | | 43.png | ![](/res/map0/43.png) | ![](/res/map1/43.png) | | 44.png | ![](/res/map0/44.png) | ![](/res/map1/44.png) | | 45.png | ![](/res/map0/45.png) | ![](/res/map1/45.png) | | 46.png | ![](/res/map0/46.png) | ![](/res/map1/46.png) | | 47.png | ![](/res/map0/47.png) | ![](/res/map1/47.png) | | 48.png | ![](/res/map0/48.png) | ![](/res/map1/48.png) | | 49.png | ![](/res/map0/49.png) | ![](/res/map1/49.png) | | 50.png | ![](/res/map0/50.png) | ![](/res/map1/50.png) | | 51.png | ![](/res/map0/51.png) | ![](/res/map1/51.png) | | 52.png | ![](/res/map0/52.png) | ![](/res/map1/52.png) | | 53.png | ![](/res/map0/53.png) | ![](/res/map1/53.png) | | 54.png | ![](/res/map0/54.png) | ![](/res/map1/54.png) | | 55.png | ![](/res/map0/55.png) | ![](/res/map1/55.png) | | 56.png | ![](/res/map0/56.png) | ![](/res/map1/56.png) | | 57.png | ![](/res/map0/57.png) | ![](/res/map1/57.png) | | 58.png | ![](/res/map0/58.png) | ![](/res/map1/58.png) | | 59.png | ![](/res/map0/59.png) | ![](/res/map1/59.png) | | 60.png | ![](/res/map0/60.png) | ![](/res/map1/60.png) | | 61.png | ![](/res/map0/61.png) | ![](/res/map1/61.png) | | 62.png | ![](/res/map0/62.png) | ![](/res/map1/62.png) | | 63.png | ![](/res/map0/63.png) | ![](/res/map1/63.png) | | 64.png | ![](/res/map0/64.png) | ![](/res/map1/64.png) | | 65.png | ![](/res/map0/65.png) | ![](/res/map1/65.png) | | 66.png | ![](/res/map0/66.png) | ![](/res/map1/66.png) | | 67.png | ![](/res/map0/67.png) | ![](/res/map1/67.png) | | 68.png | ![](/res/map0/68.png) | ![](/res/map1/68.png) | | 69.png | ![](/res/map0/69.png) | ![](/res/map1/69.png) | | 70.png | ![](/res/map0/70.png) | ![](/res/map1/70.png) | | 71.png | ![](/res/map0/71.png) | ![](/res/map1/71.png) | | 73.png | ![](/res/map0/73.png) | ![](/res/map1/73.png) | | 75.png | ![](/res/map0/75.png) | ![](/res/map1/75.png) | | 76.png | ![](/res/map0/76.png) | ![](/res/map1/76.png) | | 78.png | ![](/res/map0/78.png) | ![](/res/map1/78.png) | | 80.png | ![](/res/map0/80.png) | ![](/res/map1/80.png) | | 202.png | ![](/res/map0/202.png) | ![](/res/map1/202.png) | | 203.png | ![](/res/map0/203.png) | ![](/res/map1/203.png) | | boss 1(魔龙) | frame 0 | frame 0 | frame 0 | frame 1 | frame 1 | frame 1 | | --------------------------- | ---------------------- | ---------------------- | ---------------------- | ---------------------- | ---------------------- | ---------------------- | | 181.png + 182.png + 183.png | ![](/res/map0/181.png) | ![](/res/map0/182.png) | ![](/res/map0/183.png) | ![](/res/map1/181.png) | ![](/res/map1/182.png) | ![](/res/map1/183.png) | | 184.png + 185.png + 186.png | ![](/res/map0/184.png) | ![](/res/map0/185.png) | ![](/res/map0/186.png) | ![](/res/map1/184.png) | ![](/res/map1/185.png) | ![](/res/map1/186.png) | | 187.png + 188.png + 189.png | ![](/res/map0/187.png) | ![](/res/map0/188.png) | ![](/res/map0/189.png) | ![](/res/map1/187.png) | ![](/res/map1/188.png) | ![](/res/map1/189.png) | | boss 2(血影) | frame 0 | frame 0 | frame 0 | frame 1 | frame 1 | frame 1 | | --------------------------- | ---------------------- | ---------------------- | ---------------------- | ---------------------- | ---------------------- | ---------------------- | | 191.png + 192.png + 193.png | ![](/res/map0/191.png) | ![](/res/map0/192.png) | ![](/res/map0/193.png) | ![](/res/map1/191.png) | ![](/res/map1/192.png) | ![](/res/map1/193.png) | | 194.png + 195.png + 196.png | ![](/res/map0/194.png) | ![](/res/map0/195.png) | ![](/res/map0/196.png) | ![](/res/map1/194.png) | ![](/res/map1/195.png) | ![](/res/map1/196.png) | | 197.png + 198.png + 199.png | ![](/res/map0/197.png) | ![](/res/map0/198.png) | ![](/res/map0/199.png) | ![](/res/map1/197.png) | ![](/res/map1/198.png) | ![](/res/map1/199.png) | 游戏主背景图: ![](E:/MagicTower-master/MagicTower-master/res/GameBg.png) 战斗背景图: ![](E:\MagicTower-master\MagicTower-master\res\BattleBg.png) ## 音乐素材 ![1618069823214](C:\Users\Administrator\AppData\Local\Temp\1618069823214.png) atk.wav 战斗音效 door.wav 开门音效 get.wav 获得道具音效 stair.wav 上楼下楼音效 bgm1.wav 背景音乐1 bgm2.wav 背景音乐2 ## 对话文本 ![1618070026340](C:\Users\Administrator\AppData\Local\Temp\1618070026340.png) ## 游戏数据 ### 怪物基础数值 ![1618070289154](C:\Users\Administrator\AppData\Local\Temp\1618070289154.png) ### 地图数据 ![1618070656329](C:\Users\Administrator\AppData\Local\Temp\1618070656329.png) # 对象类设计 ## 1.玩家类 ![1618071138298](C:\Users\Administrator\AppData\Local\Temp\1618071138298.png) ## 2.怪物类 ![1618071231502](C:\Users\Administrator\AppData\Local\Temp\1618071231502.png) # 数据类设计 图像数据 ``` HashMap playerMap = new HashMap<>(); ``` 使用hashmap存储图像 怪物数据 ``` HashMap monsterMap = new HashMap<>(); ``` 使用hashmap存储怪物数据 地图数据 ``` short[][][] LvMap; int[][] initPos; int[][] finPos; ``` 使用三维数组存储0--21层的地图 使用二维数组记录走过楼梯通道后的位置 # 功能类设计 战斗功能 (圣光徽)预测功能 播放音乐功能 ``` private static Clip clip = null; public static void playMusic(String music, int count){ try { File musicPath = new File (System.getProperty ("user.dir") + "/res/music/"+music+".wav"); AudioInputStream audioInput = AudioSystem.getAudioInputStream (musicPath); clip = AudioSystem.getClip (); clip.open (audioInput); clip.loop (count); } catch (Exception e) { e.printStackTrace (); } } ``` 使用javasound组件播放音乐 (风之罗盘)楼层跳跃功能 对话功能 读档存档功能 ``` public static void save(){ try { DataOutputStream localDataOutputStream = new DataOutputStream ( new FileOutputStream (System.getProperty ("user.dir") +"/res/save/"+"save"+".txt")); for (int i = 0; i < LvMap.length; i++) { for (int j = 0; j < 11; j++) { for (int k = 0; k < 11; k++) { localDataOutputStream.writeShort(LvMap[i][j][k]); } } } localDataOutputStream.writeInt (playerBean_1.getLevel ()); localDataOutputStream.writeInt (playerBean_1.getHp ()); localDataOutputStream.writeInt (playerBean_1.getAttack ()); localDataOutputStream.writeInt (playerBean_1.getDefend ()); localDataOutputStream.writeInt (playerBean_1.getMoney ()); localDataOutputStream.writeInt (playerBean_1.getExp ()); localDataOutputStream.writeInt (playerBean_1.getYkey ()); localDataOutputStream.writeInt (playerBean_1.getBkey ()); localDataOutputStream.writeInt (playerBean_1.getRkey ()); localDataOutputStream.writeInt (currentFloor); localDataOutputStream.writeInt (maxFloor); localDataOutputStream.writeInt (playerBean_1.getPosX ()); localDataOutputStream.writeInt (playerBean_1.getPosY ()); localDataOutputStream.writeInt (playerBean_1.getToward ()); localDataOutputStream.writeInt (gameMin); localDataOutputStream.writeDouble (gameSec); localDataOutputStream.close(); } catch (Exception e) { e.printStackTrace (); } } public static void load(){ try { DataInputStream localDataInputStream = new DataInputStream ( new FileInputStream (System.getProperty ("user.dir") +"/res/save/"+"save"+".txt")); for (int i = 0; i < LvMap.length; i++) { for (int j = 0; j < 11; j++) { for (int k = 0; k < 11; k++) { LvMap[i][j][k] = localDataInputStream.readShort (); } } } playerBean_1.setLevel (localDataInputStream.readInt ()); playerBean_1.setHp (localDataInputStream.readInt ()); playerBean_1.setAttack (localDataInputStream.readInt ()); playerBean_1.setDefend (localDataInputStream.readInt ()); playerBean_1.setMoney (localDataInputStream.readInt ()); playerBean_1.setExp (localDataInputStream.readInt ()); playerBean_1.setYkey (localDataInputStream.readInt ()); playerBean_1.setBkey (localDataInputStream.readInt ()); playerBean_1.setRkey (localDataInputStream.readInt ()); currentFloor = localDataInputStream.readInt (); maxFloor = localDataInputStream.readInt (); playerBean_1.setPosX (localDataInputStream.readInt ()); playerBean_1.setPosY (localDataInputStream.readInt ()); playerBean_1.setToward (localDataInputStream.readInt ()); gameMin = localDataInputStream.readInt (); gameSec = localDataInputStream.readDouble (); localDataInputStream.close (); } catch (Exception e) { e.printStackTrace (); } } ``` 消息提示功能