用Python实现2048游戏:核心逻辑与算法详解

举报
yd_249837533 发表于 2026/10/22 23:20:28 2026/10/22
【摘要】 本文用Python从零实现2048游戏,详解滑动合并算法、方向转换、随机生成与结束判定,附完整代码思路。

2048是一款经典的数字益智游戏,玩法简单却蕴含巧妙的算法思想。本文将带你用Python从零实现2048的核心逻辑,理解滑动、合并、随机生成等关键算法。


## 一、游戏规则


2048在一个4×4的棋盘上进行。玩家通过上下左右滑动,将相同数字的方块合并,每次滑动后会在随机空格处生成一个新的数字(2或4)。当棋盘无法再移动时游戏结束,目标是合成2048。


## 二、数据结构


棋盘用一个4×4的二维列表表示,0代表空格:


board = [[0]*4 for _ in range(4)]


## 三、核心算法:滑动与合并


四个方向的移动都可以归约为“向左移动”,只需通过旋转矩阵实现方向转换。向左移动的核心逻辑分为三步:


1. 压缩:去掉每行中的0,把非零数字移到左侧;

2. 合并:相邻且相同的数字合并为双倍,得分累加;

3. 再压缩:合并后再次去掉中间的0。


def move_left(row):

    new_row = [x for x in row if x != 0]

    score = 0

    i = 0

    while i < len(new_row) - 1:

        if new_row[i] == new_row[i+1]:

            new_row[i] *= 2

            score += new_row[i]

            new_row.pop(i+1)

        i += 1

    new_row += [0] * (4 - len(new_row))

    return new_row, score


注意:合并后的方块在本轮内不能再次合并,例如[2,2,4,4]左移后应为[4,8,0,0],而不是[8,4,0,0]。上面的实现通过索引递进避免了重复合并。


## 四、方向转换


右移 = 左右翻转后左移再翻转;上移 = 转置后左移再转置;下移 = 转置后右移再转置。矩阵转置和翻转都可以用列表推导式轻松实现。


## 五、随机生成新方块


每次有效滑动后,从所有空格中随机选一个位置,90%概率生成2,10%概率生成4。


import random

def add_random_tile(board):

    empty = [(r,c) for r in range(4) for c in range(4) if board[r][c]==0]

    if empty:

        r,c = random.choice(empty)

        board[r][c] = 4 if random.random() < 0.1 else 2


## 六、游戏结束判定


当棋盘填满且任意相邻格子都不相等时,游戏结束。判断时只需检查:是否存在空格,或者存在横向/纵向相邻相等的格子。


## 七、总结


2048的核心算法可以归纳为:压缩、合并、再压缩三步走,配合矩阵变换统一四个方向。掌握这套思路,你可以轻松实现网页版、终端版甚至带AI自动求解的2048。动手试试吧!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。