制作贪吃蛇

本文详细介绍了如何从零开始构建一款简单的贪吃蛇游戏,包括游戏的基本设计思路、蛇类和方块实体类的创建、游戏主界面设计等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

制作贪吃蛇

  1. 基本设计思路

    绘制网格制作地图,

    控制方向的四个按钮,上下左右,

    蛇由蛇身,蛇头组成,—都是大小相同的方块

    方块属性----x—y 颜色–可以在绘制的时候添加

    蛇上下左右移动xy的变化,

    食物的产生,蛇吃食物;

  2. 需要解决的问题

    • 边界处理

      蛇头触碰到边界死亡或者穿墙而过,

    • 碰到自己

      蛇头触碰到自己的身体

    • 食物的随机产生

    • 吃到食物自身长度增加

    • 上下左右移动处理

  3. 方块实体类的创建

    写入方块的基本属性,及方法,目前只写了基础属性,方法后续用到再进行书写。

    public class BlockUnit {
        public static  final int UNIT_SIZE=50; 
        public static final int BEGIN=10;
       // public int color;
        public int x,y;
        public BlockUnit() {
        }
        public BlockUnit( int x, int y) {
            this.x = x;
            this.y = y;
           // this.color = color;
        }
    
  4. 蛇类的创建

    设置蛇的基本属性,及颜色,以及获取蛇的方法

    public class SnakeBlock {
        private static final int SnakeSize=7;
        //private int HandColor,SnakeColo ,x,y;
        private int x,y;
        public SnakeBlock() {
        }
        public SnakeBlock(int x, int y) {
            this.x = x;
            this.y = y;
        }
        public List<BlockUnit> getUnit(int x,int y){
            this.x=x;
            this.y=y;
            return returnSnake();
        }
        private List<BlockUnit> returnSnake() {
            List<BlockUnit> units=new ArrayList<BlockUnit>();
            units.clear();
            units.add(new BlockUnit(x-0*BlockUnit.UNIT_SIZE,y+0*BlockUnit.UNIT_SIZE));
            units.add(new BlockUnit(x-1*BlockUnit.UNIT_SIZE,y+0*BlockUnit.UNIT_SIZE));
            units.add(new BlockUnit(x-2*BlockUnit.UNIT_SIZE,y+0*BlockUnit.UNIT_SIZE));
            units.add(new BlockUnit(x-3*BlockUnit.UNIT_SIZE,y+0*BlockUnit.UNIT_SIZE));
            return units;
        }
    }
    
  5. 游戏主界面的设计,与之前设计的俄罗斯方块游戏界面非常类似,首先创建画笔对象,进行初始化,在构造方法中进行画笔的初始化,

    先对游戏地图也就是背景画笔初始化,设置画笔颜色,模式或者说类型空心, 当画笔样式为STROKEE时,设置笔刷的粗细度

    对蛇画笔进行初始化以及实例化蛇类

    public SnakeView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        if (paintWall==null){  //背景画笔初始化
            paintWall=new Paint();
            paintWall.setColor(Color.LTGRAY);
            paintWall.setStyle(Paint.Style.STROKE);  //空心
            paintWall.setStrokeWidth(BOUND_WIDTH_OF_WALL+1);}
        if (paintBlock == null) {// 初始化化背景墙画笔
            paintBlock = new Paint();
            paintBlock.setColor(Color.parseColor("#FF6600")); }
         snakeBlock= new SnakeBlock();}
    
  6. 绘制游戏地图在 onDraw中

    @SuppressLint("DrawAllocation")
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        max_x=getWidth(); //获取游戏界面的最大值
        max_y=getHeight();
        RectF rel;  //矩形类
        num_y=0;
        //绘制游戏网格图
        for (int y=begin;y<max_y-BlockUnit.UNIT_SIZE;y+=BlockUnit.UNIT_SIZE){
            num_x=0;
            for (int x=begin;x<max_x-BlockUnit.UNIT_SIZE;x+=BlockUnit.UNIT_SIZE){
                rel=new RectF(x,y,x+BlockUnit.UNIT_SIZE,y+BlockUnit.UNIT_SIZE);  //矩形的四个坐标
                canvas.drawRoundRect(rel,8,8,paintWall);//绘制圆角矩形,弧度为8
                num_x++;//记录地图的行列数
            }
            num_y++;//记录地图的行列数
        }
    
  7. 绘制蛇的身体,设置蛇的头部与蛇的身体颜色不一样,方便区分。

       //绘制蛇的身体
            int len = blockUnits.size();
            // 绘制方块
            for (int i = 1; i < len; i++) {
                int x = blockUnits.get(i).x;
                int y = blockUnits.get(i).y;
              //  int c=blockUnits.get(i).color
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值