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.* ...
随机推荐
- (C#基础)反射理解
这个知识点很基础. 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; n ...
- 【Java集合的详细研究8】List,Set,Map用法以及区别
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素.一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java ...
- bootstrap在iframe框架中实现由子页面在顶级页面打开模态框(modal)
我需要完成的效果: 1.在顶级页面打开模态框,并且遮罩层也要再顶级页面 2.单击遮罩层部分,模态框不关闭 问题描述: 不知为什么,可能是bootstrap前端框架添加遮罩层的一些问题.通过子页面在顶级 ...
- HTTPS工作原理和TCP握手机制
1.HTTPS的工作原理 HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手, 在握手过程中将确立双方加密传输数据的密码信息. TLS/SSL协议不仅仅是一套加密传输的协议, ...
- C++ 多线程中使用cout还是printf
在多线程的设计模式下,如果多个线程都使用cout打印信息,那么很容易出现内容交替的现象,例如下图: 代码如下: 如果把cout替换成printf,那么就不会出现这个问题,运行结果如下图: 对应代码如下 ...
- 第十五篇 make中的隐式规则概述
前面我们讲到了makefile的依赖拆分的知识,现在可以引申出这样一个问题,如果同一个目标的不同命令拆分的写到不同地方会发生什么?下面我们给出程序和执行结果: 可见后面的命令会覆盖前面的命令, ...
- 如何在magento添加推荐分类
Magento Featured Category推荐分类模块安装 1.下载Magento Featured Categories Extension,下载地址:http://www.storefro ...
- I.MX6 HUAWEI MU609 3G porting
/*************************************************************************** * I.MX6 HUAWEI MU609 3G ...
- 【计算机视觉】人脸检测模型的评估方法-linux
前言 人脸检测标准库FDDB详细介绍了数据库和使用方法.对于训练的模型,如何评估模型的效果呢,本文对此进行介绍.说实话,参考了很多博客,但是感觉都不是很明白(当然本文也会有瑕疵),故在此记录! 测试环 ...
- 【01_292】Nim Game
Nim Game Total Accepted: 25342 Total Submissions: 50672 Difficulty: Easy You are playing the followi ...