前言
贪吃蛇算是一个非常经典的小游戏了,本人00后,初次游玩是在小时候用诺基亚手机进行游玩的。这次算是复刻一下经典hhh,贪吃蛇算是一个制作起来非常简单的小游戏,本文使用Kotlin语言进行开发,用Java的小伙伴可以自己对照代码转化一下,不过2021年了写Android还是有必要学学Kotlin的。后面我也会出一些Kotlin知识点文章。
制作思路
地图
地图的创建可以使用一个二维数组,或者一维数组,这里使用二维数组,到时候操作就通过xy进行操作。
蛇头蛇身和食物
蛇头可以通过一个Point类进行标识,食物同理。蛇身呢就可以用一个List,里面存放Point,蛇头也需要存放进去。
地图元素标识
地图使用了二维数组,那么里面存放的值就必须要有一定的含义,所以可以创建两个类,一个用来设置标识,一个类用来声明标识,一当然也可以直接写在一起,这里我会抽离出来两个类。
移动
移动就是上下左右,可以通过滑动进行移动,也可以通过按钮点击进行移动,这里我使用按钮点击进行移动,滑动移动我后续也会补充。移动的话有个规则,就是当蛇在一个方向移动时,它不能直接转向到它的反方向,比如正在向右移动,改变移动方向时不能直接就向左移动。
游戏结束
结束条件很简单,就是吃到自己身体就结束,有些版本还有碰到边界就结束,我这版本是碰到边界不结束,而是继续移动。
效果预览
开始制作
创建标识
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<