我创建了一个包含所有内容的pacman游戏,但问题是幽灵及其动画需要大量代码。
示例:
每个幽灵需要3个if语句,即每个幽灵有20行代码,如果我在游戏中有3个幽灵是3 x 20 = 60行无用编码......
用我的PHP经验我会说..使用foreach循环或类似的东西..但我应该如何用Java做到这一点?有人可以举个例子吗?我现在这样做的方式发表在下面:
创建鬼对象;
DrawPacMan ghost1 = new DrawPacMan();
DrawPacMan ghost2 = new DrawPacMan();
这幅画如下:
int g1x = 0;
boolean g1r = true;
public void paintComponent(Graphics g) {
super.paintComponent(g);
// pacman movement
diameter = 75;
pacman.drawPacMan(g, getHorPlaats(), getVerPlaats(), diameter, getView(), Color.yellow);
// ghosts movement
if(g1r == true) {
g1x += ghostSpeed;
}
if(g1r == false) {
g1x -= ghostSpeed;
}
if(g1x == 500 || g1x == 0) {
g1r = !g1r;
}
System.out.println(g1r);
ghost1.drawGhost(g, g1x, 40, diameter, Color.red);
ghost2.drawGhost(g, 170, 70, diameter, Color.blue);
}
答案 0 :(得分:7)
在我看来,你并不是以面向对象的方式接近这一点。为什么不使用鬼魂的集合,例如。 List<Ghost>
并使用它的位置,颜色等定义Ghost
对象?
这一行:
ghost1.drawGhost(g, g1x, 40, diameter, Color.red);
然后将替换为
ghost.draw(g);
并且您将遍历列表,为每个列表调用draw()
。
for(Ghost ghost : ghosts) {
ghost.draw(g); // pass in the graphics context
}
每个幽灵知道它的位置,颜色,状态等,你可以创建任意多个:
List<Ghost> ghosts = new ArrayList<Ghost>();
for (int i = 0; i < 10; i++) {
ghosts.add(new Ghost());
}
答案 1 :(得分:2)
既然你似乎是Java的新手并且仍然了解最好的习语,我会建议一些不能直接回答你问题的东西,但是在更一般的意义上是这样。你的代码
if(g1r == true) {
g1x += ghostSpeed;
}
if(g1r == false) {
g1x -= ghostSpeed;
}
可以改写为
g1x += ghostSpeed * (g1r? 1 : -1);
一般说明:永远不要将布尔值与文字值进行比较。 b == true
与b
相同,b == false
与!b
相同。
此代码
if (g1x == 500 || g1x == 0) {
g1r = !g1r;
}
可能会在运行时导致错误,因为您不会在其前面添加fencing-in代码:g1x
可以轻松超越您的限制。你应该写一下
if (g1x >= 500) { g1x = 500; g1r = false; }
else if (g1x <= 0) { g1x = 0; g1r = true; }
答案 2 :(得分:0)