用pygame写一个简单的八数字推盘游戏
时间: 2023-12-22 20:02:33 浏览: 95
好的,我可以编写一个简单的八数字推盘游戏。
首先,我们需要安装pygame库,可以使用以下命令安装:
```
pip install pygame
```
接下来,我们开始编写游戏。
```python
import pygame
import sys
# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (128, 128, 128)
# 定义常量
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 400
BLOCK_SIZE = 50
# 初始化pygame
pygame.init()
# 创建窗口
screen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])
pygame.display.set_caption("八数字推盘")
# 加载数字图片
number_images = {}
for i in range(1, 9):
number_images[str(i)] = pygame.image.load("{}.png".format(i)).convert_alpha()
# 加载空白图片
blank_image = pygame.image.load("blank.png").convert_alpha()
# 初始化游戏盘面
board = [
[1, 2, 3],
[4, 5, 6],
[7, 8, None]
]
# 计算空白方块的位置
def get_blank_position():
for y in range(3):
for x in range(3):
if board[y][x] == None:
return x, y
# 绘制游戏盘面
def draw_board():
screen.fill(WHITE)
for y in range(3):
for x in range(3):
number = board[y][x]
if number:
image = number_images[str(number)]
else:
image = blank_image
screen.blit(image, (x * BLOCK_SIZE, y * BLOCK_SIZE))
# 移动方块
def move_block(x, y):
blank_x, blank_y = get_blank_position()
if x == blank_x and y == blank_y:
return
if x == blank_x:
if y < blank_y:
for i in range(y, blank_y):
board[i][x], board[i + 1][x] = board[i + 1][x], board[i][x]
else:
for i in range(y, blank_y, -1):
board[i][x], board[i - 1][x] = board[i - 1][x], board[i][x]
elif y == blank_y:
if x < blank_x:
for i in range(x, blank_x):
board[y][i], board[y][i + 1] = board[y][i + 1], board[y][i]
else:
for i in range(x, blank_x, -1):
board[y][i], board[y][i - 1] = board[y][i - 1], board[y][i]
# 检查是否完成游戏
def check_win():
for y in range(3):
for x in range(3):
if board[y][x] != y * 3 + x + 1:
return False
return True
# 主循环
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.MOUSEBUTTONUP:
x, y = pygame.mouse.get_pos()
x //= BLOCK_SIZE
y //= BLOCK_SIZE
move_block(x, y)
if check_win():
print("你赢了!")
draw_board()
# 绘制网格
for x in range(4):
pygame.draw.line(screen, BLACK, (x * BLOCK_SIZE, 0), (x * BLOCK_SIZE, SCREEN_HEIGHT))
for y in range(4):
pygame.draw.line(screen, BLACK, (0, y * BLOCK_SIZE), (SCREEN_WIDTH, y * BLOCK_SIZE))
pygame.display.flip()
```
在上述代码中,我们首先定义了一些常量,包括屏幕大小、块大小和颜色。然后初始化pygame,创建窗口,并加载数字图片和空白图片。接着,我们初始化游戏盘面,并定义一些相关的函数,包括绘制游戏盘面、计算空白方块的位置、移动方块、检查是否完成游戏等。最后,我们在主循环中监听事件,并在鼠标点击时移动方块,绘制游戏盘面和网格,并判断是否完成游戏。
在运行代码时,需要准备好数字图片和空白图片,命名为1.png到8.png和blank.png,放在与代码文件相同的目录下。运行代码后,即可开始游戏。
阅读全文