在两台连接到同一局域网下(例如同一路由器下)的机器上分别运行项目,在两台机器上分别点击开始游戏。
在之后的选择界面中,某方玩家首先选择正义方(老爷爷图像),根据显示的提示信息等待另一方玩家的进入;另一方玩家选择蝎子精图像(黑暗方),两人自动匹配进入对战界面。 【注意,选择时图像高亮是正确的反应】
在等待入场动画结束后(),正义方可以首先开始移动、攻击操作;操作步数用完后,邪恶方将可以操控,依次循环。
- 双方界面的顶部会显示剩余的步数,(小喽啰的移动不耗费步数);
- 双方界面的左侧上部会显示技能栏,技能栏中最多出现三个选项,玩家可以根据根目录下生成的帮助文档(helpDoc.txt),根据需要选择释放的技能。
- 双方界面的左下方会显示人物信息栏,信息栏会给出人物的姓名、血量和魔力值。
- 点击右上方的保存按钮可以将之前的战斗过程保存下来。
- 点击右上方的叉按钮可以退出游戏(退出按键设置了高亮)
- 鼠标移动时,人物下方会出现高亮的选中圆环,信息栏会更新。鼠标点击人物时,技能栏会更新。
【若点击过快,部分动画可能无法生成完全】
在开始界面中选择读取文件选项,在弹出的对话框内选择之前保存或者我们提供的示例xml文件,程序将自动播放对战历程至结束。 提供的示例文件为根目录下的battle Result.xml. 播放模式的播放速度将比程序实际运行时的速度快数倍。
【若存档路径中含有中文,可能因为为编码问题报错】
本项目主要由三个部分构成:
- 战斗逻辑部分
- 图形化部分
- 联网部分
主要包含以下几个包:
- battle.view 负责图形化界面的设计工作
- net 负责联网功能
- unit 单位的设计与逻辑
- battle 对战的交互控制与图形化
- battle.conf 相关配置文件
- battle.rec 回放功能文件
- Ground 地面坐标与图形坐标转化的辅助工具
此外还有HelpDocGenerator文件负责生成帮助文档等等。
- unit包中,
- 各种人物类均以HULUCharacter为基类,蝎子精等类拥有控制一些其他单位的能力;HuLuCharacter实现了Runnable接口;基类中定义了人物 的移动、攻击等行为。其中部分参数进行了原子化,以保证线程安全。
- 蝎子精对喽啰类具有操控能力,在其中维护了一个列表进行命令和交互。
- 每个具体的人物类均实现了注释接口IsCharacter,可以更快更好地生成帮助文档。(帮助文档的生成见HelpDocGenerator)
- 各种人物类均以HULUCharacter为基类,蝎子精等类拥有控制一些其他单位的能力;HuLuCharacter实现了Runnable接口;基类中定义了人物 的移动、攻击等行为。其中部分参数进行了原子化,以保证线程安全。
- ground 包中:
- Tile类是描述一个砖块的显示属性的工具类、
- GroundView是对场地坐标和像素坐标进行转化的工具类、
- IntPt和DoublePt是类似于pair的方便程序编写的整形点类和double型点类。
- battle.view 包中,大部分的文件是对图形界面的描述。少部分是对图像生成和图形化交互的辅助类。
- 图形界面类如下
- InfoColumn 信息栏
- SelectionBar 选择技能栏
- SelectionModeWindow 选择游戏模式栏
- StartColumn 开始选择栏
- StepHint 剩余步数提示栏
- VolumnBar 血条栏
- GameEndView 游戏结束时的提示栏
- 工具类
- ViewTools 对于交互事件和图形界面设置的工具栏
- ViewBundle 管理各个人物的图像和攻击效果的图像
- viewGenerator 是对人物动画生成的管理
- 图形界面类如下
- net 包使用C/S架构,其中有两个类:
- SocketServer和SocketClient分别为服务器和客户端,正方(葫芦娃)作为服务器,反方(妖怪)作为客户。
- 两方使用类似TCP连接的方式发现对方地址:
- 首先SocketServer开启18000端口监听。
- SocketClient获取本机所有的地址,此举是因为255.255.255.255的全局广播路由器一般不转发,而为了防止VMnet等的干扰,必须对本机所在的所有IP子网进行广播,广播的目的端口号为18000。
- 广播后监听18001端口。服务器收到广播后得到客户地址,向该地址的18001端口发送一个UDP包,之后开始监听18000的TCP请求,客户收到UDP包后得知服务器地址,向服务器的18000端口建立TCP连接。
- battle.rec 包中包含了存储和重放的功能
- AutoPlayer实现了独挡的复现
- RecordSave实现了命令的格式化存储
- battle.conf 包中包含了各种配置
- Configs中重点实现了对各个图片资源文件参数的配置
- battle 包中实现了大多数的战斗交互逻辑(但其实BattleView可以归类于battle.view的包,它主要是对战斗界面的描述)
- BattleController是最主要的战斗操控逻辑,包含双方步数、死亡、所有人物的加载和伤害的判定。同时负责大联网部分信息传输的逻辑。
- Bullet和BulletController主要是对空中武器或技能的各项参数进行控制、计算和判定。
- default包中主要包含Main函数和文档注释生成器。
- 171860550 王一之 网络连接主要部分,大部分线程同步逻辑的Debug工作,基于前8次作业的战斗逻辑的部分编写与优化,文档管理和注释修改,综合与调试
- 171860551 韩畅 图形化的主要部分,大部分的配置文件和工具类,小部分线程逻辑与优化,基于前8次作业的战斗逻辑的编写与综合,综合与调试