def __init__(self, size=5):
self.board = [[0] * size for _ in range(size)]
empty_cells = [(r, c) for r in range(self.size) for c in range(self.size) if self.board[r][c] == 0]
row, col = random.choice(empty_cells)
self.board[row][col] = random.choice([2, 4])
def compress(self, row):
new_row = [i for i in row if i != 0]
new_row += [0] * (self.size - len(new_row))
for i in range(self.size - 1):
if row[i] == row[i + 1] and row[i] != 0:
return self.compress(row)
self.board = [list(row) for row in zip(*self.board)]
for i in range(self.size):
self.board[i] = self.compress(self.board[i])
self.board[i] = self.merge(self.board[i])
for i in range(self.size):
self.board[i] = self.reverse(self.board[i])
self.board[i] = self.compress(self.board[i])
self.board[i] = self.merge(self.board[i])
self.board[i] = self.reverse(self.board[i])
for i in range(self.size):
self.board[i] = self.compress(self.board[i])
self.board[i] = self.merge(self.board[i])
for i in range(self.size):
self.board[i] = self.reverse(self.board[i])
self.board[i] = self.compress(self.board[i])
self.board[i] = self.merge(self.board[i])
self.board[i] = self.reverse(self.board[i])
for i in range(self.size):
for j in range(self.size):
if self.board[i][j] == 0:
if i + 1 < self.size and self.board[i][j] == self.board[i + 1][j]:
if j + 1 < self.size and self.board[i][j] == self.board[i][j + 1]:
def get_empty_cell_count(self):
return sum(row.count(0) for row in self.board)
def draw_board(game, screen, font):
for row in range(game.size):
for col in range(game.size):
value = game.board[row][col]
color = pygame.Color(120, 110, 102) # 空方块的颜色
color = pygame.Color(238, 228, 218)
color = pygame.Color(237, 224, 200)
color = pygame.Color(242, 177, 121)
color = pygame.Color(245, 149, 99)
color = pygame.Color(246, 124, 95)
color = pygame.Color(246, 94, 59)
color = pygame.Color(237, 207, 114) # 更大的数字用更鲜艳的颜色
pygame.draw.rect(screen, color, (col * 100 + 10, row * 100 + 10, 90, 90))
text_color = pygame.Color(255, 255, 255) if value > 4 else pygame.Color(0, 0, 0)
text_surface = font.render(f'{value}', True, text_color)
text_rect = text_surface.get_rect(center=(col * 100 + 55, row * 100 + 55))
screen.blit(text_surface, text_rect)