COMP2396-作业2(a)截止日期:2019年2月28日23:55简介此作业测试您对Java中的继承和多态性的理解。此作业由两部分组成。您需要实现(a)部分程序的基本要求。在part(b)中,您必须通过提交附加文件来扩展程序。(b)部分将于2019年3月1日发布。在(b)部分提交的文件必须与在2019年2月28日或之前提交的(a)部分中的文件一起使用。您不得修改您拥有的类层次结构在(a)部分中定义和实施。在本作业中,您需要模拟森林中的野生动物。程序设计将在此作业中进行评估。你必须很好地利用继承和多态性来获得这个作业的所有分数。你还需要为所有非私有类和非私有类成员编写JavaDoc。没有JavaDoc的程序是不会被标记的。Task你需要imp编写模拟森林的主程序Forest.java。森林由二维单元阵列表示。每个cell可以用来容纳一只动物(Animal类的一个子类的对象)。类似于讲座中的Animal类层次结构,要求你实现一个动物层次结构,如下图:程序启动时(即Forest.java中的main()方法),它将创建一个大小为15x15的森林。一旦森林生成,打印森林的布局如下:程序然后显示以下菜单:1.Dog(d)2.Fox(f)3.Wolf(w)4.Cat(c)5.Lion(l)6.Tiger(t)7.Hippo(h)8.Turtle(u)你还想补充什么totheForest?Pleaseenteryourchoice(1-8,or0tocompletetheanimalinput):当用户输入选项1-8时,程序会为动物生成一个随机位置,并显示动物的移动行为。每个元素的移动行为将在稍后定义。例如。如果用户输入1,程序将将显示如下:AddedDogat(2,0):Dog是Canine,Canine向四个方向移动,每次移动一到两步。重复该过程,直到用户输入0完成输入。用户可以选择再次添加同种动物。请确保同一位置没有两只动物。如果用户输入任何其他输入,则再次请求输入。您可以假设用户将始终输入一个整数值。您的程序不需要处理非整数输入。点表示空白区域,字母表示该位置的动物。8种动物中每一种的第一个字母都用于标记它们,除了Turtle被标记为“u”。考虑用户为每种动物选择一个的情况,完成输入后森林可能如下所示:程序然后要求用户按回车键运行模拟循环,键入“打印”以打印森林或键入“exit”离开:按回车键迭代,输入'print'打印t森林或“退出”退出:请参阅有关如何完成的教程幻灯片。在每个模拟循环中,森林中的所有动物将轮流移动。如果目标位置已经被另一只动物占据,移动的动物将进行攻击。对于一只动物移动2步,如果另一只动物存在于移动路径上,即在移动动物的第一步,它们将战斗。所涉及的动物中的任何一只都会在攻击结束时死亡。幸存的动物将占据目标位置。死去的动物尸体将连同动物被杀的地点一起存储在“死去的动物清单”中。该程序应在每个循环后要求用户输入。当用户键入“打印”时,程序将打印森林和死亡动物列表及其位置。狗死在位置(3,9)只有当用户键入“退出”时,程序才会终止。当程序终止时,它将打印森林,然后是活体动物列表及其位置,然后是死亡动物列表及其位置。动物移动在模拟的每个循环中,动物将按以下顺序移动:猫、狗、狐狸、河马、狮子、老虎、乌龟,狼。不同的动物根据以下规则以不同的方式随机移动:-猫科动物在所有八个方向上移动,一次一步。-犬向四个方向移动,一次移动一到两步。-乌龟有50%的机会保持在同一位置,并且有50%的机会向四个方向移动,一次一步。-所有其他动物向四个方向移动,一次一步。-如果动物位于角落或在边界上,它会按照上述规则移动到“可移动”的位置。注意动物不要离开森林。当一只动物从一个位置移动到另一个位置时,你的程序应该打印以下信息:Animal_typemovedfrom(?,?)to(?,?)例如:Foxmovedfrom(2,0)to(0,0)Hippomovedfrom(3,0)to(4,0)...动物攻击移动前占用的动物。攻击的结果遵循以下规则:-如果猫科动物攻击犬科动物,猫科动物获胜,犬科动物死亡。-如果犬科动物攻击猫科动物,则有50%的几率一方获胜,另一方死亡。-如果狮子攻击河马,狮子获胜,河马死亡。-如果狐狸攻击猫,狐狸获胜,猫死亡。-如果任何动物攻击海龟,则动物获胜且海龟死亡的几率为20%。-如果乌龟攻击动物,有50%的几率乌龟获胜而动物死亡。-如果两只相同的动物相遇并打架(例如狗对狗),则有50%的几率一只获胜另一只死亡。-对于所有其他情况,攻击者失败并死亡。-死亡地点是战斗地点,应存储在“死亡动物列表”中。-如果动物d也就是说,它会消失并且不占据位置。-如果多个动物挡住它的路径,该动物可能会多次攻击。当一只动物攻击另一只动物时,你的程序应该打印以下信息:Attacker_typefrom(?,?)attacksoccupant_typeat(?,?)andwins/loseTheLoserdiesat(?,?)thedeadanimallocationshouldbe尸体的位置。例如:Tigerfrom(2,1)attacksCatat(2,2)andlossTigerdiesat(2,1)Lionfrom(4,6)attacksHippoat(3,5)andwinsHippodiesat(3,5)Lion从(4,6)移动到(3,5)请注意,如果攻击成功,动物会移动。示例运行示例运行作为sampleRun_revised.txt提供,可在Moodle上获得。第(a)部分要求您的程序必须满足以下要求:-在程序设计中使用继承和多态性定义动物类层次结构。您应该在必要时使用抽象类。允许轻松扩展到t他通过添加更多动物来编程。-所有即时变量必须是私有的。定义getter以仅在必要时访问这些变量。-Forest.java是仅控制程序流程和用户交互的主程序。您需要在其他类中定义程序逻辑。(b)部分要求-作业的(b)部分将在您提交(a)部分后发布。-您将被要求定义一些新动物。-您可能还会被要求从森林中移除动物。-您将必须提交新动物的新类,以及新的主程序(代替Forest.java)。这些文件必须与您在(a)部分提交的文件一起工作。-您在提交(b)部分时不得修改在(a)部分提交的文件。标记(a部分65%)-35%标记是给予程序设计。如果你通过使用遗传和polymor来实现动物的移动和攻击,你将获得所有分数phism。你可以通过尽可能避免代码重复来检查它。经济在编码中很有价值:确保无错误代码行的最简单方法是根本不编写代码行。-15%的分数到你的程序的功能。你可以添加额外的类,即时变量和方法到类。您的程序输出必须与本文档中描述的内容相同,但每行输出末尾的尾随空格除外。-15%的分数将分配给您的JavaDoc。完整的JavaDoc包括每个类、成员字段和非私有方法的文档。主要方法的JavaDoc可以省略。提交:请将所有源文件(*.java)以单个压缩文件(.zip或.7z)提交给Moodle。不允许延迟提交。不要提交.class文件.WX:codehelp
