贪吃蛇android源码分享

闲来无事就想写个游戏来耍耍。想来想去,就计划写个贪吃蛇。开始的时候不知道怎么下手,自己也不想上网用别人的代码,后来不断地翻书。终于让我找到了一个好方法,那就是自己绘画贪吃蛇和食物。
下面就是我具体代码的分析。

主要代码有分布在三个类中:
1、Point类:记录蛇身位置(左上角和右下角坐标)。
2、Snake类:负责画蛇身和食物。
3、MySnakeView类:继承于View,并且处理逻辑。

主要思维:
1、游戏蛇身和食物位置的产生和判断:首先初始化的的蛇身方块放到另一个一个list表snake中,然后将屏幕上蛇身能够经过的方块位置放在一个表中(去除蛇身自方块,也就是snake表中的蛇身方块),以便于在不是蛇身位置产生食物。

2、蛇身的移动:在新线程中设置移动速度,不断地在画布上画相关内容,移动逻辑是上一个蛇身方块不断替换下一个蛇身方块,从而达到移动效果。

3、碰撞检测:检测是否触碰到屏幕边缘,和吃到自己。

好了,下面就是代码了。

一、Point类:

package com.example.mysnakegame;


public class Point {
   //方块左上角坐标,右下角坐标

    private float snakeX,snakeY,snakeBottomX,snakeBottomY;

    public Point(float snakeX,float snakeY,float snakeBottomX,float snakeBottomY,
            boolean isSnake,boolean isFood){
        this.snakeX = snakeX;//左上角X
        this.snakeY = snakeY;//左上角Y
        this.snakeBottomX = snakeBottomX;//右下角X
        this.snakeBottomY = snakeBottomY;//右下角Y
    }

    public float getSnakeX() {
        return snakeX;
    }

    public float getSnakeY() {
        return snakeY;
    }

    public float getSnakeBottomX() {
        return snakeBottomX;
    }

    public float getSnakeBottomY() {
        return snakeBottomY;
    }

    public boolean isEqualSnake(Snake snake){
  //判断两个方块是否相同
        boolean flag = false;
        if (Math.abs(snake.getSnakeX()-this.snakeX)<1e-4&&
                Math.abs(snake.getSnakeY()-this.snakeY)<1e-4&&
                Math.abs(snake.getSnakeBottomX()-this.snakeBottomX)<1e-4&&
                Math.abs(snake.getSnakeBottomY()-this.snakeBottomY)<1e-4
                ) {
            flag = true;
        }
        return flag;
    }

}

二、Snake类:

package com.example.mysnakegame;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;

public class Snake {
   //画蛇身方块
    float snakeX,snakeY,snakeBottomX,snakeBottomY,moveDistance;//蛇身方块的左上角坐标
    private Paint paint;
    private boolean isHead;

    public Snake(){
        snakeX = 0;
        snakeY = 0;
        snakeBottomX = 0;
        snakeBottomY = 0;
        moveDistance = 0;
        isHead = false;
        paint = new Paint();
        paint.setColor(Color.GRAY);
    }

    public void setParameter(float snakeX,float snakeY,float snakeBottomX,
            float snakeBottomY,float moveDistance){
  //设置蛇身方块的位置参数
        this.snakeX = snakeX;
        this.snakeY = snakeY;
        this.snakeBottomX = snakeBottomX;
        this.snakeBottomY = snakeBottomY;
        this.mo
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值