贪吃蛇

计算机113 蒋镇阳

一、游戏分析

 

1、你需要考虑以下问题:

a) 界面

            墙

            蛇

            苹果

b)   游戏逻辑

  蛇走动

  蛇的控制

  苹果随机出现

  蛇吃掉苹果

  蛇长度增加

 

      游戏在运行中,蛇的走动,转弯,吃掉苹果,怎么计算?二维数组实现,一个地图:map[x][y],墙边界、蛇的走边,吃苹果,都依靠坐标定位。

 

      本游戏中有三种类型图片:墙,苹果(绿色) ,蛇头(红色),蛇身(黄色)

 

      贪吃蛇游戏在游戏开发中碰撞检测属于“地图格子划分检测”。

      即在游戏开发时,把屏幕划分成点阵的格子组成。

 

 

二、图形绘制

 

动态图形绘制:

 

动态图形绘制的基本思路:创建一个类继承View类(或继承SurfaceView类),覆盖onDraw方法,使用Canvas()对象在界面上绘制不同的图形,使用invalidate()方法刷新界面。

 

Canvas 画布  android.graphics  提供一些画图形的方法

Paint   画笔  用来描述图形的颜色和网格

Color   颜色  颜色常量和创建颜色的方法 RGB

Path   指定路径 如要画圆时,需要指定圆心和半径,Path一般用来从某个点移动到另一个点连线

 

 

 

三、游戏实现

   1、初始化地图坐标。

 

       前提一:屏幕的宽和高,在程序一开始就获取屏幕的宽和高。

protected void onSizeChanged(int w, int h, int oldw, int oldh){....}

   w,h即为屏幕的宽和高。

 

       前提二:地图的行数和列数,初始化地图数组map。

 

       这些初始化的工作,在第一次加载时会首先调用onSizeChanged方法。

 

   xcount =(int)Math.floor(w/size);

   ycount = (int)Math.floor(h/size);

 

   xoffset = (w-(xcount*size))/2;

   yoffset = (h-(ycount*size))/2;

 

   map = new int[xcount][ycount];

 

 

  2、把图片加载进来,将用不同类型的图片绘制墙,蛇和苹果

    public void loadPic(int key, Drawable drawable){

     Bitmap bitmap =        Bitmap.createBitmap(size,size,Bitmap.Config.ARGB_8888);

     Canvas canvas = new Canvas(bitmap);

     drawable.setBounds(0, 0, size, size);

     drawable.draw(canvas);

     pics[key]=bitmap;

   }

 

  

 

   3、为地图数组赋值的方法:

   public void setTile(int picIndex,int x,int y){

    map[x][y]= picIndex;

   }

 

 

 

    4、 初始化边界墙。计算出边界,对map进行赋值。

 

public void buildWall(){

     //横向

   for (int x = 0; x < xcount; x++) {

      setTile(GREEN_STAR, x, 0);

      setTile(GREEN_STAR, x, ycount-1);

    }

     //纵向

   for (int y = 0; y < ycount; y++) {

     setTile(GREEN_STAR, 0, y);

     setTile(GREEN_STAR, xcount-1, y );

   }

  }

 

 

   

  

   5、绘制墙(边界)交给onDraw()方法。实际上蛇的走动,苹果出现,就是由此方法画出来。

 

for (int x = 0; x < xcount; x++) {

 

    for (int y = 0; y < ycount; y++) {

        //理解map[x][y]==0的情况

      if(map[x][y]>0){

 

          canvas.drawBitmap(pics[map[x][y]], 

            xoffset+x*size,

            yoffset+y*size,

            paint);

    }

  }

}

转载于:https://www.cnblogs.com/jiangzhenyang/p/3159183.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值