python程序设计小游戏2048
时间: 2023-06-23 07:56:26 浏览: 56
好的,我可以为您介绍如何用 Python 编写 2048 小游戏。2048 是一款基于滑动方块的数字游戏,玩家需要通过滑动4x4的方格,使得相同数字的方块相加,最终得到2048方块。
首先,需要安装 pygame 模块,可以使用以下命令进行安装:
```python
pip install pygame
```
然后,创建一个名为 `game.py` 的 Python 文件,并在其中编写以下代码:
```python
import pygame
import random
# 设置游戏界面大小
WIDTH = 400
HEIGHT = 400
# 定义颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GRAY = (128, 128, 128)
RED = (255, 0, 0)
# 初始化 Pygame
pygame.init()
# 创建游戏界面
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("2048 Game")
# 设置字体
font = pygame.font.SysFont("Arial", 32, bold=True)
# 定义游戏数据
board = [[0] * 4 for _ in range(4)]
score = 0
# 随机生成一个新方块
def new_block():
x = random.randint(0, 3)
y = random.randint(0, 3)
while board[x][y] != 0:
x = random.randint(0, 3)
y = random.randint(0, 3)
board[x][y] = 2 if random.random() < 0.9 else 4
# 绘制游戏界面
def draw_board():
screen.fill(WHITE)
for i in range(4):
for j in range(4):
pygame.draw.rect(screen, BLACK, (10 + j * 90, 10 + i * 90, 80, 80), 0)
if board[i][j] != 0:
text = font.render(str(board[i][j]), True, BLACK)
screen.blit(text, (45 + j * 90 - text.get_width() // 2, 45 + i * 90 - text.get_height() // 2))
pygame.display.update()
# 判断游戏是否结束
def is_gameover():
for i in range(4):
for j in range(4):
if board[i][j] == 0:
return False
if j < 3 and board[i][j] == board[i][j+1]:
return False
if i < 3 and board[i][j] == board[i+1][j]:
return False
return True
# 处理游戏事件
def handle_events():
global score
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:
for j in range(4):
for i in range(1, 4):
if board[i][j] != 0:
k = i
while k > 0 and board[k-1][j] == 0:
k -= 1
if k > 0 and board[k-1][j] == board[i][j]:
board[k-1][j] *= 2
score += board[k-1][j]
board[i][j] = 0
elif k != i:
board[k][j] = board[i][j]
board[i][j] = 0
new_block()
elif event.key == pygame.K_DOWN:
for j in range(4):
for i in range(2, -1, -1):
if board[i][j] != 0:
k = i
while k < 3 and board[k+1][j] == 0:
k += 1
if k < 3 and board[k+1][j] == board[i][j]:
board[k+1][j] *= 2
score += board[k+1][j]
board[i][j] = 0
elif k != i:
board[k][j] = board[i][j]
board[i][j] = 0
new_block()
elif event.key == pygame.K_LEFT:
for i in range(4):
for j in range(1, 4):
if board[i][j] != 0:
k = j
while k > 0 and board[i][k-1] == 0:
k -= 1
if k > 0 and board[i][k-1] == board[i][j]:
board[i][k-1] *= 2
score += board[i][k-1]
board[i][j] = 0
elif k != j:
board[i][k] = board[i][j]
board[i][j] = 0
new_block()
elif event.key == pygame.K_RIGHT:
for i in range(4):
for j in range(2, -1, -1):
if board[i][j] != 0:
k = j
while k < 3 and board[i][k+1] == 0:
k += 1
if k < 3 and board[i][k+1] == board[i][j]:
board[i][k+1] *= 2
score += board[i][k+1]
board[i][j] = 0
elif k != j:
board[i][k] = board[i][j]
board[i][j] = 0
new_block()
# 显示游戏结束界面
def show_gameover():
gameover_text = font.render("Game Over", True, RED)
gameover_rect = gameover_text.get_rect()
gameover_rect.center = (WIDTH // 2, HEIGHT // 2)
screen.blit(gameover_text, gameover_rect)
pygame.display.update()
# 主循环
def main():
global score
# 初始化游戏数据
new_block()
new_block()
draw_board()
# 游戏循环
while True:
handle_events()
draw_board()
if is_gameover():
show_gameover()
break
# 显示最终得分
score_text = font.render("Score: " + str(score), True, BLACK)
score_rect = score_text.get_rect()
score_rect.center = (WIDTH // 2, HEIGHT // 2 + 40)
screen.blit(score_text, score_rect)
pygame.display.update()
# 等待退出
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# 启动游戏
if __name__ == "__main__":
main()
```
这个程序采用了 Pygame 模块来实现游戏界面的绘制和事件处理。其中,`board` 列表存储了游戏数据,`score` 变量存储了当前得分。`new_block` 函数用于在空闲的方格中随机生成新的方块。`draw_board` 函数用于绘制游戏界面,`is_gameover` 函数用于判断游戏是否结束,`handle_events` 函数用于处理游戏事件,`show_gameover` 函数用于显示游戏结束界面,`main` 函数是游戏的主循环。
您可以运行这个程序,即可开始玩 2048 小游戏。