2048Python游戏源码

import random
import os

def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')

def print_board(board):
    clear_screen()
    print("2048 Game")
    for row in board:
        print("\t".join(str(cell) if cell != 0 else '.' for cell in row))
        print()

def add_new_tile(board):
    empty_cells = [(i, j) for i in range(4) for j in range(4) if board[i][j] == 0]
    if empty_cells:
        i, j = random.choice(empty_cells)
        board[i][j] = 2 if random.random() < 0.9 else 4

def move_left(board):
    for i in range(4):
        row = [cell for cell in board[i] if cell != 0]
        for j in range(len(row) - 1):
            if row[j] == row[j + 1]:
                row[j] *= 2
                row[j + 1] = 0
        row += [0] * (4 - len(row))
        board[i] = row

def move_right(board):
    for i in range(4):
        row = [cell for cell in board[i] if cell != 0]
        for j in range(len(row) - 1, 0, -1):
            if row[j] == row[j - 1]:
                row[j] *= 2
                row[j - 1] = 0
        row = [0] * (4 - len(row)) + row
        board[i] = row

def move_up(board):
    for j in range(4):
        col = [board[i][j] for i in range(4) if board[i][j] != 0]
        for i in range(len(col) - 1):
            if col[i] == col[i + 1]:
                col[i] *= 2
                col[i + 1] = 0
        col += [0] * (4 - len(col))
        for i in range(4):
            board[i][j] = col[i]

def move_down(board):
    for j in range(4):
        col = [board[i][j] for i in range(4) if board[i][j] != 0]
        for i in range(len(col) - 1, 0, -1):
            if col[i] == col[i - 1]:
                col[i] *= 2
                col[i - 1] = 0
        col = [0] * (4 - len(col)) + col
        for i in range(4):
            board[i][j] = col[i]

def is_game_over(board):
    for i in range(4):
        for j in range(4):
            if board[i][j] == 0:
                return False
            if i < 3 and board[i][j] == board[i + 1][j]:
                return False
            if j < 3 and board[i][j] == board[i][j + 1]:
                return False
    return True

def main():
    board = [[0] * 4 for _ in range(4)]
    add_new_tile(board)
    add_new_tile(board)
    
    while True:
        print_board(board)
        if is_game_over(board):
            print("Game Over!")
            break
        move = input("Enter move (w/a/s/d): ").strip().lower()
        if move == 'w':
            move_up(board)
        elif move == 'a':
            move_left(board)
        elif move == 's':
            move_down(board)
        elif move == 'd':
            move_right(board)
        else:
            print("Invalid move!")
            continue
        add_new_tile(board)

if __name__ == "__main__":
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值