加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

一个python的2048简单实现

发布时间:2020-12-17 17:20:27 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 # -*- coding: utf8 -*-import randomdata = [[0,0],[0,0]]_MAX_X = 4_MAX_Y = 4_RECT_SIZE = _MAX_X * _MAX_Yclass GameOverException(Exception): p

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

# -*- coding: utf8 -*-
import random

data = [[0,0],[0,0]]

_MAX_X = 4
_MAX_Y = 4
_RECT_SIZE = _MAX_X * _MAX_Y


class GameOverException(Exception):
    pass


def zero_list(size):
    return [0] * size


def initialize():
    for index in range(_MAX_Y):
        data[index] = zero_list(_MAX_X)

    new_pos()


def is_empty(x,y):
    try:
        return data[y][x] == 0
    except IndexError as e:
        return False


def to_xy(no):
    return no % _MAX_Y,no // _MAX_X


def get_random_pos():
    no = random.randint(0,_RECT_SIZE - 1)
    for index in range(no,_RECT_SIZE):
        x,y = to_xy(index)
        if is_empty(x,y):
            return x,y

    raise GameOverException


def print_map():
    for row in data:
        print(row)


def get_by_xy(x,y):
    return data[y][x]


def get_row(index):
    return data[index]


def get_col(index):
    return [row[index] for row in data]


def replace_col(index,col):
    assert type(col) == list
    assert len(col) == _MAX_Y

    for y in range(_MAX_Y):
        data[y][index] = col[y]


def replace_row(index,row):
    assert type(row) == list
    assert len(row) == _MAX_X

    for x in range(_MAX_X):
        data[index][x] = row[x]


def merge_data(src,*,reverse=False):
    pre_len = len(src)
    source = [item for item in src if item != 0]
    if reverse:
        source.reverse()

    for start in range(1,len(source) // 2 + 1):
        for index in range(start,len(source) - start + 1):
            moon = source[index - 1]
            star = source[index]
            if moon == star:
                moon += star
                star = 0
            elif moon == 0:
                moon = star
                star = 0

            source[index - 1] = moon
            source[index] = star

    source.extend(zero_list(pre_len - len(source)))
    if reverse:
        source.reverse()

    return source

def new_pos():
    x,y = get_random_pos()
    data[y][x] = 2


def show():
    print_map()


def vertical(*,reverse=False):
    changed = False

    for index in range(_MAX_X):
        source = get_col(index)
        summary = merge_data(source,reverse=reverse)
        changed |= (summary != source)
        replace_col(index,summary)

    return changed

def horizontal(*,reverse=False):
    changed = False

    for index in range(_MAX_Y):
        source = get_row(index)
        summary = merge_data(source,reverse=reverse)
        changed |= (summary != source)
        replace_row(index,summary)

    return changed


def up():
    if vertical():
        new_pos()


def down():
    if vertical(reverse=True):
        new_pos()


def left():
    if horizontal():
        new_pos()


def right():
    if horizontal(reverse=True):
        new_pos()


if __name__ == '__main__':
    pass

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读