移动游戏开发 —— 贪吃蛇
-
Upload
leo-dorsey -
Category
Documents
-
view
123 -
download
0
description
Transcript of 移动游戏开发 —— 贪吃蛇
移动游戏开发——贪吃蛇
框架设计代码编写:舒吉 美工设计:孙冠南
软件测试:文达
指导教师:李政仪
了解 Android 图形绘制了解游戏的基本逻辑
简介
•通过键盘的控制可以让蛇进行游动•当蛇食了苹果之后,蛇的身体长度发生变化•当蛇撞了自己或者撞墙后,游戏结束•用户可以开始 / 暂停游戏
图形绘制 View onDraw()
创建一个类,继承 View 或 SurfaceView ,覆盖 onDraw() 方法构造方法•View(Context context) •View(Context context, AttributeSet attrs) •View(Context context, AttributeSet attrs, int defStyle)
方法执行顺序构造方法onSizeChanged()
布局时该视图的大小发生改变时调用该方法 .如果是刚加入的视图,变更前的值为 0
完成初始化工作onDraw()
完成反复绘制工作
完成墙绘制之前加载游戏中用的图片•蛇头、蛇身、墙,苹果• loadPic(int key, Drawable drawable)
为地图位置赋值• setTile(int picIndex, int x ,int y)
完成墙的绘制 buildWall()
绘制墙• 绘制墙,就是 onDraw() 方法检查哪些位置是赋
值过的。– 后续将扫描地图中所有的点,检查是哪一种图片,并绘
制• canvas.drawBitmap(bitmap, left, top, paint)
蛇的移动
• 蛇的移动考虑– 实现不断的重绘– 蛇的位置变化,形成走动– 蛇的长度不断变化,用 ArrayList– 要记录蛇的位置,需要一个坐标类 Coordin
ate• 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
Thanks!