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的魔塔游戏的设计与实现
2018-2019学年第一学期Java课设--魔塔的更多相关文章
- 2018-2019学年第一学期Java课程设计
		
目录 Magic-Towers 一.团队课程设计博客链接 [团队博客地址](https://www.cnblogs.com/lmb171004/p/10271667.html 二.个人负责模块或任 ...
 - JAVA课设---五子棋
		
1.团队博客链接 JAVA课设-五子棋-团队博客 2.个人负责模块: ①对鼠标事件的处理 , 此模块需处理五子棋的放置问题.颜色转换问题.以及当五子连线时弹出窗口显示结果. ②对MainFrame中主 ...
 - JAVA课设个人博客--多源数据教学管理系统
		
JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...
 - java课设数据库打包报错
		
最近在交java课设时把东西打包给老师遇到许多奇葩问题, 首先是数据库复制时提示: 这是数据库与SQL server服务没有分离(我用的是SQLserver暂时,对于其他的,我以后会继续尝试)可以进行 ...
 - JAVA课设——中药古籍《太平圣惠方》数据处理与分析系统
		
一.配置JAVA环境 本次课设是在Windows 10(64bit)平台上实现的,所以首先得配置下JAVA环境. 步骤一:先下载一个JDK(1.7)安装包,安装好JDK: 步骤二:JDK环境配置(由于 ...
 - 复旦大学2014--2015学年第一学期高等代数I期末考试情况分析
		
一.期末考试成绩班级前几名 金羽佳(92).包振航(91).陈品翰(91).孙浩然(90).李卓凡(85).张钧瑞(84).郭昱君(84).董麒麟(84).张诚纯(84).叶瑜(84) 二.总成绩计算 ...
 - 复旦大学2018--2019学年第一学期高等代数I期末考试情况分析
		
一.期末考试成绩90分以上的同学(共21人) 周烁星(99).封清(99).叶雨阳(97).周子翔(96).王捷翔(96).张思哲(95).丁思成(94).陈宇杰(94).谢永乐(93).张哲维(93 ...
 - 复旦大学2017--2018学年第一学期高等代数I期末考试情况分析
		
一.期末考试成绩班级前十名 郭宇城(100).魏一鸣(93).乔嘉玮(92).刘宇其(90).朱柏青(90).王成文健(90).方博越(88).熊子恺(88).张君格(88).崔镇涛(87).史书珣( ...
 - 转入软工后第一节java课的作业
		
这个作业,鸽了好久.本来大家都在中秋前发了,我摸摸索索加上各种缓慢的学习,终于是将他做完了. 做完之后,java最基本的输入输出功能都基本学习到了.下面附上代码: import java.util.* ...
 
随机推荐
- HDU 3226 背包
			
转载自:http://www.cppblog.com/dango/archive/2010/08/26/124881.aspx 貌似是01背包的强化版.但是感觉这样写好理解些.就是01背包拓展了.
 - bzoj2014
			
题解: 按照单价排序 然后贪心 代码: #include<bits/stdc++.h> using namespace std; ; typedef long long ll; ll an ...
 - Oracle 数据库分析
			
一.数据库分析 二.表的分析 1.分析表exec dbms_stats.gather_table_stats('SFISM4','R_SN_DETAIL_T',CASCADE=>TRUE);ex ...
 - css居中参考
			
http://www.cnblogs.com/asqq/archive/2012/04/09/2438745.html
 - Java——IO类 字节流概述
			
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
 - 《Python》 基础数据类型和for循环
			
一.基础数据类型 总览 int:用于计算,计数,运算等.1.2.3.100... str:‘这些内容’,用于少量数据的存储,便于操作. bool:True,False,两种状态,机器反馈给用户的对,错 ...
 - 线程局部存储TLS
			
1 .使用线程局部存储的理由 当我们希望这个进程的全局变量变为线程私有时,而不是所有线程共享的,也就是每个线程拥有一份副本时,这时候就可以用到线程局部存储(TLS,Thread Local Stora ...
 - MyEclipse 2017 CI 9 发布(附下载)
			
挑战全年最低价!MyEclipse线上狂欢继续!火热开启中>> 在进入年底之时,2017 CI 9是我们最大的版本发布之一.在新版本中,我们添加了对Angular 5和TypeScript ...
 - 借鉴seisman安装软件时的文件放置选择
			
对于大型的软件包的安装来说: 当下载成功一个软件的压缩包后: tar -xvf xxxx.tgz ./configure --prefix=/opt/xxxx make sudo make insta ...
 - UIViewController之间的相互跳转
			
一.最普通的视图控制器UIViewContoller 一个普通的视图控制器一般只有模态跳转的功能(ipad我不了解除外,这里只说iPhone),这个方法是所有视图控制器对象都可以用的,而实现这种功能, ...