2018-2019学年第一学期Java课设--魔塔

Magic-Towers

一、团队名称、团队成员介绍、任务分配

团队名称:MoTa

团队成员介绍

  网络1713柳聪灵【组长】 201721123065

  网络1712李梦冰 201721123040

  网络1713兰景晖 201721123064

任务分配

 网络1713柳聪灵【组长】--Model

  • 游戏布局及障碍物的编码及方法定义
  • 游戏里的道具:钥匙、药水的编码及方法定义
  • 游戏npc的编码及方法定义
  • 画UML类图

 网络1713兰景晖 --View

  • 游戏道具及场景的视图
  • GUI界面设计:主界面、各类弹窗

 网络1712李梦冰 --Controller

  • 玩家数据I/O流
  • 游戏内部监听器:存档、选角色、退出
  • 游戏地图数据
  • 编写团队博客

二、项目简介

《魔塔》是一种策略类的固定数值RPG游戏。游戏需要动很多脑筋,任何一个轻率的选择都可能导致游戏的失败。魔塔游戏虽不大,但是制作精美,道具很多,而且难度不低,对智商是一次艰巨的考验。虽然魔塔的界面很像是一般的地牢游戏,貌似随便的打打杀杀就可以过关,但事实上玩这个游戏需要动很多脑筋,任何一个轻率的选择都可能导致游戏的失败,该游戏有属性攻击、防御、生命、金币、经验。

三、项目采用技术

  • 文件I/O流
  • 多线程
  • GUI

四、项目亮点

主界面显示主要信息功能

游戏动画

  • 攻击者自由移动并有向不同方向移动的动作

  • 攻击者生命力减少及怪物消失

  • 各个怪物有规律跳动


  • 开门成功后门碎裂

  • 全家福

五、项目关键代码

数据I/O流功能

/*
游戏过程中,玩家由于各种原因需要退出终止游戏,但是还想下次继续游戏。所以设计了游戏进度的保存/读取的功能。使用了FileOutputStream、BufferedOutputStream、 ObjectOutputStream结合使用。
*/
public class PlayerFile {

		public static final void savePlayer(Player player) {//保存玩家数据
			//try-with-resource
			try ( FileOutputStream out = new FileOutputStream("player.dat");
					BufferedOutputStream bout = new BufferedOutputStream(out);
					ObjectOutputStream obout = new ObjectOutputStream(bout);) {
				obout.writeObject(player);
			} catch (IOException e) {
			}
		}
		public static final Player readPlayer() {//读取玩家数据
			Player player = null;
			try (FileInputStream in = new FileInputStream("player.dat");
					BufferedInputStream bin = new BufferedInputStream(in);
					ObjectInputStream obin = new ObjectInputStream(bin);) {
				player = (Player) obin.readObject();
			} catch (IOException e) {
			} catch (ClassNotFoundException e) {
			}
			return player;
		}
}

游戏动作监听器功能(部分)

/**
	 * 人物碰触格子
	 */
	private void contact(int x, int y) {
		// 坐标对应第y行第x列
		if (mapData[y][x].contact(player)) {
			// 可以通过时
			Component component = mapView.getComponent(x + y * 11);
			// 获取该位置组件并判断是否为门
			if (mapData[y][x] instanceof Door) {
				mapData[y][x] = Floor.FLOOR;
				inofView.update();
				mainView.setVisible(true);
				((DoorView) component).show();
				return;
			}
			mapView.remove(playerView);
			mapView.add(new FloorView(), player.getX() + player.getY() * 11);
			mapView.remove(x + y * 11);
			mapView.add(playerView, x + y * 11);
			player.setCoord(x, y);
			// 通过后显示提示
			showInof(x, y);
			
			if (mapData[y][x].getType() != Stairs.STAIRS_TYPE_DOWN_BIRTH
					&& mapData[y][x].getType() != Stairs.STAIRS_TYPE_UP_BIRTH) {
				mapData[y][x] = Floor.FLOOR;
				player.getMapDataList().get(player.getNowFloor() - 1)[y][x] = 0;
			}
		} else {//不能通过
			noEntryInof(x, y);
		}
	}

门及怪物的动画消失代码

六、项目git地址及个人博客地址

  git地址

  聪灵博客地址

  梦冰博客地址

  景晖博客地址

七、项目git提交记录截图(要体现出每个人的提交记录、提交说明)

八、项目Issue记录截图

九、项目功能架构图与主要功能流程图

十、UML类图

十一、代码静态扫描

第一次扫描

全部解决

十二、尚待改进或者新的想法

  本次课设我们组最大的遗憾是没有把网络和数据库的技术运用到,这一点尚待改进。
  我们还有将地图规划到50层的想法。

十三、参考文献:

  基于java的魔塔游戏的设计与实现

原文地址:https://www.cnblogs.com/lmb171004/p/10271667.html