移动游戏开发 —— 贪吃蛇

16
移移移移移移——移移移 移移移移移移移移 移移 移移移移 移移移 移移移移 移移 移移移移 移移移

description

移动游戏开发 —— 贪吃蛇. 框架设计代码编写:舒吉 美工设计:孙冠南 软件测试:文达. 指导教师:李政仪. 了解Android图形绘制 了解游戏的基本逻辑. 简介. 通过键盘的控制可以让蛇进行游动 当蛇食了苹果之后,蛇的身体长度发生变化 当蛇撞了自己或者撞墙后,游戏结束 用户可以开始 / 暂停游戏. 图形绘制View onDraw(). 创建一个类,继承View或SurfaceView,覆盖 onDraw()方法 构造方法 View(Context context) - PowerPoint PPT Presentation

Transcript of 移动游戏开发 —— 贪吃蛇

Page 1: 移动游戏开发 —— 贪吃蛇

移动游戏开发——贪吃蛇

框架设计代码编写:舒吉 美工设计:孙冠南

软件测试:文达

指导教师:李政仪

Page 2: 移动游戏开发 —— 贪吃蛇

了解 Android 图形绘制了解游戏的基本逻辑

简介

•通过键盘的控制可以让蛇进行游动•当蛇食了苹果之后,蛇的身体长度发生变化•当蛇撞了自己或者撞墙后,游戏结束•用户可以开始 / 暂停游戏

Page 3: 移动游戏开发 —— 贪吃蛇

图形绘制 View onDraw()

创建一个类,继承 View 或 SurfaceView ,覆盖 onDraw() 方法构造方法•View(Context context) •View(Context context, AttributeSet attrs) •View(Context context, AttributeSet attrs, int defStyle)

Page 4: 移动游戏开发 —— 贪吃蛇

方法执行顺序构造方法onSizeChanged()

布局时该视图的大小发生改变时调用该方法 .如果是刚加入的视图,变更前的值为 0

完成初始化工作onDraw()

完成反复绘制工作

Page 5: 移动游戏开发 —— 贪吃蛇

完成墙绘制之前加载游戏中用的图片•蛇头、蛇身、墙,苹果• loadPic(int key, Drawable drawable)

为地图位置赋值• setTile(int picIndex, int x ,int y)

完成墙的绘制 buildWall()

Page 6: 移动游戏开发 —— 贪吃蛇

绘制墙• 绘制墙,就是 onDraw() 方法检查哪些位置是赋

值过的。– 后续将扫描地图中所有的点,检查是哪一种图片,并绘

制• canvas.drawBitmap(bitmap, left, top, paint)

Page 7: 移动游戏开发 —— 贪吃蛇

蛇的移动

• 蛇的移动考虑– 实现不断的重绘– 蛇的位置变化,形成走动– 蛇的长度不断变化,用 ArrayList– 要记录蛇的位置,需要一个坐标类 Coordin

ate• private ArrayList<Coordinate> snakeTrail = new

ArrayList<Coordinate>();

Page 8: 移动游戏开发 —— 贪吃蛇

坐标类 Coordinate

• 移动的新的坐标– public Coordinate(int newX, int newY)

• 碰撞、冲突检测– public boolean equals(Coordinate other)

Page 9: 移动游戏开发 —— 贪吃蛇

实现方块的移动

• 使用 Handler– 相当于 JavaScript setInterval 用法– 线程中止一小段时间后,重复调用绘图方法– 通知调用重绘 , View 的 invalidate()

Page 10: 移动游戏开发 —— 贪吃蛇

蛇的走动

• 每次重绘前,需清除地图上所有的图– clearTiles()

• upSnake()– 要根据键盘监听事件,改变蛇头的坐标

Page 11: 移动游戏开发 —— 贪吃蛇

键盘监听事件 onKeyDown

• 需在构造方法中 setFocusable(true);– 原因: View 被显示时,没有获取焦点。也

就是说,按键动作没有发送给 View

Page 12: 移动游戏开发 —— 贪吃蛇

实现蛇的走动

• 蛇头,新位置– snakeTrail.add(0,newHead);

• 蛇走动,不增加长度,减去最后– snakeTrail.remove(snakeTrail.size()-1)

Page 13: 移动游戏开发 —— 贪吃蛇

产生随机苹果

• addRandomApple()– 需要进行冲突检查,必段不是蛇身所在的位

置,坐标检查

Page 14: 移动游戏开发 —— 贪吃蛇

蛇吃掉苹果

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;

}}

Page 15: 移动游戏开发 —— 贪吃蛇

Any questions? 

Q & A

Page 16: 移动游戏开发 —— 贪吃蛇

Thanks!