2.3 详细设计
2.3.1 程序主结构
本次所设计贪吃蛇游戏的程序主结构如图 6 所示。
初始化
进入事件等待状态
初始化失败
不正常退出
开始请求
相关事件
返回
暂停请求
退出
正常退出
图 6 贪吃蛇程序主结构
SnakeView 类
设置函数坐标和方向
设置初始化状态
图 10 SnakeView 类程序流程图
设置贪吃蛇界面并初始化游戏
是 否 与 运 行 方
向相反
Y
保持原来 的
方向
按指示方向运动
蛇 是 否 吃 了 随
机块
Y
重设置蛇头和
蛇身,重新生
成随机块
N
是否出界
N
N
N
Y
游戏结束
是否相交
Y
游戏结束
N
移动,把蛇头加到蛇身体
里面并且把尾巴移出
是否 与运 行方向
相同或相反
方向更新,返回 ture
N
三 snaker 游戏运行截图
3.1 建立 android 工程
游戏运行效果,下图所示:
四 源代码
4.1 snaker.java
public class Snake extends Activity {
private SnakeView mSnakeView;
private static String ICICLE_KEY = "snake-view";
//在 activity 第一次创建时被调用
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.snake_layout);
mSnakeView = (SnakeView) findViewById(R.id.snake);
mSnakeView.setTextView((TextView) findViewById(R.id.text));
// 检查存贮状态以确定是重新开始还是恢复状态
if (savedInstanceState == null) {
// 存储状态为空,说明刚启动可以切换到准备状态
mSnakeView.setMode(SnakeView.READY);
} else {
// 已经保存过,那么就去恢复原有状态
Bundle map = savedInstanceState.getBundle(ICICLE_KEY);
if (map != null) { // 恢复状态
mSnakeView.restoreState(map);
} else {// 设置状态为暂停
mSnakeView.setMode(SnakeView.PAUSE);
}
}
}
// 暂停事件被触发时
@Override
protected void onPause() {
super.onPause();
mSnakeView.setMode(SnakeView.PAUSE);
}
// 状态保存
@Override
public void onSaveInstanceState(Bundle outState) {