当前位置: 首页 > 后端技术 > Java

2ME3ConnectFour游戏设计

时间:2023-04-01 13:46:55 Java

2ME3-作业1请仔细阅读本文档。严格按照说明操作。如果您有任何问题,请将其发布到MSTeams或在办公时间内询问。此作业将于10月15日晚上11:59之前到期。我在Teams中创建了一个作业1频道。如果您对作业有疑问,请将其张贴在那里。谢谢。除非特别说明,否则假设您不允许导入外部库。目的此作业将让您实现一个部分实现的四人连线游戏。它应该突出封装、继承和多态性的OO原则。如果您不熟悉ConnectFour,请阅读这篇文章:https://www.wikihow.com/Play-...Overview本文档附带三个Java文件:ConnectFour.javaPlayer.javaBoard.java您负责提交三个Java文件:Board.javaHumanPlayer.javaAIPlayer.java请参阅下文了解有关您负责完成的内容的详细信息。如何通过ConnectFour.java开始阅读,具体来说,阅读并理解playGame()方法。这是高级逻辑和流程发生的地方。正如您将看到的,由于Player.java是一个抽象类,此方法并不完整。研究这些类如何使用/相互关联以及什么可以访问什么。您可能需要推断一些关于最终实现的事情。游戏的最终目标是有如下内容。如果执行以下代码:publicstaticvoidmain(){Boardboard=newBoard();ConnectFourgame=newConnectFour(board);game.setPlayer1(newHumanPlayer('R',board,"Alice"));game.setPlayer2(newHumanPlayer('B',board,"Bob"));game.playGame();}1然后类似下面的内容将输出到控制台。当然,根据用户输入的不同,事情可能会有所不同。|||||||||||||||||||||||||||||||||||||||||_|_|_|_|_|_|_|轮到爱丽丝了,爱丽丝,请输入你的着法:3|||||||||||||||||||||||||||||||||||||||||_|_|R|_|_|_|_|轮到鲍勃了,鲍勃,请输入你的着法:3|||||||||||||||||||||||||||||||||||乙||||||_|_|R|_|_|_|_|轮到爱丽丝了,爱丽丝,请输入你的着法:4|||||||||||||||||||||||||||||||||||乙||||||_|_|R|R|_|_|_|轮到鲍勃了,鲍勃,请输入你的着法:4|||||||||||||||||||||||||||||||||||B|B|||||_|_|R|R|_|_|_|轮到爱丽丝了,爱丽丝,请输入你的着法:2|||||||||||||||||||||||||||||||||||B|B|||||_|R|R|R|_|_|_|轮到鲍勃了,鲍勃,请输入你的着法:52|||||||||||||||||||||||||||||||||||B|B|||||_|R|R|R|B|_|_|轮到爱丽丝了,爱丽丝,请输入你的着法:1|||||||||||||||||||||||||||||||||||B|B|||||R|R|R|R|B|_|_|“恭喜Alice,你中奖了!”你的Tasks创建并实现两个类:HumanPlayer.java和AIPlayer.java。这两个类都应该扩展Player.java而不是抽象的。也就是说,他们将需要实现makeMove方法。有关两种不同实现的信息,请参见以下几点。对于HumanPlayer,makeMove方法应该提示用户输入。您可以假设用户将始终输入1到7之间的数字(含1和7)。但是,如果用户输入了无效的着法,即该列已满,您应该重新提示用户输入有效。对于AIPlayer.java,只要满足以下两个条件,makeMove方法就可以为所欲为:-如果有一个或多个可用的获胜动作,AI玩家将执行其中之一。-如果没有可用的获胜动作,但他们的对手在下一回合有一个或多个获胜动作可用,AI玩家将阻止其中一个。如果你愿意,你可以为此方法导入java.util.Random。完成i实现Board类的功能,如“如何开始”部分所述。对于printBoard()方法,不要太担心它与本文档中所见完全相同,但它应该直观且易于阅读。您需要在类中具有某种板的内部表示。您选择如何存储棋盘状态取决于您。然而,这个决定绝不应该暴露给任何其他类。例如,如果您选择使用二维数组来存储棋盘状态,则所有Player类都不应以任何方式暴露给数组符号/方法。换句话说,如果您决定将实现从数组更改为ArrayList,您唯一需要修改的类就是Board.java。为此,您需要添加一些尚未声明的方法。如果您愿意,您可以为您的内部董事会代表导入外部库。例如,ArrayLists.Submitting和GradingThis作业将通过Avenue以电子方式提交。您的部分作业将自动评分,部分将手动完成。大致细分如下:3HumanPlayer:20%AIPlayer:30%Boardmethods:30%Boardencapsulation:20%祝你好运!附加说明-9月27日更新您可以在HumanPlayer类中导入java.util.Scanner。对象之间的一些交互是有意设计的,以一种有点笨拙的方式来表达观点。您需要解决的主要挑战之一是AIPlayer如何在不知道其他玩家的符号的情况下知道移动是否阻止了胜利。为了测试您的游戏,您应该使用与本文档前面部分类似的代码,即创建一个包含以下代码的Runner类:publicstaticvoidmain(){Boardboard=newBoard();ConnectFourgame=newConnectFour(board);game.setPlayer1(newHumanPlayer('R',board,"Alice"));game.setPlayer2(newHumanPlayer('B',board,"Bob"));game.playGame();}学术造假免责声明您提交的所有工作都必须由您完成,您的工作不得由他人提交。剽窃是学术造假,会受到严肃对待。该部门使用软件来比较程序以寻找相似代码的证据。请不要复制。助教和我希望您成功,并随时为您提供帮助。这里有一些帮助您避免剽窃的一般准则:永远不要看另一个作业解决方案,无论是在纸上还是在计算机屏幕上。永远不要向其他学生展示您的作业解决方案。这适用于解决方案的所有草稿和不完整的解决方案。如果您在网上找到解决部分或全部作业的代码,请不要使用或提交其中的任何部分!很大一部分学术违规行为涉及素未谋面的学生,他们只是碰巧在网上找到了相同的解决方案。如果你找到了解决方案,其他人也会。WX:codehelp