IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Go 语言实现 2048 游戏「中篇」

    Teacher Du发表于 2024-11-01 03:51:26
    love 0

    矩阵旋转操作是为了将其它三个方向的移动都转换为向上的移动操作。向下、向左、向右转换为向上操作时,数组需要进行翻转操作参考正文代码。

    执行代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    package main

    import "fmt"

    type g2048 [4][4]int

    func (t *g2048) MirrorV() {
    tn := new(g2048)
    for i, line := range t {
    for j, num := range line {
    tn[len(t)-i-1][j] = num
    }
    }
    *t = *tn
    }

    func (t *g2048) Right90() {
    tn := new(g2048)
    for i, line := range t {
    for j, num := range line {
    tn[j][len(t)-i-1] = num
    }
    }
    *t = *tn
    }

    func (t *g2048) Left90() {
    tn := new(g2048)
    for i, line := range t {
    for j, num := range line {
    tn[len(line)-j-1][i] = num
    }
    }
    *t = *tn
    }

    func (g *g2048) R90() {
    tn := new(g2048)
    for x, line := range g {
    for y, _ := range line {
    tn[x][y] = g[len(line)-1-y][x]
    }
    }
    *g = *tn

    }

    func (t *g2048) Right180() {
    tn := new(g2048)
    for i, line := range t {
    for j, num := range line {
    tn[len(line)-i-1][len(line)-j-1] = num
    }
    }
    *t = *tn
    }

    func (t *g2048) Print() {
    for _, line := range t {
    for _, number := range line {
    fmt.Printf("%2d ", number)
    }
    fmt.Println()
    }
    fmt.Println()
    tn := g2048{{1, 2, 3, 4}, {5, 8}, {9, 10, 11}, {13, 14, 16}}
    *t = tn

    }

    func main() {
    fmt.Println("origin")
    t := g2048{{1, 2, 3, 4}, {5, 8}, {9, 10, 11}, {13, 14, 16}}
    t.Print()
    fmt.Println("mirror")
    t.MirrorV()
    t.Print()
    fmt.Println("Left90")
    t.Left90()
    t.Print()
    fmt.Println("Right90")
    t.R90()
    t.Print()
    fmt.Println("Right180")
    t.Right180()
    t.Print()
    }

    注意:创建源文件 martix_rorate.go,输入以上代码。

    执行结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    origin
    1 2 3 4
    5 8 0 0
    9 10 11 0
    13 14 16 0

    mirror
    13 14 16 0
    9 10 11 0
    5 8 0 0
    1 2 3 4

    Left90
    4 0 0 0
    3 0 11 16
    2 8 10 14
    1 5 9 13

    Right90
    13 9 5 1
    14 10 8 2
    16 11 0 3
    0 0 0 4

    Right180
    0 16 14 13
    0 11 10 9
    0 0 8 5
    4 3 2 1

    注意:执行 go run martix_rorate.go 后,输出如上。



沪ICP备19023445号-2号
友情链接