用python写一个2048小游戏
时间: 2023-12-07 22:31:59 浏览: 30
好的,我可以为您提供一些Python代码来实现2048小游戏。您可以使用Pygame模块创建游戏窗口并实现游戏逻辑。
以下是一个简单的示例代码:
```python
import pygame
import random
# 游戏窗口的大小
WIDTH = 400
HEIGHT = 400
# 游戏方格的大小
CELL_SIZE = 100
# 游戏方格的颜色
COLORS = {
2: (238, 228, 218),
4: (237, 224, 200),
8: (242, 177, 121),
16: (245, 149, 99),
32: (246, 124, 95),
64: (246, 94, 59),
128: (237, 207, 114),
256: (237, 204, 97),
512: (237, 200, 80),
1024: (237, 197, 63),
2048: (237, 194, 46),
}
# 游戏方格的字体
FONT = pygame.font.Font(None, 40)
# 初始化游戏方格
grid = [[0 for y in range(4)] for x in range(4)]
# 在游戏方格中随机生成一个新方块
def new_block():
while True:
x = random.randint(0, 3)
y = random.randint(0, 3)
if grid[x][y] == 0:
grid[x][y] = 2 if random.random() < 0.9 else 4
break
# 在游戏窗口中绘制游戏方格
def draw_grid(screen):
for x in range(4):
for y in range(4):
color = COLORS.get(grid[x][y], (255, 255, 255))
pygame.draw.rect(screen, color, (x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE))
if grid[x][y]:
text = FONT.render(str(grid[x][y]), True, (0, 0, 0))
text_rect = text.get_rect(center=(x * CELL_SIZE + CELL_SIZE / 2, y * CELL_SIZE + CELL_SIZE / 2))
screen.blit(text, text_rect)
# 判断游戏是否结束
def is_game_over():
for x in range(4):
for y in range(4):
if grid[x][y] == 0:
return False
if x < 3 and grid[x][y] == grid[x + 1][y]:
return False
if y < 3 and grid[x][y] == grid[x][y + 1]:
return False
return True
# 向上移动游戏方格
def move_up():
global grid
for y in range(4):
for x in range(4):
if grid[x][y] == 0:
continue
for i in range(x):
if grid[i][y] == 0:
grid[i][y] = grid[x][y]
grid[x][y] = 0
break
if grid[i][y] == grid[x][y]:
grid[i][y] *= 2
grid[x][y] = 0
break
# 向下移动游戏方格
def move_down():
global grid
for y in range(4):
for x in range(3, -1, -1):
if grid[x][y] == 0:
continue
for i in range(x + 1, 4):
if grid[i][y] == 0:
grid[i][y] = grid[x][y]
grid[x][y] = 0
break
if grid[i][y] == grid[x][y]:
grid[i][y] *= 2
grid[x][y] = 0
break
# 向左移动游戏方格
def move_left():
global grid
for x in range(4):
for y in range(4):
if grid[x][y] == 0:
continue
for i in range(y):
if grid[x][i] == 0:
grid[x][i] = grid[x][y]
grid[x][y] = 0
break
if grid[x][i] == grid[x][y]:
grid[x][i] *= 2
grid[x][y] = 0
break
# 向右移动游戏方格
def move_right():
global grid
for x in range(4):
for y in range(3, -1, -1):
if grid[x][y] == 0:
continue
for i in range(y + 1, 4):
if grid[x][i] == 0:
grid[x][i] = grid[x][y]
grid[x][y] = 0
break
if grid[x][i] == grid[x][y]:
grid[x][i] *= 2
grid[x][y] = 0
break
# 初始化Pygame
pygame.init()
# 创建游戏窗口
screen = pygame.display.set_mode((WIDTH, HEIGHT))
# 设置窗口标题
pygame.display.set_caption("2048")
# 随机生成两个新方块
new_block()
new_block()
# 游戏循环
while True:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
move_up()
elif event.key == pygame.K_DOWN:
move_down()
elif event.key == pygame.K_LEFT:
move_left()
elif event.key == pygame.K_RIGHT:
move_right()
elif event.key == pygame.K_ESCAPE:
pygame.quit()
exit()
if not is_game_over():
new_block()
# 绘制游戏方格
draw_grid(screen)
# 显示屏幕
pygame.display.flip()
```
这个示例代码可以实现一个简单的2048小游戏,您可以根据自己的需要进行修改和扩展。