python实现消消乐小游戏

import random
import time

# 游戏面板大小
BOARD_SIZE = 10

# 图案种类数
PATTERN_COUNT = 4

# 相邻图案个数
ADJACENT_COUNT = 3

# 游戏时间限制(秒)
GAME_TIME = 60

# 得分表
SCORE_TABLE = {3: 10, 4: 20, 5: 30, 6: 50}

# 结束语
GAME_OVER_MESSAGE = "Game Over!"

def generate_board():
    """
    生成游戏面板
    """
    board = []
    for i in range(BOARD_SIZE):
        row = []
        for j in range(BOARD_SIZE):
            row.append(random.randint(1, PATTERN_COUNT))
        board.append(row)
    return board

def print_board(board):
    """
    打印游戏面板
    """
    for i in range(BOARD_SIZE):
        for j in range(BOARD_SIZE):
            print(board[i][j], end=" ")
        print()
    print()

def get_score(count):
    """
    根据相邻图案个数计算得分
    """
    if count in SCORE_TABLE:
        return SCORE_TABLE[count]
    else:
        return 0

def find_matches(board):
    """
    查找可消除的图案
    """
    matches = []
    for i in range(BOARD_SIZE):
        for j in range(BOARD_SIZE):
            pattern = board[i][j]
            if pattern == 0:
                continue
            # 向右
            if j <= BOARD_SIZE - ADJACENT_COUNT and board[i][j + 1:j + ADJACENT_COUNT] == [pattern] * (ADJACENT_COUNT - 1):
                matches.append((i, j, i, j + ADJACENT_COUNT - 1))
            # 向下
            if i <= BOARD_SIZE - ADJACENT_COUNT and [board[k][j] for k in range(i + 1, i + ADJACENT_COUNT)] == [pattern] * (ADJACENT_COUNT - 1):
                matches.append((i, j, i + ADJACENT_COUNT - 1, j))
    return matches

def remove_matches(board, matches):
    """
    消除匹配的图案
    """
    for match in matches:
        i1, j1, i2, j2 = match
        for i in range(i1, i2 + 1):
            for j in range(j1, j2 + 1):
                board[i][j] = 0

def drop_board(board):
    """
    下落图案
    """
    for j in range(BOARD_SIZE):
        bottom = BOARD_SIZE - 1
        for i in range(BOARD_SIZE - 1, -1, -1):
            if board[i][j] == 0:
                continue
            if i != bottom:
                board[bottom][j] = board[i][j]
                board[i][j] = 0
            bottom -= 1

def play_game():
    """
    游戏主函数
    """
    board = generate_board()
    start_time = time.time()
    while True:
        print_board(board)
        matches = find_matches(board)
        if not matches:
            break
        for match in matches:
            score = get_score(match[3] - match[1] + 1)
            remove_matches(board, matches)
            drop_board(board)
            for i in range(BOARD_SIZE):
                for j in range(BOARD_SIZE):
                    print(board[i][j], end=" ")
                print()
            print(f"Score: {score}")
        elapsed_time = time.time() - start_time
        if elapsed_time > GAME_TIME:
            print(GAME_OVER_MESSAGE)
            break
        time_left = int(GAME_TIME - elapsed_time)
        print(f"Time Left: {time_left} seconds")
        time.sleep(10)


if __name__ == "__main__":
    play_game()
    print(GAME_OVER_MESSAGE)

实现了一个基本的消消乐游戏。在这个游戏中,玩家需要消除相邻的三个或更多相同图案,以获得得分。游戏会在一定时间内进行,当时间到达限制时,游戏结束。 游戏的实现过程中,我们生成了一个随机的游戏面板,并实现了找到可消除图案、消除图案、下落图案、计分和计时等功能。最后在主函数中循环进行游戏,直到时间到达限制或无法继续消除图案时结束游戏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值