您好,我需要解决下一个家庭作业问题。
这只是问题的一部分,但是我只需要这部分的帮助。
我想制作一个模拟奥运会的小型系统。我想模拟三种运动:游泳,骑自行车和跑步。我想使用四种类型的运动员:游泳者,骑自行车者,短跑运动员(可以分别参加游泳,骑自行车和跑步比赛)和超级运动员,他们可以参加所有三场比赛(这是我遇到最多的问题) 。每个运动员都应该有一个commate()方法,该方法将随机生成一个介于10到20秒之间的跑步时间,100到200秒之间的游泳时间以及500到800秒之间的骑行时间,这些时间将用来阻止比赛的获胜者。
我的问题是如何模拟此问题,使用哪种类以及它们之间的关系如何。我需要一种方法来制作不同的游戏对象,例如SwimGame,其中仅包含Swim和Super Athlete的列表。
这是我目前的方法。
因此,我将拥有基本的抽象类运动员,而骑自行车者,跑步游泳者和超级运动员将从该类扩展而来。
我还将有Game抽象类,并且SwimGame,CycleGame和RunningGame将从此处扩展。每场比赛都会有参加比赛的运动员的名单。
如何防止跑步者加入游泳比赛以及类似情况
superAthleat可以参加所有3场比赛时,我将如何延长计算时间
起初我以为我做了3个界面:
interface swimInterface() {
public void calculateSwimTime();
}
interface runInterface() {
public void calculateRunTime();
}
interface cycleInterface() {
public void calculateCycleTime();
}
然后使swimmerAthleate实现swimInterface,然后使runAthlete实现runInterface,cycleAthlete实现cycleInterface,最重要的是superAthlete实现runInterface,swimmerInterface和cycleInterface,所以我将得到以下内容:
public abstract class Athlete {
...
// what should be here
}
public class SwimAthlete extends Athlete implements SwimInterface {
...
public void calculateSwimTime() {...}
}
public class RunAthlete extends Athlete implements RunInterface {
...
public void calculateRunTime() {...}
}
public class CylcleAthlete extends Athlete implements CycleInterface {
...
public void calculateCycleTime() {...}
}
public class SuperAthlete extends Athlete implements SwimInterface, CycleInterface, RunInterface() {
public void calculateSwimTime() {...}
public void calculateRunTime() {...}
public void calculateCycleTime() {...}
}
但是然后我还有很多其他问题:
如果我有这样的事情:
public class Game {
ArrayList<Athlete> listOfCompetitors;
public Game(){
listOfCompetitors = new ArrayList<Athlete>();
}
}
public class SwimGame extends Game {
// I could have something like this here
// how could I add only SwimAthlete and SuperAthlete here
// how to traverse the array of athletes and only call calculateSwimTime method.
}
// similar for other games.
如果您需要更多解释,我非常愿意讨论这个问题。
最佳答案
interface Sport
{
void compete();
}
abstract class Athlete implements Sport
{
String name;
int time = 0;
void setName(String name)
{
this.name = name;
}
void setTime(int time)
{
this.time = time;
}
String getName() { return name; }
int getTime() { return time; }
}
class Runner extends Athlete
{
Runner(String name)
{
setName(name);
}
@Override
public void compete()
{
int time = 10 + (int) (Math.random() * ((20d - 10d) + 1d));
setTime(time);
}
}
class Swimmer extends Athlete
{
Swimmer(String name)
{
setName(name);
}
@Override
public void compete()
{
int time = 100 + (int) (Math.random() * ((200d - 100d) + 1d));
setTime(time);
}
}
class Cyclist extends Athlete
{
Cyclist(String name)
{
setName(name);
}
@Override
public void compete()
{
int time = 500 + (int) (Math.random() * ((800d - 500d) + 1d));
setTime(time);
}
}