您的位置:首页 > 编程语言 > Java开发

接着很久以前的贪吃蛇

2017-06-10 12:40 176 查看

因为前几天有些事情,所以那个贪吃蛇还有部分没有完成,只做到了蛇能够移动的地步。以前的代码

所以今天就让蛇能够吃食物,并且蛇变长。

要实现这个功能主要做的就是判断蛇头的位置以及食物的位置。

然后就是在每次刷新时判断一下蛇头的位置是否和食物位置重合,达到吃食物的效果。

判断蛇头的位置,在Node类里面增加方法

// 得到节点的位置
public Rectangle getNodeLocation() {
// 就是一个矩形
return new Rectangle(x * PlayGround.BLOCK_SIZE, y
* PlayGround.BLOCK_SIZE, PlayGround.BLOCK_SIZE,
PlayGround.BLOCK_SIZE);
}


同样砖块的位置在Block类中增加

// 得到砖块的位置
public Rectangle getBlockLocation() {
return new Rectangle(x * PlayGround.BLOCK_SIZE, y
* PlayGround.BLOCK_SIZE, PlayGround.BLOCK_SIZE,
PlayGround.BLOCK_SIZE);
}


当位置信息都得到后,后面所需要做的就是判断了,所以在Playground的类中的paint方法中增加一个判断蛇是否吃了果子

snake.eat(map);// 蛇是否吃到了果子

所以在Snake类中需要有一个判读是否吃到map中的果子的方法,而这个方法主要就是把头的位置与map中所有标记为egg的block比较如果成功,则蛇addHead();

具体实现如下

public void eat(Map m) {
// 看是否吃到了果子
for (int i = 0; i < m.block.size(); i++) {
Block b = m.block.get(i);
// 看蛇的头的位置是否和果子在一个位置
if (b.getMark() == Mark.Egg
&& this.head.getNodeLocation().intersects(b.getBlockLocation())) {
m.block.set(i, new Block(b.getX(), b.getY(), Mark.Block));
// 并且长度增加
this.addHead();
}

}

}


这个地方我把吃掉的蛋又变成了一个障碍物(m.block.set(i, new Block(b.getX(), b.getY(), Mark.Block));),也可以remove都可以。

到此一个简单的贪吃蛇就完成了,其中还缺一个判断边界,这个与判断吃蛋是一样的,只不过一个结局是长度++,一个是gameOver,所以就不再累述。

结果图
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 贪吃蛇