当前位置: 代码迷 >> Android >> Android自学进程—围住神经猫开发
  详细解决方案

Android自学进程—围住神经猫开发

热度:78   发布时间:2016-04-27 23:41:20.0
Android自学历程—围住神经猫开发

学习核心内容:
  1. 学会SurfaceView的绘图技巧。
  2. 掌握神经猫的游戏逻辑设计。

 

第一阶段主要完成内容:

  • 并且创建游戏所需的类,搭建基本的代码结构。
  • 创建一个二维数组,用于保存游戏场景,并且将场景初始化。
  • SurfaceView中根据场景数据,在界面中绘制点阵。

先上代码

 1 package com.ryan.catchcrazycat; 2  3 /** 4  * Created by air on 15-8-1. 5  */ 6 public class Dot { 7  8     /* 9     记录当前点的X,Y坐标10      */11     int x,y;12 13     /*14     记录点的状态15      */16     int status;17 18     public static final int STATUS_ON = 1;19     public static final int STATUS_OFF = 0;20     public static final int STATUS_IN = 9;21 22     public Dot(int x,int y) {23         this.x = x;24         this.y = y;25         status = STATUS_OFF;26     }27 28     public int getX() {29         return x;30     }31 32     public int getY() {33         return y;34     }35 36     public void setX(int x) {37         this.x = x;38     }39 40     public void setY(int y) {41         this.y = y;42     }43 44     public void setX(int x,int y) {45         this.x = x;46         this.y = y;47     }48 49     public void setStatus(int status){50         this.status = status;51     }52 }
Dot.java
  1 package com.ryan.catchcrazycat;  2   3 import android.content.Context;  4 import android.graphics.Canvas;  5 import android.graphics.Color;  6 import android.graphics.Paint;  7 import android.graphics.RectF;  8 import android.view.SurfaceHolder;  9 import android.view.SurfaceView; 10  11 /** 12  * Created by air on 15-8-1. 13  */ 14 public class playground extends SurfaceView implements SurfaceHolder.Callback{ 15  16  17  18     private static int WIDTH = 40; 19     private static final int COL = 10; 20     private static final int ROM = 10; 21     private static final int BLOCKS = 10;//默认添加的路障数量 22  23     private Dot matrix[][]; 24     private Dot cat; 25  26     public playground(Context context) { 27         super(context); 28         getHolder().addCallback(this); 29         matrix = new Dot[ROM][COL]; 30         for (int i = 0; i < ROM; i++) { 31             for (int j = 0; j < COL; j++) { 32                 matrix[i][j] = new Dot(j,i); 33             } 34         } 35  36         initGame(); 37     } 38  39  40     private void redraw() { 41         Canvas canvas = getHolder().lockCanvas(); 42         canvas.drawColor(Color.LTGRAY); 43         Paint paint = new Paint(); 44         paint.setFlags(Paint.ANTI_ALIAS_FLAG); 45         for (int i = 0; i < ROM; i++) { 46             int offset = 0; //错位解决 47             if (i%2==0){ 48                 offset = WIDTH/2; 49             } 50             for (int j = 0; j < COL; j++) { 51                 Dot one = getDot(j,i); 52                 switch (one.status){ 53                     case Dot.STATUS_OFF: 54                         paint.setColor(0xFFEEEEEE); 55                         break; 56                     case Dot.STATUS_ON: 57                         paint.setColor(0xFFFFAA00); 58                         break; 59                     case Dot.STATUS_IN: 60                         paint.setColor(0xFFFF0000); 61                         break; 62                     default: 63                         break; 64                 } 65                 canvas.drawOval( 66                         new RectF(one.getX()*WIDTH+offset,one.getY()*WIDTH,(one.getX()+1)*WIDTH+offset,(one.getY()+1)*WIDTH),paint); 67             } 68         } 69         getHolder().unlockCanvasAndPost(canvas); 70     } 71  72     @Override 73     public void surfaceCreated(SurfaceHolder holder) { 74         redraw(); 75     } 76  77     @Override 78     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 79         WIDTH = width/(COL+1); 80         redraw(); 81     } 82  83     @Override 84     public void surfaceDestroyed(SurfaceHolder holder) { 85  86     } 87  88     private void initGame(){ 89         for (int i = 0; i < ROM; i++) { 90             for (int j = 0; j < COL; j++) { 91                 matrix[i][j].setStatus(Dot.STATUS_OFF); 92             } 93         } 94         cat = new Dot(4,5); 95         getDot(4,5).setStatus(Dot.STATUS_IN); 96         for (int i = 0; i < BLOCKS; ) { 97             int x = (int)(Math.random()*1000%COL); 98             int y = (int)(Math.random()*1000%COL); 99             if (getDot(x,y).status==Dot.STATUS_OFF){100                 getDot(x,y).setStatus(Dot.STATUS_ON);101                 i++;102                 System.out.println("BLOCKS"+i);103             }104         }105     }106 107     private Dot getDot(int x,int y){108         return matrix[y][x];109     }110 111 }
playground.java
 1 package com.ryan.catchcrazycat; 2  3 import android.support.v7.app.ActionBarActivity; 4 import android.os.Bundle; 5 import android.view.Menu; 6 import android.view.MenuItem; 7  8  9 public class MainActivity extends ActionBarActivity {10 11     @Override12     protected void onCreate(Bundle savedInstanceState) {13         super.onCreate(savedInstanceState);14         setContentView(new playground(this));15     }16 17 18 }
MainActivity

  来张截图。

 

还没有来得及细细品味,想法感悟心得,后续跟进。

 

  相关解决方案