对于这项任务,您将模拟足球世界杯的比赛。这是对实际的FIFA世界杯的简化,但是您将开发的模拟无需事先了解足球规则。本节指定了该程序的必需功能。
这个程序只有一个文本界面,不需要GUI。对于易于遵循明确的信息/错误消息的游戏,将获得更多的分数。
系统描述
足球世界杯在4支球队之间进行。球队排名从1到4,其中1表示最高排名和4最低排名。
杯赛分两个阶段进行:初赛和决赛。
在预赛阶段,每支球队都会与另外三支球队一起打六场比赛。预赛阶段的比赛将按顺序进行,每场比赛的结果都会在完成后显示在屏幕上。在预赛阶段,一支球队赢得3分,平局1分,亏损0分。
在预赛阶段结束时,系统会根据以下标准显示队伍从头至尾排序的结果摘要:
•球队将从最多到最少的分数(point)列出。
•如果球队得分相同,那么进球数越多的球队将被放在更高的位置。
•如果球队不能被任何先前的标准分开,那么表中更高的排名将随机确定。
预赛阶段结束后,排名前二的球队将参加决赛。决赛和预赛的唯一区别是决赛必须有一个冠军,即世界杯足球赛冠军!
在决赛结束时,总体成绩将显示在屏幕上,包括足球世界杯冠军队,金靴奖得主和公平竞赛奖牌队的名字。
Class设计
你的设计至少应该有以下三个类:player, team 和game。还应该包括Menu和RandomGoalsGenerator的class。对于每个类都应该有一个默认的构造函数和一个接受这些字段值的构造函数作为参数。
每个类也应该有适当的访问器和增变器方法,并且能够返回它的
状态以字符串的形式。还应该验证字段的值。您
不应允许将类的对象设置为无效状态。
Player Class
Player的一个对象将至少包含以下字段:
name - String。该名称只能包含字母字符和最多一个连字符' - ',以容纳可能与连字符相连的名称,例如Zeta-Jones。名称中必须至少包含两个字母字符,它应该具有合理的最大长度,并且不能以连字符开头或结尾。团队中的两名球员不能有相同的名字。
goals - 代表进球数目的int类型。这将用于确定最佳射手得分手的‘Golden Boot’。
Team Class
Team的一个对象将至少包含以下字段:
name – string,是团队代表的国家的名称。
Ranking - 类型为int。这个领域是指球队相对于其他球队的相对实力。没有两个球队可以有相同的排名。排名必须在1到4之间(因为在比赛中只有四支球队)。
2名球员 – Player类型。每个球队将有两名球员谁是进球得分手。
每支球队也将有黄牌和红牌的得分卡。向犯严重犯规的球员展示黄牌,向犯下更严重犯规的球员展示红牌,并从球场送出。这些牌与一个球队相关联,而不是个人球员。黄牌和红牌的显示是随机确定的,两者都很少见,有些游戏根本没有显示任何卡片。但通常是红卡显示的黄卡数量的四倍。总黄牌和红牌标记将决定球队的公平比赛比分,这将用于确定杯赛的公平比赛奖。每张黄牌值一分,每张红牌值两分。总分越低,球队越公平。
除了上面提到的领域之外,Team团队的一个对象必须能够存储和/或返回关于其在Cup中的表现的其他信息。 因此,您必须决定以下哪项应该是场,哪些不应该是场:球队在杯赛中的比赛次数,赢得的比赛次数,输球的次数,进球的次数以及总分。(: the number of games the team has played in the Cup, the number of games won, lost, drawn, number of goals scored, and overall points.)
Game Class
Game类将至少有一个字段,一个Team对象的ArrayList。 Game类还有至少三种方法:playGame(),playPenaltyShootOut()和displayGameResult()。
playGame()方法模拟两个团队之间的游戏玩法。 这是通过随机生成每个团队评分的目标数量来完成的。 生成的目标数量应该在指定的范围内。 排名最高的球队将有更大的获胜机会。 这将通过给予排名较高的球队更广泛的可能目标来模拟,如下所示:
•排名较高的球队:0到(5 +一个随机数(0至2之间的随机数))
•排名较低的球队:一个0到(( 5-球队排名的差数)+一个随机数(0到2之间的随机数))
Goals(进球数)将随机分布在两名球员之间。
playPenaltyShootOut()方法模拟了一场点球决胜,如果决赛需要以平局结束。 每个队的一名球员有5个射门。 在五次射门结束时球员进球数最多的球队获胜。 如果得分相同,那么每个球员都有另一个射门。 这一直持续到有结果。 一名球员在点球大战中的进球数不计入金靴奖。
displayGameResult()方法在游戏结束时在屏幕上显示游戏结果,例如:
比赛结果:西班牙4比澳大利亚0
获奖卡:澳大利亚 - 1张红牌。
球队记录(比赛,胜利等)在比赛结束后更新。
System Interface
程序启动时,系统从文件'teams.txt'中读取每个团队的详细信息。
细节包括每个团队的名字和排名。 一旦从文件加载信息,在程序的实际运行期间不再有读或写文件。
然后程序提示用户输入每个球队中两名球员的名字,他们将成为目标
得分手。 如果输入的名称无效,则会提示用户重新输入。 如果重新输入的名字无效,则分配默认值,例如,玩家1 - 加纳
然后系统将为用户提供以下菜单选项,并且您必须显示一个基于文本的菜单,该菜单使用Scanner类从键盘获得输入:
A. Play Preliminary Stage
B. Play Final
C. Display Teams
D. Display Players
E. Display Cup Result
X. Close
如果用户选择选项'A',则将播放预赛阶段。
如前所述,如果用户选择'B'选项,决赛将在初赛阶段的顶级球队之间进行比赛。 如果选择“B”选项但未播放预备阶段,则会显示错误消息。 如果最终以平局结束,那么将进行点球大战。
如果用户选择选项'C',则显示每个团队的记录。 例如:
如果用户选择选项'D',则球员列出他们的进球数量。 该列表不需要按任何顺序排序。 例如:
如果用户选择选项'E',则将显示足球世界杯冠军队名称,金靴奖得主选手和公平竞赛奖队伍的名字。 例如:
请注意,可能有多个玩家赢得金靴奖,并且可能有多个团队赢得公平游戏奖。
菜单项A到E后,菜单重新显示在屏幕上。
如果用户选择选项'X',系统应该将选择'E'时显示的相同信息写入名为'statistics.txt'的文件。 系统将关闭。
版权所有:留学生编程辅导网 2020 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。