gpt4 book ai didi

java - 这个游戏的类设计(java)

转载 作者:行者123 更新时间:2023-11-30 07:10:35 24 4
gpt4 key购买 nike

我是一个编程迷,想要制作一个 Java 程序来自动化我的城市游戏(我和兄弟一起玩的带有小玩具车的真实游戏)。这 100% 不是作业或学校的问题。

我创建了一个 Citizen 类和一个 Jobs 类。每个工作都有一个名称、基本收入、收入乘数(针对工作级别)。

我想为每项工作制作对象,并将每个公民连接到它,但我有这些问题:

  1. 如果两个人从事相同的工作,则会创建两个工作对象(我只想成为一个);
  2. 我不知道是否应该为每项工作单独创建类(子类),或者如果在初始化新公民时玩家有新工作,我是否应该创建一个新的工作对象。

最佳答案

if two people have got the same job, two job object is created (i want to be just one)

两个主要选项:

  1. 将每个作业实例设为单例(如果您不知道什么是单例,只需在 google 上搜索或在此处搜索即可)。
  2. 创建一个包含Set(或MapList)的单例Job Manager类,但您可能想要一个Set),将作业名称与该作业类的实例配对;然后您可以简单地获取引用,而不是创建新的引用。
<小时/>

i don't know whether i should make classes for each job separately (sub class) or create one new job object if a player has a new job when i'm initializing a new citizen.

你可能不应该。相反,将所有作业共有的事物作为一个抽象父类,然后将每个作业类实现为其扩展。但是,如果您只需要 Job 类中的变量来包含每个作业的不同值,那么您需要单个 Job 类的多个实例,每个实例都有自己的集合的值(value)观。例如:

class Job{
public String name;
public float salary;
public float multiplier;

public Job(String name, float salary, float multiplier){
this.name=name;
this.salary=salary;
this.multiplier=multiplier;
}
}

//On Main
Job banker = new Job("Banker", 9000, 1);
Job seniorBanker = new Job("Senior Banker", 9000, 1.2f);
Job plumber = new Job("Plumber", 800, 1);

//...
//Assuming citizen class contains Job variable: public Job job;
Citizen jack = new Citizen();
jack.job = banker;
Citizen mario = new Citizen();
mario.job = plumber;
Citizen luigi = new Citizen();
luigi.job = plumber; //Same instance of 'plumber' as mario's...
//If you change the value of the plumber's job salary, and then do...
//system.out.println(mario.job.salary);
//system.out.println(luigi.job.salary);
//...both will be changed.

注意:正如您在上面所看到的,您当前的设计(从可以推断的情况来看)不会重用以前作业层的数据,从而使乘数变得多余并且有点毫无意义。更好的设计是将等级作为Map内置到工作类中,将等级与特定名称和乘数配对。

致谢注意事项:这基本上会将 Job 类转变为 Profession 类的等效项,这就是 garnulf 在 his answer 中建议的内容。 .

关于java - 这个游戏的类设计(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39298432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com