python__基础之2048核心算法练习

''' 
    2048游戏核心练习
'''

list_merge = None

#   1.零元素移动至末尾
#       [2,0,2,0]   -->[2,2,0,0]
#       [0,2,2,0]   -->[2,2,0,0]
#       [2,4,0,2]   -->[2,4,2,0]
#

def zero_to_end():
    '''
        零元素移动到末尾
    '''
    #从后向前,如果发现0,删除并追加
    for i in range(-1,-len(list_merge)-1,-1):
        if list_merge[i]==0:
            del list_merge[i]
            list_merge.append(0)

#zero_to_end()
#print(list_merge)


#   相邻相同数字合并
#   [2,2,0,0]   --> [4,0,0,0]
#   [2,0,0,2]   --> [4,0,0,0]
#   [2,0,4,0]   --> [2,4,0,0]
#   [2,2,2,2]   --> [4,4,0,0]
#   [2,2,2,0]   --> [4,2,0,0]

def merge():
    '''
        合并
    '''
    #   将中间的零元素移动到末尾
    #   合并相同元素
    zero_to_end()
    for i in range(len(list_merge)-1):
        if list_merge[i]==list_merge[i+1]:
            #   将后一个累加到前一个上
            #   删除后一个,追加一个0
            list_merge[i]+=list_merge[i+1]
            del list_merge[i+1]
            list_merge.append(0)

#   地图向左移动
#   下面的移动同时进行
#   [2,2,0,0]   --> [4,0,0,0]
#   [2,0,0,2]   --> [4,0,0,0]
#   [2,0,4,0]   --> [2,4,0,0]
#   [2,2,2,2]   --> [4,4,0,0]
#   [2,2,2,0]   --> [4,2,0,0]
map=[
    [2,2,0,0],
    [2,0,0,2],
    [2,0,4,0],
    [2,2,2,2],
    ]
#
#
#转置后矩阵
#
#[2,2,2,2]
#[2,0,0,2]
#[0,0,4,2]
#[0,2,0,2]
#
def move_left():
    for line in map:
        global list_merge
        list_merge=line
        merge()
def move_right():
    for line in map:
        global list_merge
        list_merge=line[::-1]
        merge()
        line[::-1]=list_merge
        #从右向左接收数据
def move_up():
    #上移
    square_matrix_transpose(map)
    move_left()
    square_matrix_transpose(map)

def move_down():
    #下移
    square_matrix_transpose(map)
    move_right()
    square_matrix_transpose(map)


#move_right()
#print(map)

'''
    上移  下移
'''
#   矩阵转置函数
def square_matrix_transpose(sqr_matrix):  
    '''  
        转置函数  
    '''  
    # len(sqr_matrix)  获取矩阵的大小  
    for c in range(len(sqr_matrix)):  # 遍历矩阵的每一列  
        for r in range(c,len(sqr_matrix)):  # 从当前列开始,遍历其下方的所有行  
            # 交换元素,实现转置  
            sqr_matrix[r][c], sqr_matrix[c][r] = sqr_matrix[c][r], sqr_matrix[r][c]  
      
#move_up()
#print(map)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值