golang游戏2048

作者: qianlnk | 来源:发表于2017-12-31 21:33 被阅读86次

游戏概述

有16个格子,初始时会有两个格子上安放了两个数字2,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方随即出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。

主要实现

  • 在空白位置随机生成数字 2 或者 4, 这里生成4的概率控制的小一点。

    大致思路:获取所有空白点的位子,生成一个数组,随机生成一个范围内的下标,这样就得到新生成的点,然后将生成的数值赋值给这个点即可。

func (g *GameCells) Generate() {
    type point struct {
        row int
        col int
    }

    var emptyCells []point
    for row := 0; row < GSIZE; row++ {
        for col := 0; col < GSIZE; col++ {
            if g[row][col] == 0 {
                emptyCells = append(emptyCells, point{row, col})
            }
        }
    }

    r := rand.New(rand.NewSource(time.Now().UnixNano()))
    index := r.Intn(len(emptyCells))
    val := r.Intn(10)
    if val >= 8 {
        val = 4
    } else {
        val = 2
    }
    g[emptyCells[index].row][emptyCells[index].col] = val
}
  • 游戏中上滑、下滑、左滑、右滑算法

    大致思路:以上滑为例,沿途上相邻(中间空也可)的数值相同的点相撞累加起来,所有列累加后统一上移。具体代码如下

func (g *GameCells) Up() bool {
    var ok bool
    for col := 0; col < GSIZE; col++ {
        for row := 0; row < GSIZE-1; {
            add := false
            if g[row][col] != 0 {
                for r := row + 1; r < GSIZE; r++ {
                    if g[r][col] == 0 {
                        continue
                    }
                    if g[row][col] == g[r][col] {
                        g[row][col] += g[r][col]
                        g[r][col] = 0
                        ok = true
                        row = r + 1
                        add = true
                    }

                    break
                }
            }

            if !add {
                row++
            }
        }
    }

    for col := 0; col < GSIZE; col++ {
        for row := 0; row < GSIZE-1; row++ {
            if g[row][col] == 0 {
                for r := row + 1; r < GSIZE; r++ {
                    if g[r][col] == 0 {
                        continue
                    }
                    g[row][col] = g[r][col]
                    g[r][col] = 0
                    ok = true
                    break
                }
            }
        }
    }

    return ok
}
  • 游戏结束判断
    大致思路:16格中没有空白点,横向、纵向相邻的数值都不相等,则游戏结束。
func (g *GameCells) GameOver() bool {
    for row := 0; row < GSIZE; row++ {
        for col := 0; col < GSIZE-1; col++ {
            if g[row][col] == 0 || g[row][col+1] == 0 {
                return false
            }
            if g[row][col] == g[row][col+1] {
                return false
            }
        }
    }

    for col := 0; col < GSIZE; col++ {
        for row := 0; row < GSIZE-1; row++ {
            if g[row][col] == g[row+1][col] {
                return false
            }
        }
    }

    return true
}

源码

https://github.com/qianlnk/2048

随手点赞,功德无量

效果

play.gif

相关文章

  • golang游戏2048

    游戏概述 有16个格子,初始时会有两个格子上安放了两个数字2,每次可以选择上下左右其中一个方向去滑动,每滑动一次,...

  • 如何用Axure制作2048小游戏

    2048这款游戏肯定很多人都玩过吧,2048属于一款数字游戏。如果要自己设计2048该如何实现呢?我们都知道,Ax...

  • app推荐系列(一)

    第一个 city2048 作为2048等这类游戏的忠实玩家,这款游戏满足了视觉上的享受啊, 玩法和2048是一样的...

  • 超级Game2048

    超级Game2048 2048-经典单机益智游戏 本游戏特色: -3×3、4×4、5×5 -不同主题切换 -Gam...

  • 游戏 2019-12-17

    今天下的是VOODOO新游戏 2048 balls 3D 2048游戏源于1+2=3,之后衍生为1024,2048...

  • Python 《Python 实现 2048 游戏》实验报告

    2048 游戏 wiki:《2048》是一款单人在线和移动端游戏,由19岁的意大利人 Gabriele Cirul...

  • 2048

    no.1 项目:2048小游戏 游戏规则:2048游戏共有16个格子,初始时初始数字由2或者4构成。1、手指向一个...

  • 2048

    记录一下2048这个游戏。

  • 2048小游戏

    2048小游戏 author:滚滚 构思来源:模仿现有的2048小游戏,并希望通过这次大作业学习pygame与py...

  • JS小游戏——flappy 2048

    这款游戏是像素鸟+2048风格的合体版,仿制2048all上面的同名游戏,个人原生JS代码大概写了150行,大家都...

网友评论

  • xyt001:用的什么gui框架😳
    qianlnk:@xyt001命令行下的 没有UI

本文标题:golang游戏2048

本文链接:https://www.haomeiwen.com/subject/kjnagxtx.html