0

在学校有一项新任务从头开始编写 Snake 游戏,当 Snakehead 吃食物时需要使用数组来添加新的 Snake 身体部位,并且一开始 Snake 需要有 1 个头部和 2 个身体部位……而我没有想法如何做到这一点..有人可以帮助我正确的方向..如何开始?到目前为止,这是我的代码:

世界:

public class WorldofSnake extends World
{

    /**
     * Constructor for objects of class WorldofSnake.
     * 
     */
    public WorldofSnake()
    {    

        super(600, 400, 1); 

        addObject ( new Snake(),70 , 50);
        addObject ( new Food(), Greenfoot.getRandomNumber(600), Greenfoot.getRandomNumber(400));
    }
}

类蛇:

import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Snake here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Snake extends Actor
{

private int foodEaten;



public Snake()
{
     foodEaten = 0;
}


public void act() 
{
       checkKeypress();
       lookForFood();
    }

    public void checkKeypress()
    { if(Greenfoot.isKeyDown("left")){
      setLocation(getX() - 2,(getY()));
    }
      if(Greenfoot.isKeyDown("right")){
      setLocation(getX() + 2,(getY()));
    }
      if(Greenfoot.isKeyDown("up")){
      setLocation(getX() ,(getY() - 2));  
    }
      if(Greenfoot.isKeyDown("down")){
      setLocation(getX() ,(getY() + 2));  
}

}
public void lookForFood()
{
  Actor a = getOneIntersectingObject(Food.class);
  if (a !=null)
{
  getWorld().removeObject(a);
  getWorld().addObject ( new Food(), Greenfoot.getRandomNumber(600), Greenfoot.getRandomNumber(400));
  foodEaten = foodEaten + 1;
}

}
}
4

1 回答 1

1

我感觉您的问题比简单的数组处理更笼统。

看起来你正试图在你的蛇类中放置很多精灵交互逻辑。

可能更好的主意是将用户输入移到其他地方,并让游戏板将状态更改传达给各种精灵(蛇、食物、墙等),包括碰撞检测。如果游戏板检测到蛇和食物之间的碰撞,它会将食物精灵移动到下一个位置并在游戏中的蛇对象上调用 Eat()。如果它检测到蛇与自身发生碰撞,则游戏将结束。

让蛇在板上绘制自己或至少存储它的显示信息以供板处理并不是不合理的。蛇对象可以有一个数组(或者更好的是一个 ArrayList)来存储组成蛇的块的坐标。随着蛇的移动,您可以在数组上递增并更改点以考虑移动方向和移动距离。如果我正在实现它,我会使用一组枢轴点来告诉蛇在穿过棋盘时如何转动蛇的碎片。当枢轴点不再有效(蛇不再有任何穿过枢轴的部分)时,我会将其从数组中删除。

只是我的建议。我不以制作游戏为生,所以我相信还有更好的方法可以做到这一点。

*如果您想进一步了解如何设置它,您可以在四人组的 Design Patterns 中找到类似 InDesign 的应用程序中使用前者的示例。

于 2011-10-20T20:04:14.353 回答