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课设--魔塔的更多相关文章

  1. 2018-2019学年第一学期Java课程设计

    目录 Magic-Towers 一.团队课程设计博客链接   [团队博客地址](https://www.cnblogs.com/lmb171004/p/10271667.html 二.个人负责模块或任 ...

  2. JAVA课设---五子棋

    1.团队博客链接 JAVA课设-五子棋-团队博客 2.个人负责模块: ①对鼠标事件的处理 , 此模块需处理五子棋的放置问题.颜色转换问题.以及当五子连线时弹出窗口显示结果. ②对MainFrame中主 ...

  3. JAVA课设个人博客--多源数据教学管理系统

    JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...

  4. java课设数据库打包报错

    最近在交java课设时把东西打包给老师遇到许多奇葩问题, 首先是数据库复制时提示: 这是数据库与SQL server服务没有分离(我用的是SQLserver暂时,对于其他的,我以后会继续尝试)可以进行 ...

  5. JAVA课设——中药古籍《太平圣惠方》数据处理与分析系统

    一.配置JAVA环境 本次课设是在Windows 10(64bit)平台上实现的,所以首先得配置下JAVA环境. 步骤一:先下载一个JDK(1.7)安装包,安装好JDK: 步骤二:JDK环境配置(由于 ...

  6. 复旦大学2014--2015学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩班级前几名 金羽佳(92).包振航(91).陈品翰(91).孙浩然(90).李卓凡(85).张钧瑞(84).郭昱君(84).董麒麟(84).张诚纯(84).叶瑜(84) 二.总成绩计算 ...

  7. 复旦大学2018--2019学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩90分以上的同学(共21人) 周烁星(99).封清(99).叶雨阳(97).周子翔(96).王捷翔(96).张思哲(95).丁思成(94).陈宇杰(94).谢永乐(93).张哲维(93 ...

  8. 复旦大学2017--2018学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩班级前十名 郭宇城(100).魏一鸣(93).乔嘉玮(92).刘宇其(90).朱柏青(90).王成文健(90).方博越(88).熊子恺(88).张君格(88).崔镇涛(87).史书珣( ...

  9. 转入软工后第一节java课的作业

    这个作业,鸽了好久.本来大家都在中秋前发了,我摸摸索索加上各种缓慢的学习,终于是将他做完了. 做完之后,java最基本的输入输出功能都基本学习到了.下面附上代码: import java.util.* ...

随机推荐

  1. URAL 1941

    比赛的时候三个点没有优化成功.其实也没有想到哈希成数.然后就变成了只要一个长度和scary相等的区间内所有数字个数都是相等的.那么就是符合题意的.于是.为了不TLE我们不能对txt每个位置遍历 的同时 ...

  2. jsp jsp属性范围

    jsp提供了4中属性分别是 当前页:一个属性只能在一个页面中取得,跳转淘其他页面无法取得. 一次服务器请求:一个页面中设置的属性,只要经过了服务跳转,而跳转之后的页面可以继续取得 一次回话:一个用户设 ...

  3. QRCodeHelper 二维码生成

    QRCodeHelper 二维码生成 using System; using System.Drawing; using ThoughtWorks.QRCode.Codec; using System ...

  4. struts2 实现rest

    参考链接https://www.ibm.com/developerworks/cn/java/j-lo-struts2rest/

  5. 《C语言中分配了动态内存后一定要释放吗?》

    问:比如main函数里有一句 malloc(),后面没有free()1.那么当main结束后,动态分配的内存不会随之释放吗?2.如果程序结束能自动释放,那么还加上free(),是出于什么考虑? 答: ...

  6. ThinkPad 复刻计划 ThinkPad Time Machine

    在快节奏的高科技市场中,针对性的进化 ThinkPad 的设计几乎是闻所未闻的.在汽车行业,保时捷无疑干的不错,但我不认为有任何其他的电脑公司可以顶住压力,坚持自己的初心这么久.没有任何一个竞争对手可 ...

  7. IOS控件大全及控件大小

    一 视图UIView和UIWindow iphone视图的规则是:一个窗口,多个视图.UIWindow相当于电视机,UIViews相当于演员. 1.显示数据的视图 下面几个类可在屏幕上显示信息: UI ...

  8. HDU 1853

    http://acm.hdu.edu.cn/showproblem.php?pid=1853 和下题一模一样,求一个图环的并,此题的题干说的非常之裸露 http://www.cnblogs.com/x ...

  9. Global.asax 详解

    在网上找了N多相关的东西总说的不够细,现在终于找到了.可以了解web.cofig和Global.asax之间的关系以及执行的顺序. 在Global.asax.cs文件中 protected void ...

  10. Flume-NG源码阅读之Interceptor(原创)

    有的时候希望通过Flume将读取的文件再细分存储,比如讲source的数据按照业务类型分开存储,具体一点比如类似:将source中web.wap.media等的内容分开存储:比如丢弃或修改一些数据.这 ...