【发布时间】:2015-04-10 09:50:15
【问题描述】:
我正在使用一些软件设计模式用 Java 构建俄罗斯方块游戏。基本上,我创建了一个工厂算法,它检索一个字符串来确定当主游戏循环给出请求时要制作什么类型的俄罗斯方块对象,请参见代码:
public class TVShapeFactory {
protected TVShape tvShape = null;
protected GameContainer gc;
TVShapeFactory(GameContainer gc) {
this.gc = gc;
}
public TVShape createShape(String shape) {
if (shape=="TVIShape") {
tvShape = new TVIShape(gc);
}
else if (shape=="TVOShape") {
tvShape = new TVOShape(gc);
}
else if (shape=="TVLShape") {
tvShape = new TVLShape(gc);
}
else if (shape=="TVZShape") {
tvShape = new TVZShape(gc);
}
else if (shape=="TVJShape") {
tvShape = new TVJShape(gc);
}
else if (shape=="TVSShape") {
tvShape = new TVSShape(gc);
}
else if (shape=="TVTShape") {
tvShape = new TVTShape(gc);
}
else {
System.out.println("Error: invalid type of shape");
}
return tvShape;
}
}
如果您不知道什么是 gc,它只是 Slick 2D 库的一部分,用于与完整的游戏环境一起工作。 无论如何,我创建了一些其他方法来为游戏随机生成一个形状(这样主游戏循环每次都会收到一个随机形状,但我觉得 RNG 没有削减它,我想让它变得更难。我注意到有一个著名的俄罗斯方块算法,叫做 Bastet tetris,但对我来说没有意义。你们对制作 HARD 俄罗斯方块形状生成算法有什么建议吗?这是我的简单 RNG 算法:
public TVShape getRandomShape() {
TVShape[] shapes = new TVShape[7];
shapes[0] = createShape("TVIShape");
shapes[1] = createShape("TVOShape");
shapes[2] = createShape("TVLShape");
shapes[3] = createShape("TVZShape");
shapes[4] = createShape("TVJShape");
shapes[5] = createShape("TVSShape");
shapes[6] = createShape("TVTShape");
int index = new Random().nextInt(shapes.length);
return shapes[index];
}
【问题讨论】:
-
对于初学者,
shape=="TVZShape"不比较字符串。你应该使用shape.equals("TVZShape")...