python-2048游戏代码

# -*- coding: UTF-8 -*-
import numpy as np
import random

def down(group):
    
    #相同项相加
    for j in range(0,4):
        for i in range(3,-1,-1):
            if group[i][j] != 0:
                if (i-1 > -1) and (group[i-1][j] != 0):
                    if group[i][j] == group[i-1][j]:
                        group[i][j] *= 2
                        group[i-1][j] = 0
                elif (i-2 > -1) and (group[i-2][j] != 0):
                    if group[i][j] == group[i-2][j]:
                        group[i][j] *= 2
                        group[i-2][j] = 0
                elif (i-3 > -1) and (group[i-3][j] != 0):
                    if group[i][j] == group[i-3][j]:
                        group[i][j] *= 2
                        group[i-3][j] = 0
                           
    #将元素下移
    for j in range(0,4):
        for i in range(3,-1,-1):
            if group[i][j] == 0:
                for m in range(i-1,-1,-1):
                    if group[m][j] != 0:
                        group[i][j] = group[m][j]
                        group[m][j] = 0
                        break

    #返回下移后的矩阵
    return group

def left(group):

    #相同项相加
    for i in range(4):
        for j in range(4):            
            if group[i][j] != 0:
                if (j+1 < 4) and (group[i][j+1] != 0):
                    if group[i][j] == group[i][j+1]:
                        group[i][j] *= 2
                        group[i][j+1] = 0
                elif (j+2 < 4) and (group[i][j+2] != 0):
                    if group[i][j] == group[i][j+2]:
                        group[i][j] *= 2
                        group[i][j+2] = 0
                elif (j+3 < 4) and (group[i][j+3] != 0):
                    if group[i][j] == group[i][j+3]:
                        group[i][j] *= 2
                        group[i][j+3] = 0
                
    #将元素左移
        for i in range(4):
            for j in range(4):
                if group[i][j] == 0:
                    for m in range(j+1,4):
                        if group[i][m] != 0:
                            group[i][j] = group[i][m]
                            group[i][m] = 0                            
                            break

    #返回左移后的矩阵
    return group

def right(group):

    #相同项相加
    for i in range(4):
        for j in range(3,-1,-1):
            if group[i][j] != 0:
                if (j-1 > -1) and (group[i][j-1] != 0):
                    if group[i][j] == group[i][j-1]:
                        group[i][j] *= 2
                        group[i][j-1] = 0
                elif (j-2 > -1) and (group[i][j-2] != 0):
                    if group[i][j] == group[i][j-2]:
                        group[i][j] *= 2
                        group[i][j-2] = 0
                elif (j-3 > -1) and (group[i][j-3] != 0):
                    if group[i][j] == group[i][j-3]:
                        group[i][j] *= 2
                        group[i][j-3] = 0
        
    #将元素右移
    for i in range(3,-1,-1):
        for j in range(3,-1,-1):
            if group[i][j] == 0:
                for m in range(j-1,-1,-1):
                    if group[i][m] != 0:
                        group[i][j] = group[i][m]
                        group[i][m] = 0
                        break

    #返回右移后的矩阵
    return group

def up(group): #上移

    #相同项相加
    for j in range(4):
        for i in range(4):
            if group[i][j] != 0:
                if (i+1 < 4) and (group[i+1][j] != 0):
                    if group[i][j] == group[i+1][j]:
                        group[i][j] *= 2
                        group[i+1][j] = 0
                elif (i+2 < 4) and (group[i+2][j] != 0):
                    if group[i][j] == group[i+2][j]:
                        group[i][j] *= 2
                        group[i+2][j] = 0
                elif (i+3 < 4) and (group[i+3][j] != 0):
                    if group[i][j] == group[i+3][j]:
                        group[i][j] *= 2
                        group[i+3][j] = 0

    #将元素上移
    for j in range(4):
        for i in range(4):
            if group[i][j] == 0:
                for m in range(i,4):
                    if group[m][j] != 0:
                        group[i][j] = group[m][j]
                        group[m][j] = 0
                        break

    #返回上移后的矩阵
    return group

def supplement(group): #补入随机数
    
    k = 0
    for i in range(4):
        for j in range(4):
            if group[i][j] == 0:
                m = random.randrange(0,5,2)
                group[i][j] = m
                if m != 0:
                    k += 1
                if k >= 1:
                    break
        if k >= 1:
                    break
    return group


#随机输入一个矩阵
group = np.zeros((4,4))
k = 0
for i in range(4):
    for j in range(4):
        m = random.randrange(2,5,2)
        group[i][j] = m
        if m != 0:
            k += 1
        if k >= 2:
            break
    if k >= 2:
            break
print(group)
        
#输入滑动方向
ori = input("输入一个方向:")
if ori == '1': #up
    group = up(group)
elif ori == '2': #down
    group = down(group)
elif ori == '3': #left
    group = left(group)
elif ori == '4': #right
    group =right(group)    
    
while(1):
    #输出result,判断游戏是否结束
    #判断矩阵中是否含有0,若含有0或者相同项,a = 1
    a = int(0)
    for i in range(4):
        for j in range(4):
            if group[i][j] == 0:
                a = 1
                break
        if a == 1:
            break
    
    #判断矩阵中的相邻项是否相同
    if a == 0:
        for i in range(4):
            for j in range(4):
                if (j+1 < 4) and (group[i][j+1] != 0):
                    if group[i][j] == group[i][j+1]:
                        a = 1
                        break
                elif (j+2 < 4) and (group[i][j+2] != 0):
                    if group[i][j] == group[i][j+2]:
                        a = 1
                        break
                elif (j+3 < 4) and (group[i][j+3] != 0):
                    if group[i][j] == group[i][j+3]:
                        a = 1
                        break
            if a == 1:
                break
    if a == 0:
        for j in range(4):
            for i in range(4):
                if (i+1 < 4) and (group[i+1][j] != 0):
                    if group[i][j] == group[i+1][j]:
                        a = 1
                        break
                elif (i+2 < 4) and (group[i+2][j] != 0):
                    if group[i][j] == group[i+2][j]:
                        a = 1
                        break
                elif (i+3 < 4) and (group[i+3][j] != 0):
                    if group[i][j] == group[i+3][j]:
                        a = 1
                        break
            if a == 1:
                break
            

    #如果矩阵没有空格和相同项,或者包含2048,返回over,否则返回pass    
    if a == 0:
        print('game over')
        break
    else:
        for i in range(4):
            for j in range(4):
                if group[i][j] == 2048:
                    print('you win')
                    break
            else:
                pass

    #若游戏没有结束,在空白方格随意输出0,2,4
    print(supplement(group))
    
            
    #输入滑动方向,输出滑动结果
    ori = input("输入一个方向:")
    if(ori == '1'):
        group = up(group)
    if(ori == '2'):
        group = down(group)
    if(ori == '3'):
        group = left(group)
    if(ori == '4'):
        group =right(group)
发布了78 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/hepiaopiao_wemedia/article/details/100129690
今日推荐