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

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

  • 要实现这个功能主要做的就是判断蛇头的位置以及食物的位置。
  • 然后就是在每次刷新时判断一下蛇头的位置是否和食物位置重合,达到吃食物的效果。

    判断蛇头的位置,在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,所以就不再累述。

结果图

更多相关文章

  1. Google Play服务API(位置服务)是否需要数据计划?
  2. 路径提供者文档目录是一个安全的位置吗?
  3. 设置自定义Dialog的大小和位置
  4. 以编程方式将位置模式更改为高精度Android
  5. 【Based Android】android通过criteria选择合适的地理位置服务
  6. Settings点击Location(位置)后右上角的开关button不会消失
  7. 在android上滚动时,列表视图的位置会发生变化
  8. DialogFragment自定义dialog的位置和大小
  9. android里通过什么什么事件可以拿到由于click后的EditText的光标

随机推荐

  1. [转]Android onActivityResult()不执行的
  2. Android Material Design: NavigationVie
  3. Android jni的调用过程JNI_OnLoad(),利用
  4. 修改Android自带的JAVA应用程序
  5. 【Android 开发】:Android五种布局的使用
  6. 最近在翻译国外一本新书 The Android Dev
  7. Android事务 IMMEDIATE与EXCLUSIVE模式
  8. Android消息提示框和对话框
  9. android 在google商店里搜索不到的问题
  10. Android GirdView