1、神经猫一开始在游戏的正中间,平且还有系统随机生成的16 个路障,范围是99的空间里,并且把它分成了点,玩家在点上设置好路障后,神经猫会在看选取的路径中随机选取一条,并移动到下一个点,直至游戏结束。 3) 游戏结束界面:当神经猫移动到任意边缘时,会显示通关失败的提示;但玩家成功围住神经猫时,则显示成功通关页面,并且统计了玩家所用的步数。三 项目概要设计 3.1功能模块设计 (1)程序流程图 根据用户需求,本软件程序流程图如下: 成功 通关失败通关 再来一次 图1.程序流程图(2)程序模块设计为了提高代码的重复利用率,程序设计时自定义了以下几个类:1自定义坐标类 (Dot):每一个点都是一个抽象的
2、对象,需要把每一个点抽象为一个类,然后让每一个圆圈继承于这个类。2自定义绘制布局类(playground):继承surfaceview,将制定的绘图呈现在surfaceview上,界面的响应和绘制都在surfaceview上完成的。3自定义实现接口(OnTouchListener):为了界面的点击做出响应。(3)界面功能详细设计各界面功能详尽介绍如下:1) 游戏开始界面(图1:homepage):打开程序首先显示游戏开始界面,通过点击开始游戏,马上自动跳转到游戏界面图(homepage2) 图1:homepage2) 游戏界面(图2:homepage2):进入到游戏界面以后,就可以正式开始游戏
3、啦玩家开始对神经猫进行围追截堵 图2:homepage2 3)游戏结束界面(图3:homepage3、图4:homepage4):若玩家成功围住神经猫则显示图3,若失败则显示图4图3:homepage3 图4:homepage4 四 项目主要代码系统实现相应功能的主要代码如下:记录每个场景中的元素它的X,Y坐标点的状态:package com.example.crazycat;public class Dot /记录每个场景中的元素它的X,Y坐标点的状态。并不会直接参与界面的响应和界面的绘制 private int x, y; private int status;/记录这个点的状态 publ
4、ic static final int STATUS_OFF = -1;/代表可走的路径 public static final int STATUS_IN = 0;/猫的当前位置 public static final int STATUS_ON = 1;/已经设置的路障 /指定x,y的坐标 public Dot(int x, int y) this.x = x; this.y = y; this.status = STATUS_OFF; /指定geter和sette方法 public int getX() return x; public void setX(int x) public i
5、nt getY() return y; public void setY(int y) public int getStatus() return status; public void setStatus(int status) this.status = status; /同时设置x。y的方法 public void setXY(int x, int y) Playground类的实现:import java.util.HashMap;import java.util.Timer;import java.util.TimerTask;import java.util.Vector;impo
6、rt android.annotation.SuppressLint;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.content.Context;import android.content.DialogInterface;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;impo
7、rt android.graphics.drawable.Drawable;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import android.view.View.O
8、nTouchListener;import android.widget.Toast;public class PlayGround extends SurfaceView implements OnTouchListener /界面的响应和界面的绘制在SurfaceView完成,触摸事件的响应通过OnTouchListener接口实现 / 行数 private static final int ROW = 9; / 列数 private static final int COL = 9; / 障碍的数量 private static final int BOCKS = COL * ROW /
9、 5; / 屏幕宽度去 private int SCREEN_WIDTH; / 每个通道的宽度 private int WIDTH; / 奇数行和偶数行通道间的位置偏差量 private int DISTANCE; / 屏幕顶端和通道最顶端间的距离 private int OFFSET; / 整个通道与屏幕两端间的距离 private int length; / 做成神经猫动态图效果的单张图片 private Drawable cat_drawable; / 背景图 private Drawable background; / 神经猫动态图的索引 private int index = 0;
10、private Dot matrix; private Dot cat; private Timer timer = null; private TimerTask timerttask = null; private Context context; private int steps; private int images = R.drawable.cat1, R.drawable.cat2, R.drawable.cat3, R.drawable.cat4, R.drawable.cat5, R.drawable.cat6, R.drawable.cat7, R.drawable.cat
11、8, R.drawable.cat9, R.drawable.cat10, R.drawable.cat11, R.drawable.cat12, R.drawable.cat13, R.drawable.cat14, R.drawable.cat15, R.drawable.cat16 ; SuppressLint(ClickableViewAccessibility) public PlayGround(Context context) super(context);/使用Context创建当前类构造函数 matrix = new DotROWCOL;/将行高,列宽传递进去,指定数组大小
12、cat_drawable = getResources().getDrawable(imagesindex); background = getResources().getDrawable(R.drawable.bg); this.context = context; initGame();/调用游戏初始化 getHolder().addCallback(callback);/将Callback对象指定给getholder setOnTouchListener(this);/设定为自己的触摸监听器 this.setFocusable(true); this.setFocusableInTou
13、chMode(true); Override public boolean onKeyDown(int keyCode, KeyEvent event) if (keyCode = KeyEvent.KEYCODE_BACK) stopTimer(); return super.onKeyDown(keyCode, event); / 初始化游戏:分别对可走路径位置,猫的位置和路障位置进行初始化 private void initGame() steps=0; for (int i = 0; i ROW; i+) for (int j = 0; j images.length - 1) ind
14、ex = 0; redraw(); / 获取通道对象 private Dot getDot(int x, int y) return matrixyx; / 判断神经猫是否处于边界 private boolean inEdge(Dot dot) if (dot.getX() * dot.getY() = 0 | dot.getX() + 1 = COL | dot.getY() + 1 = ROW) return true;/当前点的坐标无论是x或y为0,或x或y值是定义的游戏场景最大值时都处于边界 return false; / 移动cat至指定点 private void moveTo(D
15、ot dot) dot.setStatus(Dot.STATUS_IN);/dot的状态设置为猫所处的点 getDot(cat.getX(), cat.getY().setStatus(Dot.STATUS_OFF);/将猫当前点的状态复位 cat.setXY(dot.getX(), dot.getY();/将猫移动到新的点 / 获取one在方向dir上的可移动距离,中心点6个方向距离的判断与获取。路径结束点为路障用负数表示,为场景边缘用正数表示 private int getDistance(Dot one, int dir) int distance = 0; if (inEdge(one
16、) return 1;/如果下一个点已在屏幕边缘,无需再判断 Dot ori = one;/定义ori和next,ori指定为当前函数传入的one Dot next; while (true) next = getNeighbour(ori, dir); if (next.getStatus() = Dot.STATUS_ON) return distance * -1;/下一个点为路障的话,直接返回距离0 if (inEdge(next) distance+; return distance;/下一个点为场景边缘时,距离+1并返回 distance+; ori = next; / 获取dot的相邻点,返回其对象 private Dot getNeighbour(Dot dot, int dir) /每个点都有6个相邻点 switch (dir) case 1: return getDot(dot.getX() - 1, dot.getY();/获得中心点左边相邻点 case 2: if (dot
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1