Python game -------2048 (1)后台实现

学习了Python有一段时间了,之前写过爬虫来练(打)练(发)手(时)感(间),这次把目标转向2048
这款游戏是我在高中时曾经沉迷过的游戏,这个游戏是真的有毒 ,操作方式就时简单的上下左右滑动手机屏幕,以控制4 * 4方格中的数字移动,已组成2048这个数字。
如何用Python来实现这个游戏呢?
游戏的主界面,一个4*4的格局,这个可以用Python的list来实现,用列表来做一个4*4的数组。
接下来就是实现上下左右滑动的效果了,这里上下和左右分别做一个就可以了,剩下分别镜像就可以了。
以向上滑动为例:

def slide_up(array):
    flag = False
    for j in range(4):
        flag = False
        for i in range(4):
            if array[i][j] == 0:
                for down in range(i, 4):
                    if down+1 < 4:
                        array[down][j] = array[down+1][j]
                    if down == 3:
                        array[down][j] = 0

            if i-1>=0 and array[i-1][j] == 0:
                for down in range(i, 4):
                    array[down-1][j] = array[down][j]


            if flag == True and i+1<4:
                array[i][j] = array[i+1][j]
            if i == 3 and flag == True:
                array[i][j] = 0
            if i+1 < 4 and array[i][j] == array[i+1][j] and flag == False:
                array[i][j] *= 2
                flag = True 
    return array

然后向下滑动就镜像向上滑动的就可以了:

def up2down(array):
    new_array = [[array[3-i][j] for j in range(4)] for i in range(4)]
    #print_array(new_array)
    return new_array 
def slide_down(array):
    array = up2down(array)
    flag = False
    for j in range(4):
        flag = False
        for i in range(4):
            """
            if flag == True and i+1<4:
                array[i][j] = array[i+1][j]
            if i == 3 and flag == True:
                array[i][j] = 0
            if i+1 < 4 and array[i][j] == array[i+1][j] and flag == False:
                array[i][j] *= 2
                flag = True

            """
            if array[i][j] == 0:
                for down in range(i,4):
                    if down+1 < 4:
                        array[down][j] = array[down+1][j]
                    if down == 3:
                        array[down][j] = 0

            if i-1>=0 and array[i-1][j] == 0:
                for down in range(i,4):
                    array[down-1][j] = array[down][j]


            if flag == True and i+1<4:
                array[i][j] = array[i+1][j]
            if i == 3 and flag == True:
                array[i][j] = 0
            if i+1 < 4 and array[i][j] == array[i+1][j] and flag == False:
                array[i][j] *= 2
                flag = True 
    array = up2down(array)
    return array  

向左向右和上面一样(就是我懒得写了)
还有判断是否GAMEOVER:
这个其实很简单,满足两个条件就一定GAMEOVER了
1、4*4中没有空格了
2、相邻的方格中没有相同的

def fail(array):
    zero = False
    same = False
    for row in range(4):
        for column in range(4):
            if array[row][column] == 0:
                zero = True
            if column + 1 < 4:
                if array[row][column] == array[row][column+1]:
                    same = True
            if row + 1 < 4:
                if array[row][column] == array[row+1][column]:
                    same = True

    if same or zero:
            return False    #游戏没有概述
    else:
        return True    #游戏概述

由于没有写界面,所以暂时就是用数字来模拟整个游戏,0代表空,有数字代表方块。
写了一个run函数来测试各个方案

def run(array):
    array_pre = list()
    while(1):
        print_array(array)
        print('\n')
        choice = input()
        if choice == 'w':
            array = slide_up(array)
            print("slide up:")
        elif choice == 's':
            array = slide_down(array)
            print("slide down:")
        elif choice == 'a':
            array = slide_left(array)
            print("slide left:")
        elif choice == 'd':
            array = slide_right(array)
            print("slide right")
        else:
            print("end")
            break
        index = random.randint(1, 2)
        count = 0
        if len(array_pre) == 0 or equal(array_pre, array):
            for i in range(0, index):
                row = random.randint(0, 3)
                colum = random.randint(0, 3)
                if (array[row][colum] == 0):
                    array[row][colum] = random.randint(1, 2) * 2
                else:
                    i -= 1
                    count += 1
                if count == 5:
                    break
        array_pre = copy(array)
    return array

猜你喜欢

转载自blog.csdn.net/Big_Head_/article/details/81428814