Github地址:https://github.com/NiceKingWei/krad
一、项目概况
本组的项目为一款名为Krad的小游戏,采用两阵营多人对抗的模式。项目小组至今进行近4个月,其中Alpha冲刺阶段5月20日开始,6月15日结束,共26天。至今项目的完成进度为:主要功能和界面基本实现,但仍会出现一些小的Bug,且用户体验不完善。
至今Github中dev分支共649次commit;issue共19个,已关闭15个;Milestone中Prototype(也就是课程的Alpha阶段)已完成100%。
Commits
Issues
Milestones
Alpha冲刺阶段博客地址(其中某些时间段合并在一篇博客中):
5月26日:https://www.cnblogs.com/NoWarningNoError/p/9094832.html
5月27日:https://www.cnblogs.com/NoWarningNoError/p/9097780.html
5月28日:https://www.cnblogs.com/NoWarningNoError/p/9103098.html
5月29日:https://www.cnblogs.com/NoWarningNoError/p/9108657.html
5月30日:https://www.cnblogs.com/NoWarningNoError/p/9114415.html
5月31日:https://www.cnblogs.com/NoWarningNoError/p/9116669.html
6月1日:https://www.cnblogs.com/NoWarningNoError/p/9123978.html
6月2日及3日:https://www.cnblogs.com/NoWarningNoError/p/9131263.html
6月4日:https://www.cnblogs.com/NoWarningNoError/p/9136766.html
6月5日:https://www.cnblogs.com/NoWarningNoError/p/9142836.html
6月6日:https://www.cnblogs.com/NoWarningNoError/p/9148182.html
6月15日:https://www.cnblogs.com/NoWarningNoError/p/9188906.html
二、技术难点
制作游戏的难点,前后端都非常多。
前端
1、样式设计,不仅限于登陆界面等,还有游戏本身的设计。
2、游戏界面效果实现,如人物的移动等等。
3、调试。
对于前两条,我们采用了开源游戏Teeworlds和开源游戏框架Phaser的素材,它们的网址分别是:
https://www.teeworlds.com和https://Phaser.io
而最后一条网页功能的调试严格来说并非技术困难,而是技术本身不易用好,对于这方面我们没有太好的方案,只能多花时间,同时尽量养成良好的代码习惯。
后端
1、游戏规则如何实现:存储在静态的类中,类中的方法适用于任何情况,任一局游戏调用四个规则类中的方法即可。其中Gamble的卡牌系统,Map的地图系统,都是有一定难度的内容。
2、关于地图的存储结构:游戏规则中有一些正常方法难以实现的内容,最典型的即是移动和地图。这部分内容的解决过程在博客https://www.cnblogs.com/NoWarningNoError/p/8794839.html中。
3、用户信息、交互和匹配:使用MongoDB作为数据库存储用户信息,SessionManager等类管理用户和后台的交互,使用Actor模型。
4、一局游戏的产生和进行:God模块管理了每一局游戏的整体进程,其中的异步信息处理采用了synchronize、wait和notifyAll三个方法,来应对游戏的某些阶段需要多个线程(即多个玩家)均操作完成后,后台才对信息进行处理的情况。
前后端交互
1、前端登陆、注册等页面和数据库及玩家交互,例如注册和修改密码时邮件的发送。
2、前端和God交互,前端通过GodHelper调用God中的request函数来完成通信。
交互主要的信息格式是Json,交互本身原理不难,但持续构建和JS的调试会耗费大量的时间,同时Java、JS以及Scala语言中某些类型无法互通加大了工作量。
三、游戏介绍和成果展示
游戏简介
阵营分为战术小队和感染者,分立于地图不同的位置,战术小队的胜利目标是到达地图上特定地点取得目标物,然后再到达地图上的另一特定撤离点;而感染者的胜利目标则是感染所有战术小队。当一方达成目标,游戏即结束。
游戏的核心通过出牌实现,每个人都有两种牌:决策牌以及猜拳牌,决策牌决定了本回合中角色的行为,猜拳牌决定了本回合中角色的效果。
具体来说:
决策牌:移动、蓄能、开火(感染者无)和使用技能。
“移动”,顾名思义是在地图上改变位置。
“开火”可以削减敌方手牌上限。
每个角色有其独特技能,可以通过“技能牌”使用。
而”蓄能“则是什么都不做,将获得的能量存入能量值中,能量值决定了角色”移动“的距离和”开火“削减手牌上限的数量。
猜拳牌:分明牌和暗牌,均为“石头、剪刀、布”。
明牌在本回合手中没有猜拳牌,或是本回合不想使用猜拳牌时使用,不消耗手牌,但会在选择的同时让其他玩家看到。
暗牌即为一般的猜拳牌,可以打出多张,如果猜拳赢下敌方至少一人,则可以获得能量,获得的点数为打出的猜拳牌的张数。(例如出3张石头且获胜,则获得3点能量,可以移动三格,或是削减敌方3点手牌上限)。
成果展示
1、截图
登陆匹配界面的展示可详见https://www.cnblogs.com/NoWarningNoError/p/9188906.html
地图
人物
2、演示视频
本视频摄制和配音均由欧阳炳濠同学完成,感谢他的工作。
若视频无法显示,请移步https://v.youku.com/v_show/id_XMzcwMTA0OTUwNA==.html?spm=a2h3j.8428770.3416059.1
四、此后的工作
此后除了调试完所有Bug以外,我们还需要对游戏界面、按键封闭和用户体验等做进一步优化。
2、各种界面都不够美观。
3、游戏界面需要“返回游戏大厅”的选项。
4、游戏过程中需要提示玩家具体应该如何操作。
5、某些不需要操作的阶段不应该需要玩家点击check(结算阶段大多如此),且应该将check按钮置灰。
6、每个玩家角色的状态需要显示。
7、分数系统。