帮我找一篇用pycharm编写的2048小游戏
时间: 2023-12-07 18:05:03 浏览: 108
好的,以下是一个使用Pycharm编写的2048小游戏示例代码。注意,代码中使用了Pygame库来实现图形界面和游戏逻辑。
```python
import pygame
import random
pygame.init()
# 游戏界面的宽度和高度
screen_width = 480
screen_height = 640
# 方格的大小和间距
block_size = 110
block_space = 10
# 方格的颜色
block_color = {
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_size = 50
font_color = (119, 110, 101)
# 游戏界面的背景颜色
background_color = (187, 173, 160)
# 游戏结束时的提示信息
game_over_text = 'GAME OVER!'
# 初始化游戏界面
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('2048')
# 加载字体
font = pygame.font.Font(None, font_size)
# 生成一个新的方格
def generate_block(blocks):
while True:
x = random.randint(0, 3)
y = random.randint(0, 3)
if blocks[x][y] == 0:
blocks[x][y] = 2 if random.random() < 0.9 else 4
break
# 绘制游戏界面
def draw(blocks):
# 绘制背景
screen.fill(background_color)
# 绘制方格
for i in range(4):
for j in range(4):
if blocks[i][j] != 0:
pygame.draw.rect(screen, block_color[blocks[i][j]], (block_space + j * (block_size + block_space), block_space + i * (block_size + block_space), block_size, block_size))
text = font.render(str(blocks[i][j]), True, font_color)
text_rect = text.get_rect(center=(block_space + j * (block_size + block_space) + block_size / 2, block_space + i * (block_size + block_space) + block_size / 2))
screen.blit(text, text_rect)
# 更新显示
pygame.display.update()
# 检查游戏是否结束
def check_game_over(blocks):
for i in range(4):
for j in range(4):
if blocks[i][j] == 0:
return False
if i > 0 and blocks[i][j] == blocks[i - 1][j]:
return False
if i < 3 and blocks[i][j] == blocks[i + 1][j]:
return False
if j > 0 and blocks[i][j] == blocks[i][j - 1]:
return False
if j < 3 and blocks[i][j] == blocks[i][j + 1]:
return False
return True
# 处理按键事件
def handle_key(blocks, key):
if key == pygame.K_LEFT:
for i in range(4):
for j in range(1, 4):
if blocks[i][j] != 0:
k = j - 1
while k >= 0 and blocks[i][k] == 0:
k -= 1
if k >= 0 and blocks[i][k] == blocks[i][j]:
blocks[i][k] *= 2
blocks[i][j] = 0
elif k < j - 1:
blocks[i][k + 1] = blocks[i][j]
blocks[i][j] = 0
elif key == pygame.K_RIGHT:
for i in range(4):
for j in range(2, -1, -1):
if blocks[i][j] != 0:
k = j + 1
while k <= 3 and blocks[i][k] == 0:
k += 1
if k <= 3 and blocks[i][k] == blocks[i][j]:
blocks[i][k] *= 2
blocks[i][j] = 0
elif k > j + 1:
blocks[i][k - 1] = blocks[i][j]
blocks[i][j] = 0
elif key == pygame.K_UP:
for j in range(4):
for i in range(1, 4):
if blocks[i][j] != 0:
k = i - 1
while k >= 0 and blocks[k][j] == 0:
k -= 1
if k >= 0 and blocks[k][j] == blocks[i][j]:
blocks[k][j] *= 2
blocks[i][j] = 0
elif k < i - 1:
blocks[k + 1][j] = blocks[i][j]
blocks[i][j] = 0
elif key == pygame.K_DOWN:
for j in range(4):
for i in range(2, -1, -1):
if blocks[i][j] != 0:
k = i + 1
while k <= 3 and blocks[k][j] == 0:
k += 1
if k <= 3 and blocks[k][j] == blocks[i][j]:
blocks[k][j] *= 2
blocks[i][j] = 0
elif k > i + 1:
blocks[k - 1][j] = blocks[i][j]
blocks[i][j] = 0
# 初始化方格
blocks = [[0 for j in range(4)] for i in range(4)]
generate_block(blocks)
generate_block(blocks)
# 游戏循环
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_ESCAPE:
pygame.quit()
exit()
handle_key(blocks, event.key)
# 生成新的方格
generate_block(blocks)
# 绘制游戏界面
draw(blocks)
# 检查游戏是否结束
if check_game_over(blocks):
text = font.render(game_over_text, True, font_color)
text_rect = text.get_rect(center=(screen_width / 2, screen_height / 2))
screen.blit(text, text_rect)
pygame.display.update()
pygame.time.wait(3000)
pygame.quit()
exit()
```
希望对你有所帮助!
阅读全文