安卓大作业围住神经猫小游戏Word格式文档下载.docx

上传人:b****5 文档编号:17406279 上传时间:2022-12-01 格式:DOCX 页数:23 大小:253.20KB
下载 相关 举报
安卓大作业围住神经猫小游戏Word格式文档下载.docx_第1页
第1页 / 共23页
安卓大作业围住神经猫小游戏Word格式文档下载.docx_第2页
第2页 / 共23页
安卓大作业围住神经猫小游戏Word格式文档下载.docx_第3页
第3页 / 共23页
安卓大作业围住神经猫小游戏Word格式文档下载.docx_第4页
第4页 / 共23页
安卓大作业围住神经猫小游戏Word格式文档下载.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

安卓大作业围住神经猫小游戏Word格式文档下载.docx

《安卓大作业围住神经猫小游戏Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《安卓大作业围住神经猫小游戏Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。

安卓大作业围住神经猫小游戏Word格式文档下载.docx

神经猫一开始在游戏的正中间,平且还有系统随机生成的16

个路障,范围是9×

9的空间里,并且把它分成了点,玩家在点上设置好路障后,神经猫会在看选取的路径中随机选取一条,并移动到下一个点,直至游戏结束。

3)游戏结束界面:

当神经猫移动到任意边缘时,会显示通关失败的提示;

但玩家成功围住神经猫时,则显示成功通关页面,并且统计了玩家所用的步数。

三项目概要设计

3.1功能模块设计

(1)程序流程图

根据用户需求,本软件程序流程图如下:

成功通关失败

通关再来一次

图1.程序流程图

(2)程序模块设计

为了提高代码的重复利用率,程序设计时自定义了以下几个类:

1 自定义坐标类(Dot):

每一个点都是一个抽象的对象,需要把每一个点抽象为一个类,然后让每一个圆圈继承于这个类。

2 自定义绘制布局类(playground):

继承surfaceview,将制定的绘图呈现在surfaceview上,界面的响应和绘制都在surfaceview上完成的。

3 自定义实现接口(OnTouchListener):

为了界面的点击做出响应。

(3)界面功能详细设计

各界面功能详尽介绍如下:

1)游戏开始界面(图1:

homepage):

打开程序首先显示游戏开始界面,通过点击开始游戏,马上自动跳转到游戏界面图(homepage2)

图1:

homepage

2)游戏界面(图2:

homepage2):

进入到游戏界面以后,就可以正式开始游戏啦玩家开始对神经猫进行围追截堵

图2:

homepage2

3)游戏结束界面(图3:

homepage3、图4:

homepage4):

若玩家成功围住神经猫则显示图3,若失败则显示图4

图3:

homepage3图4:

homepage4

四项目主要代码

系统实现相应功能的主要代码如下:

记录每个场景中的元素它的X,Y坐标点的状态:

packagecom.example.crazycat;

