葫芦娃有七兄弟(请参考豆瓣)。红娃排行老大、橙娃排行老二、黄娃排行老三、绿娃排行老四、青娃排行老五、蓝娃排行老六、紫娃排行老七,七兄弟各有一身独特的本领。故事中还有其他主配角,包括老爷爷、蛇精、蝎子精、小喽啰等。
要求以Java语言编写程序,开发一个展现葫芦娃与妖精大战的图形化应用,具体要求包括:
- 绘制一个
NxM的二维空间(N和M足够大,空间左上角为原点,向右向下分别为X轴和Y轴正方向),该空间中的任意一个位置坐标上可且仅可站立一个生物体(葫芦娃、老爷爷、蛇精、蝎子精、小喽啰均属于生物体); - 请让七个兄弟和老爷爷以下图中的某种阵型在空间的左侧战队;
- 请让妖精(蛇精、蝎子精、小喽啰)以下图中的某种阵型在空间右侧战队;
- 以上各生物体均实现为一个线程(注:此处要求大家用线程是为了验证各位是否掌握了多线程并发编程,实际上GUI应用中应该用特定机制进行UI刷新),因此要通过线程同步机制避免多个生物站上同一位置、多个生物同时杀死某个生物等问题;
- 按空格键时所有生物体线程执行
start(),向敌方前进; - 当某个生物体于敌方相遇(两者间的X轴距离和Y轴距离小于某个常量)时,选取一个概率决定双方生死,死者留下实体,生者寻找下一个敌人攻击;
- 某一方生物全部死亡时,结束;
- 图形化框架限定使用JavaFX。
额外要求:
- 从按下空格开始时直到结束,整个过程需要记录,并保存到文件中。战斗未开始或结束状态下,按下
L键时显示文件对话框让用户选择一个文件,读取文件内容,并按文件中记录的内容进行战斗回放; - 请用面向对象编程方法设计实现,体现出封装、继承和多态等三个面向对象基本特性,请用到课上讲过的设计原则。
- 请使用课上所讲的异常处理、集合类型、泛型、注解、输入输出等机制;
- 请特别注意多线程间的协同问题,避免出现线程不安全问题;
- 程序入口
main函数所在类统一为class Main; - 请为你的代码中的重要方法编写单元测试用例,并使用Maven进行构建管理(我将通过执行
mvn clean test package命令,并从target目录获取打包的jar文件; - 关于战斗场面设定中的未尽事宜(例如行进速度有多快,是不是每个生物体速度一样,死亡概率谁大谁小等等),请在尊重物理原理的前提下发挥想象,以让你的战斗场面尽量真实、生动、有趣味为准则;
- 请编写README.md文件,用markdown语法以文字说明所写应用进行详细说明。
完成后按照作业提交要求和流程,完成作业提交。请将你认为最精彩的某一次战斗过程记录文件连同代码一并提交,作业最终的成绩评定将综合应用的正确性、代码质量、README文件质量和回放过程精彩度等因素。
DDL:2018年12月31日晚23:59:59

