160 likes | 305 Views
移动游戏开发 —— 贪吃蛇. 框架设计代码编写:舒吉 美工设计:孙冠南 软件测试:文达. 指导教师:李政仪. 了解Android图形绘制 了解游戏的基本逻辑. 简介. 通过键盘的控制可以让蛇进行游动 当蛇食了苹果之后,蛇的身体长度发生变化 当蛇撞了自己或者撞墙后,游戏结束 用户可以开始 / 暂停游戏. 图形绘制View onDraw(). 创建一个类,继承View或SurfaceView,覆盖 onDraw()方法 构造方法 View(Context context)
E N D
移动游戏开发——贪吃蛇 框架设计代码编写:舒吉 美工设计:孙冠南 软件测试:文达 指导教师:李政仪
了解Android图形绘制 了解游戏的基本逻辑 简介 • 通过键盘的控制可以让蛇进行游动 • 当蛇食了苹果之后,蛇的身体长度发生变化 • 当蛇撞了自己或者撞墙后,游戏结束 • 用户可以开始/暂停游戏
图形绘制View onDraw() • 创建一个类,继承View或SurfaceView,覆盖 onDraw()方法 • 构造方法 • View(Context context) • View(Context context, AttributeSet attrs) • View(Context context, AttributeSet attrs, int defStyle)
方法执行顺序 构造方法 onSizeChanged() 布局时该视图的大小发生改变时调用该方法.如果是刚加入的视图,变更前的值为 0 完成初始化工作 onDraw() 完成反复绘制工作
完成墙的绘制buildWall() • 完成墙绘制之前 • 加载游戏中用的图片 • 蛇头、蛇身、墙,苹果 • loadPic(int key, Drawable drawable) • 为地图位置赋值 • setTile(int picIndex, int x ,int y)
绘制墙 • 绘制墙,就是onDraw()方法检查哪些位置是赋值过的。 • 后续将扫描地图中所有的点,检查是哪一种图片,并绘制 • canvas.drawBitmap(bitmap, left, top, paint)
蛇的移动 • 蛇的移动考虑 • 实现不断的重绘 • 蛇的位置变化,形成走动 • 蛇的长度不断变化,用ArrayList • 要记录蛇的位置,需要一个坐标类 Coordinate • private ArrayList<Coordinate> snakeTrail = new ArrayList<Coordinate>();
坐标类Coordinate • 移动的新的坐标 • public Coordinate(int newX, int newY) • 碰撞、冲突检测 • public boolean equals(Coordinate other)
实现方块的移动 • 使用Handler • 相当于JavaScript setInterval用法 • 线程中止一小段时间后,重复调用绘图方法 • 通知调用重绘, View 的 invalidate()
蛇的走动 • 每次重绘前,需清除地图上所有的图 • clearTiles() • upSnake() • 要根据键盘监听事件,改变蛇头的坐标
键盘监听事件onKeyDown • 需在构造方法中 setFocusable(true); • 原因:View被显示时,没有获取焦点。也就是说,按键动作没有发送给View
实现蛇的走动 • 蛇头,新位置 • snakeTrail.add(0,newHead); • 蛇走动,不增加长度,减去最后 • snakeTrail.remove(snakeTrail.size()-1)
产生随机苹果 • addRandomApple() • 需要进行冲突检查,必段不是蛇身所在的位置,坐标检查
蛇吃掉苹果 int appleLength = appleList.size(); for (int appleIndex = 0; appleIndex < appleLength; appleIndex++) { Coordinate c = appleList.get(appleIndex); if(c.equals(newHead)){ appleList.remove(c); addRandomApple(); growSnake = true; } }
Any questions? Q & A