gpt4 book ai didi

java - 如何制作嵌套类别系统?

转载 作者:行者123 更新时间:2023-12-02 04:27:29 24 4
gpt4 key购买 nike

我正在尝试制作一个类别系统。我的尝试是使用枚举的枚举。我有一个名为Tile 的类。我的 Tile 类还有一个 Type type; 变量。

当我尝试声明 type = Type.Wall.BOTTOM; (或 type = Type.Floor.CROOKED;)时,它指出所需的类型为 类型,但找到的类型是墙壁(或地板)。

具体来说,我正在尝试对游戏中的图 block 进行分类。有些瓷砖是墙壁,有些是地板。墙可以是x,y,x,地板可以是1,2,3。因此,tile 可以是 wall.xfloor.1。由此,我可以知道确切的类型(我的意思是包括子类型,以便我可以在屏幕上绘制正确的图 block 纹理),有时我只需要知道类型,以便我知道图 block 是否可步行或不。

这就是我所做的:

public enum Type {
;

public enum Wall {
TOP_LEFT, TOP, TOP_RIGHT,
LEFT, RIGHT,
BOTTOM_LEFT, BOTTOM, BOTTOM_RIGHT,
NORTH_EAST, NORTH_WEST,
SOUTH_EAST, SOUTH_WEST
}

public enum Floor {
CROOKED,
WOOD
}
}

我如何设计它以适合我的案例?

最佳答案

让我们谈谈您的 Tile 类将要做什么。

  1. 它将以一种方式与Wall交互,并以完全不同的方式与Floor交互
  2. 无论WallFloor如何,它都会做它会做的任何其他事情。

因此,正确的做法是将该行为完全封装,使其远离 Tile

我将在这里使用非常蹩脚的名称,因为您没有提供用例,所以我会尽力而为。

public class Tile {
private PartOfRoom part;

public Tile(PartOfRoom part) {
this.part = part;
}

public void doSomething() {
part.doSomething();
doSomethingThatDoesntUsePart();
}

public boolean isWalkable() {
return part.isWalkable();
}
}

然后你可以拥有:

public interface PartOfRoom {
void doSomething();
}

public class FloorPartOfRoom {
private final Floor floor;

FloorPartOfRoom(Floor floor) {
this.floor = floor;
}

public void doSomething() {
floor.paint();
}
}

public class WallPartOfRoom() {
private final Wall wall;

WallPartOfRoom(Wall wall) {
this.wall = wall;
}

public void doSomething() {
wall.mop();
}
}

关于java - 如何制作嵌套类别系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31949158/

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