В настоящее время я пытаюсь лучше структурировать свой код и все больше и больше фокусироваться на использовании концепций ООП.
У меня простой вопрос о следующем сценарии и о том, как онЛучшая решаемая с точки зрения дизайна модель.
У меня есть игра, в которой игрок может ограбить магазин.Магазин представлен объектом Shop
, а ограбление - RobEvent
.И у меня есть объект Spawner
, который обрабатывает порождение ценных бумаг, когда кто-то пытается ограбить магазин.
Моя главная проблема заключается в том, что у меня есть ощущение, что объект RobEvent
имеет слишком много информации и функций, описанных ниже, и что я могу разделить информацию и функции на большее количество объектов, и для этого мне нужна помощьyou!
public class Main
{
public static void main(String[] args)
{
}
public class Shop {
private String name;
private Location location;
private boolean isBeingRobbed = false;
/*
* Here one of the problems, should the shop have the
* data of the npcs, which will appear
* in the shop when the player attempts to rob it.
* Should it have methods to place "spawn" positions of
* the securities, the type, the amount etc.
* and store it here?
*
*/
public Shop(String name, Location location){
this.name = name;
this.location = location;
}
public boolean isBeingRobbed(){
return isBeingRobbed;
}
protected void setBeingRobbed(boolean bool){
this.isBeingRobbed = bool;
}
}
public class RobEvent extends Looper {
private Shop shop;
RobEvent(Shop shop){
this.shop = shop;
}
public void start(){
shop.setBeingRobbed(true);
}
@Override
protected void logic(){
/*
* Big chunk of game logic
* Spawning the securities, checking if they
* all appeared(they got a delay of few seconds each),
* check if he ran away before everything
* spawned, check if he killed all, check if all appeared
*/
}
private void completed(){
shop.setBeingRobbed(false);
}
}
public class Spawner {
/* not important things
*
* just has a method to
* handle the spawn of a security
*/
public void spawn(NPC npc){
/*
* spawn the npc aka security
*/
}
}
}
Моя самая большая проблема в том, что метод logic()
становится действительно большим.Это метод, который зацикляется каждую секунду суперклассом.
Подробнее:
-
RobEvent
должен знать, порождает ли он в настоящее время ценные бумаги, и делать определенные вещи, - он должен проверять, все ли появились и делать определенные вещи,
- он должен проверять, убежал ли игрок до того, как он был завершен, и делать определенные вещи,
- он должен проверять, убил ли игрок все и делать определенные вещи и т. д.
Больше всего раздражает слежка за порожденными ценными бумагами, потому что, если он убегает, все они должны быть отброшены.У меня такое ощущение, что это слишком много информации в этом объекте, и я мог бы, например, разделить отслеживание порожденных ценных бумаг в отдельном объекте и просто сделать что-то вроде tracker.despawn
, когда RaidEvent
имеет определенное состояние.
РЕДАКТИРОВАТЬ: код просто упрощение фактического кода.