接着很久以前的贪吃蛇
16lz
2021-01-22
因为前几天有些事情,所以那个贪吃蛇还有部分没有完成,只做到了蛇能够移动的地步。以前的代码
所以今天就让蛇能够吃食物,并且蛇变长。
- 要实现这个功能主要做的就是判断蛇头的位置以及食物的位置。
然后就是在每次刷新时判断一下蛇头的位置是否和食物位置重合,达到吃食物的效果。
判断蛇头的位置,在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,所以就不再累述。
结果图
更多相关文章
- Google Play服务API(位置服务)是否需要数据计划?
- 路径提供者文档目录是一个安全的位置吗?
- 设置自定义Dialog的大小和位置
- 以编程方式将位置模式更改为高精度Android
- 【Based Android】android通过criteria选择合适的地理位置服务
- Settings点击Location(位置)后右上角的开关button不会消失
- 在android上滚动时,列表视图的位置会发生变化
- DialogFragment自定义dialog的位置和大小
- android里通过什么什么事件可以拿到由于click后的EditText的光标