Android 300行代码实现经典小游戏贪吃蛇

前言

贪吃蛇算是一个非常经典的小游戏了,本人00后,初次游玩是在小时候用诺基亚手机进行游玩的。这次算是复刻一下经典hhh,贪吃蛇算是一个制作起来非常简单的小游戏,本文使用Kotlin语言进行开发,用Java的小伙伴可以自己对照代码转化一下,不过2021年了写Android还是有必要学学Kotlin的。后面我也会出一些Kotlin知识点文章。

制作思路

地图

地图的创建可以使用一个二维数组,或者一维数组,这里使用二维数组,到时候操作就通过xy进行操作。

蛇头蛇身和食物

蛇头可以通过一个Point类进行标识,食物同理。蛇身呢就可以用一个List,里面存放Point,蛇头也需要存放进去。

地图元素标识

地图使用了二维数组,那么里面存放的值就必须要有一定的含义,所以可以创建两个类,一个用来设置标识,一个类用来声明标识,一当然也可以直接写在一起,这里我会抽离出来两个类。

移动

移动就是上下左右,可以通过滑动进行移动,也可以通过按钮点击进行移动,这里我使用按钮点击进行移动,滑动移动我后续也会补充。移动的话有个规则,就是当蛇在一个方向移动时,它不能直接转向到它的反方向,比如正在向右移动,改变移动方向时不能直接就向左移动。

游戏结束

结束条件很简单,就是吃到自己身体就结束,有些版本还有碰到边界就结束,我这版本是碰到边界不结束,而是继续移动。

效果预览

Screenrecorder-2021-09-06-18-57-54-6.gif

开始制作

创建标识

Type类

object Type {
   
    const val GRID = 0
    const val FOOD = 1
    const val HEAD = 2
    const val BODY = 3
}

有了标识其实还不够,还需要一个类用来设置标识,根据标识的不同返回不同的颜色才行

class GameStyle(var type: Int) {
   
    fun getColor() = when (type) {
   
        Type.BODY -> Color.BLUE
        Type.HEAD -> Color.RED
        Type.GRID -> Color.GRAY
        Type.FOOD -> Color.YELLOW
        else -> Color.GRAY
    }
}

代码都很简单,就不细说了

方向也需要标识

object Direction {
   
    const val LEFT = 0
    const val RIGHT = 1
    const val UP = 2
    const val DOWN = 3
}

创建完这三个类就可以开始写游戏类了

创建GameView

class GameView : View, Runnable {
   

    override fun onDraw(canvas: Canvas) {
   }
    
    override fun run() {
   }
    
    constructor(context: Context?) : this(context, null)
    constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, 0)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int): super(context,attrs,defStyleAttr)
}

创建完即成View,同时实现Runnable接口,因为贪吃蛇需要不停的移动,我们可以开一个线程在子线程中进行。

现在创建一些后续需要的变量,这块代码都很简单同时都写了注释可以根据注释进行理解

一些变量

private val gameSize = 14 // 地图的长宽
private var screenHeight = 0 // 屏幕的整体高度
private var screenWidth = 0 // 屏幕的整体宽度

private val map = arrayListOf<ArrayList<GameStyle>>() // 整个地图的元素
private val snakeLocation = arrayListOf<Point>() // 蛇的位置
private val snakeHead = Point(gameSize / 2, gameSize / 2<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值