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