我正在编写蛇游戏,所以我制作了一个SnakeLogic代表蛇逻辑模型的类。
实现如下:snake 由段组成,每个段保存它的起始位置、长度和运动方向。这是Segment该类(的内部类SnakeLogic)的完整代码:
protected class Segment{
public Point location;
public SnakeDirection dir;
public int length;
public Segment(Point l, SnakeDirection dir,int length){
location=l;
this.dir=dir;
this.length=length;
}
}
段用一个LinkedList:
private LinkedList<Segment> nodes;
当方向改变时,新段被添加到 的开头LinkedList:
public void setDirection(SnakeDirection dir){
//gets location and direction of first segment
Point head = nodes.getFirst().location;
SnakeDirection currentDir = nodes.getFirst().dir;
//if direction isn't changed, return
if (currentDir == dir) return;
//ignores directions that are opposite to current one.
switch(currentDir){
case LEFT:
if (dir==SnakeDirection.RIGHT) return;
break;
case RIGHT:
if (dir==SnakeDirection.LEFT) return;
break;
case UP:
if (dir==SnakeDirection.DOWN) return;
break;
case DOWN:
if (dir==SnakeDirection.UP) return;
break;
}
//adds new segment with 0 length,current first segment's location
//and given direction
nodes.addFirst(new Segment(head,dir,0));
}
该方法Next()计算蛇的运动。根据运动方向,第一段的位置发生变化;如果蛇包含 1 个以上的段,则第一个段的长度增加给定值 ( stepSize),最后一段的长度减少此值。如果最后一段的长度变为 <=0,则删除最后一段(如果长度小于零,则从当前最后一段中减去余数)。
BIG阳
长风秋雁
相关分类