publicclassDot{//记录每个场景中的元素它的X,Y坐标点的状态。

并不会直接参与界面的响应和界面的绘制

privateintx,y;

privateintstatus;

//记录这个点的状态

publicstaticfinalintSTATUS_OFF=-1;

//代表可走的路径

publicstaticfinalintSTATUS_IN=0;

//猫的当前位置

publicstaticfinalintSTATUS_ON=1;

//已经设置的路障

//指定x,y的坐标

publicDot(intx,inty){

this.x=x;

this.y=y;

this.status=STATUS_OFF;

}

//指定geter和sette方法

publicintgetX(){

returnx;

publicvoidsetX(intx){

publicintgetY(){

returny;

publicvoidsetY(inty){

publicintgetStatus(){

returnstatus;

publicvoidsetStatus(intstatus){

this.status=status;

//同时设置x。

y的方法

publicvoidsetXY(intx,inty){

}

Playground类的实现:

importjava.util.HashMap;

importjava.util.Timer;

importjava.util.TimerTask;

importjava.util.Vector;

importandroid.annotation.SuppressLint;

importandroid.app.AlertDialog;

importandroid.app.AlertDialog.Builder;

importandroid.content.Context;

importandroid.content.DialogInterface;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.graphics.RectF;

importandroid.graphics.drawable.Drawable;

importandroid.view.KeyEvent;

importandroid.view.MotionEvent;

importandroid.view.SurfaceHolder;

importandroid.view.SurfaceHolder.Callback;

importandroid.view.SurfaceView;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.view.View.OnTouchListener;

importandroid.widget.Toast;

publicclassPlayGroundextendsSurfaceViewimplementsOnTouchListener{

//界面的响应和界面的绘制在SurfaceView完成,触摸事件的响应通过OnTouchListener接口实现

//行数

privatestaticfinalintROW=9;

//列数

privatestaticfinalintCOL=9;

//障碍的数量

privatestaticfinalintBOCKS=COL*ROW/5;

//屏幕宽度去

privateintSCREEN_WIDTH;

//每个通道的宽度

privateintWIDTH;

//奇数行和偶数行通道间的位置偏差量

privateintDISTANCE;

//屏幕顶端和通道最顶端间的距离

privateintOFFSET;

//整个通道与屏幕两端间的距离

privateintlength;

//做成神经猫动态图效果的单张图片

privateDrawablecat_drawable;

//背景图

privateDrawablebackground;

//神经猫动态图的索引

privateintindex=0;

privateDot[][]matrix;

privateDotcat;

privateTimertimer=null;

privateTimerTasktimerttask=null;

privateContextcontext;

privateintsteps;

privateint[]images={R.drawable.cat1,R.drawable.cat2,R.drawable.cat3,

R.drawable.cat4,R.drawable.cat5,R.drawable.cat6,R.drawable.cat7,

R.drawable.cat8,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"

publicPlayGround(Contextcontext){

super(context);

//使用Context创建当前类构造函数

matrix=newDot[ROW][COL];

//将行高,列宽传递进去,指定数组大小

cat_drawable=getResources().getDrawable(images[index]);

background=getResources().getDrawable(R.drawable.bg);

this.context=context;

initGame();

//调用游戏初始化

getHolder().addCallback(callback);

//将Callback对象指定给getholder

setOnTouchListener(this);

//设定为自己的触摸监听器

this.setFocusable(true);

this.setFocusableInTouchMode(true);

@Override

publicbooleanonKeyDown(intkeyCode,KeyEventevent){

if(keyCode==KeyEvent.KEYCODE_BACK){

stopTimer();

}

returnsuper.onKeyDown(keyCode,event);

//初始化游戏:

分别对可走路径位置,猫的位置和路障位置进行初始化

privatevoidinitGame(){

steps=0;

for(inti=0;

i<

ROW;

i++){

for(intj=0;

j<

COL;

j++){

matrix[i][j]=newDot(j,i);

/*X,Y坐标值和行列值是相反的。

即通过查找列值获得X坐标,查找行值获得Y坐标*/

}

i++){//用for循环将所有点设置为STATUS_OFF,即可用状态

matrix[i][j].setStatus(Dot.STATUS_OFF);

cat=newDot(COL/2-1,ROW/2-1);

//设置猫的起始点

getDot(cat.getX(),cat.getY()).setStatus(Dot.STATUS_IN);

//把猫的起始点的状态设置为STATUS_IN,才能记录猫的位置

BOCKS;

){//用for循环随机的指定16个点的坐标作为路障

intx=(int)((Math.random()*1000)%COL);

inty=(int)((Math.random()*1000)%ROW);

//随机获取1对坐标点

if(getDot(x,y).getStatus()==Dot.STATUS_OFF){//对当前可用路径点进行选择

getDot(x,y).setStatus(Dot.STATUS_ON);

//把这个点设置成路障

i++;

//实现界面绘制,在redraw方法中将所有元素以图形化显示出来,也就是将它绘制在Canvas对象上

privatevoidredraw(){

Canvascanvas=getHolder().lockCanvas();

//锁定画布

canvas.drawColor(Color.GRAY);

//设置颜色为浅灰色

Paintpaint=newPaint();

//创建Paint对象

paint.setFlags(Paint.ANTI_ALIAS_FLAG);

//开启抗锯齿,优化视频质量

//用两个For循环嵌套将所有的点显示到界面中来

DISTANCE=0;

//引入偏移量

if(i%2!

=0){

DISTANCE=(int)WIDTH/2;

//对偶数行进行缩进

}

Dotdot=getDot(j,i);

//将坐标赋值给内部变量one

switch(dot.getStatus()){//由于每个点对应的三种状态颜色不一样,要用一个switch语句

caseDot.STATUS_IN:

paint.setColor(0XFFEEEEEE);

//STATUS_IN状态时设置颜色为浅灰

break;

caseDot.STATUS_ON:

paint.setColor(0XFFFFAA00);

//STATUS_ON状态时设置颜色为橙色

caseDot.STATUS_OFF:

paint.setColor(0X74000000);

//STATUS_OFF状态时设置颜色为黑色

default:

canvas.drawOval(newRectF(dot.getX()*WIDTH+DISTANCE

+length,dot.getY()*WIDTH+OFFSET,(dot.getX()+1)

*WIDTH+DISTANCE+length,(dot.getY()+1)*WIDTH

+OFFSET),paint);

/*在Canvas画布上画椭圆并界定它的上下左右边界宽度且有错位*/

intleft=0;

inttop=0;

if(cat.getY()%2==0){

left=cat.getX()*WIDTH;

top=cat.getY()*WIDTH;

}else{

left=(int)(WIDTH/2)+cat.getX()*WIDTH;

//此处神经猫图片的位置是根据效果图来调整的

cat_drawable.setBounds(left-WIDTH/6+length,top-WIDTH/2

+OFFSET,left+WIDTH+length,top+WIDTH+OFFSET);

cat_drawable.draw(canvas);

background.setBounds(0,0,SCREEN_WIDTH,OFFSET);

background.draw(canvas);

getHolder().unlockCanvasAndPost(canvas);

;

//取消Canvas的锁定,把绘图内容更新到界面上

//为Surfaceview添加Callback

Callbackcallback=newCallback(){//声明并实例化一个Callback接口

publicvoidsurfaceCreated(SurfaceHolderholder){

redraw();

//执行redraw函数,在界面第一次显示时将指定的内容显示到界面上

startTimer();

//使用surfaceChanged方法来适配不同的屏幕尺寸

publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,

intheight){

WIDTH=width/(COL+1);

OFFSET=height-WIDTH*ROW-2*WIDTH;

length=WIDTH/3;

SCREEN_WIDTH=width;

publicvoidsurfaceDestroyed(SurfaceHolderholder){

};

//开启定时任务

privatevoidstartTimer(){

timer=newTimer();

timerttask=newTimerTask(){

publicvoidrun(){

gifImage();

};

timer.schedule(timerttask,50,65);

//停止定时任务

publicvoidstopTimer(){

timer.cancel();

timer.purge();

//动态图

privatevoidgifImage(){

index++;

if(index>

images.length-1){

index=0;

redraw();

//获取通道对象

privateDotgetDot(intx,inty){

returnmatrix[y][x];

//判断神经猫是否处于边界

privatebooleaninEdge(Dotdot){

if(dot.getX()*dot.getY()==0||dot.getX()+1==COL

||dot.getY()+1==ROW){

returntrue;

//当前点的坐标无论是x或y为0,或x或y值是定义的游戏场景最大值时都处于边界

returnfalse;

//移动cat至指定点

privatevoidmoveTo(Dotdot){

dot.setStatus(Dot.STATUS_IN);

//dot的状态设置为猫所处的点

getDot(cat.getX(),cat.getY()).setStatus(Dot.STATUS_OFF);

//将猫当前点的状态复位

cat.setXY(dot.getX(),dot.getY());

//将猫移动到新的点

//获取one在方向dir上的可移动距离,中心点6个方向距离的判断与获取。

路径结束点为路障用负数表示,为场景边缘用正数表示

privateintgetDistance(Dotone,intdir){

intdistance=0;

if(inEdge(one)){

return1;

//如果下一个点已在屏幕边缘,无需再判断

Dotori=one;

//定义ori和next,ori指定为当前函数传入的one

Dotnext;

while(true){

next=getNeighbour(ori,dir);

if(next.getStatus()==Dot.STATUS_ON){

returndistance*-1;

//下一个点为路障的话,直接返回距离0

if(inEdge(next)){

distance++;

returndistance;

//下一个点为场景边缘时,距离+1并返回

distance++;

ori=next;

//获取dot的相邻点,返回其对象

privateDotgetNeighbour(Dotdot,intdir){//每个点都有6个相邻点

switch(dir){

case1:

returngetDot(dot.getX()-1,dot.getY());

//获得中心点左边相邻点

case2:

if(dot

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1