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.* ...
随机推荐
- git 添加review的相关操作
git主机上涉及到的操作: 185 git branch 186 git pull 187 git branch 188 git checkout -b wangcheng 189 git log 1 ...
- API - jQuery之操作cookie(转)
Installation Include script after the jQuery library (unless you are packaging scripts somehow else) ...
- SQL语句执行过程详解
一.SQL语句执行原理: 第一步:客户端把语句发给服务器端执行 当我们在客户端执行select语句时, 客户端会把这条SQL语句发送给服务器端,让服务器端的进程来处理这语句.也就是说,Oracle客户 ...
- iOS-UIImage变为NSData并进行压缩
<iOS>UIImage变为NSData并进行压缩 //sdk中提供了方法可以直接调用 UIImage *img = [UIImage imageNamed:@"some.p ...
- IOS工作中的问题(转)
1.UITableView的scrollDelegate问题 下午遇到一个奇怪的问题,之前都没有注意过,由于A VC中要实现tableView和其他View位置的联动,所以实现了tableView的d ...
- SEL_CallFuncN,SEL_CallFuncO等的区别
ocos2d-x中有大量的回调函数的应用,主要有以下几类,看下CCObject.h中的定义 typedef void (CCObject::*SEL_SCHEDULE)(float);// 用来调up ...
- Java第八次作业--数据库编程
Deadline: 2017-5-18 23:00 一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握应用JDBC访问数据库的基本步骤 掌握DriverManager类.Connection接 ...
- [转载]redis持久化的两种操作RDB和AOF
Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AO ...
- 第二百七十六节,MySQL数据库,【显示、创建、选定、删除数据库】,【用户管理、对用户增删改查以及授权】
MySQL数据库,[显示.创建.选定.删除数据库],[用户管理.对用户增删改查以及授权] 1.显示数据库 SHOW DATABASES;显示数据库 SHOW DATABASES; mysql - 用户 ...
- MySQL--修改表字段
##========================================================================## ## 修改表字段 ## CHANGE和MODI ...