大模型自动生成解压小游戏
·
以下是使用 Python 和 Pygame 库实现的解压小游戏生成代码示例,包含三种常见解压游戏类型(泡泡点击、拖拽整理、消除类)。代码结构模块化,便于扩展新类型:
基础框架与泡泡点击游戏
import pygame
import random
import sys
from enum import Enum
class GameType(Enum):
BUBBLE_POP = 1
DRAG_SORT = 2
MATCH_CLEAR = 3
class DecompressionGame:
def __init__(self, width=800, height=600):
pygame.init()
self.screen = pygame.display.set_mode((width, height))
self.clock = pygame.time.Clock()
self.active_game = None
self.font = pygame.font.SysFont('Arial', 24)
def start_game(self, game_type):
if game_type == GameType.BUBBLE_POP:
self.active_game = BubblePopGame(self.screen)
elif game_type == GameType.DRAG_SORT:
self.active_game = DragSortGame(self.screen)
elif game_type == GameType.MATCH_CLEAR:
self.active_game = MatchClearGame(self.screen)
def run(self):
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if self.active_game:
self.active_game.handle_event(event)
self.screen.fill((240, 240, 245))
if self.active_game:
self.active_game.update()
self.active_game.draw()
else:
self.draw_menu()
pygame.display.flip()
self.clock.tick(60)
def draw_menu(self):
title = self.font.render("选择解压游戏类型:", True, (70, 70, 70))
self.screen.blit(title, (250, 150))
bubble_text = self.font.render("1 - 泡泡点击", True, (0, 100, 200))
drag_text = self.font.render("2 - 拖拽整理", True, (200, 100, 0))
match_text = self.font.render("3 - 消除方块", True, (100, 200, 0))
self.screen.blit(bubble_text, (300, 220))
self.screen.blit(drag_text, (300, 270))
self.screen.blit(match_text, (300, 320))
泡泡点击游戏实现
class BubblePopGame:
def __init__(self, screen):
self.screen = screen
self.bubbles = []
self.score = 0
self.font = pygame.font.SysFont('Arial', 32)
self.spawn_timer = 0
for _ in range(15):
self.add_bubble()
def add_bubble(self):
x = random.randint(50, 750)
y = random.randint(50, 550)
radius = random.randint(20, 50)
color = (random.randint(100, 255), random.randint(100, 255), random.randint(100, 255))
self.bubbles.append({"pos": (x, y), "radius": radius, "color": color})
def handle_event(self, event):
if event.type == pygame.MOUSEBUTTONDOWN:
for bubble in self.bubbles[:]:
distance = ((event.pos[0] - bubble["pos"][0]) ** 2 +
(event.pos[1] - bubble["pos"][1]) ** 2) ** 0.5
if distance <= bubble["radius"]:
self.bubbles.remove(bubble)
self.score += bubble["radius"] // 10
self.add_bubble()
def update(self):
self.spawn_timer += 1
if self.spawn_timer > 60 and len(self.bubbles) < 25:
self.add_bubble()
self.spawn_timer = 0
def draw(self):
for bubble in self.bubbles:
pygame.draw.circle(self.screen, bubble["color"], bubble["pos"], bubble["radius"])
score_text = self.font.render(f"分数: {self.score}", True, (50, 50, 50))
self.screen.blit(score_text, (20, 20))
拖拽整理游戏实现
class DragSortGame:
def __init__(self, screen):
self.screen = screen
self.items = []
self.dragged_item = None
self.font = pygame.font.SysFont('Arial', 24)
self.create_items()
def create_items(self):
colors = [(255,100,100), (100,255,100), (100,100,255),
(255,255,100), (255,100,255), (100,255,255)]
for i in range(6):
x = random.randint(100, 700)
y = random.randint(100, 500)
width = random.randint(40, 80)
height = random.randint(40, 80)
self.items.append({
"rect": pygame.Rect(x, y, width, height),
"color": colors[i],
"target": pygame.Rect(50 + i*100, 50, 70, 70)
})
def handle_event(self, event):
if event.type == pygame.MOUSEBUTTONDOWN:
for item in self.items:
if item["rect"].collidepoint(event.pos):
self.dragged_item = item
break
elif event.type == pygame.MOUSEBUTTONUP:
self.dragged_item = None
elif event.type == pygame.MOUSEMOTION and self.dragged_item:
self.dragged_item["rect"].x = event.pos[0] - self.dragged_item["rect"].width // 2
self.dragged_item["rect"].y = event.pos[1] - self.dragged_item["rect"].height // 2
def update(self):
pass
def draw(self):
for item in self.items:
pygame.draw.rect(self.screen, item["color"], item["rect"])
pygame.draw.rect(self.screen, (200,200,200), item["target"], 2)
help_text = self.font.render("将彩色方块拖到对应的灰色框内", True, (70,70,70))
self.screen.blit(help_text, (200, 550))
消除方块游戏实现
class MatchClearGame:
def __init__(self, screen):
self.screen = screen
self.grid = []
self.grid_size = 8
self.cell_size = 60
self.selected = None
self.font = pygame.font.SysFont('Arial', 24)
self.initialize_grid()
def initialize_grid(self):
colors = [(255,0,0), (0,255,0), (0,0,255), (255,255,0)]
self.grid = [[random.choice(colors) for _ in range(self.grid_size)]
for _ in range(self.grid_size)]
def handle_event(self, event):
if event.type == pygame.MOUSEBUTTONDOWN:
col = event.pos[0] // self.cell_size
row = event.pos[1] // self.cell_size
if 0 <= col < self.grid_size and 0 <= row < self.grid_size:
if self.selected is None:
self.selected = (col, row)
else:
self.swap_tiles(self.selected, (col, row))
self.selected = None
def swap_tiles(self, pos1, pos2):
self.grid[pos1[1]][pos1[0]], self.grid[pos2[1]][pos2[0]] = \
self.grid[pos2[1]][pos2[0]], self.grid[pos1[1]][pos1[0]]
self.check_matches()
def check_matches(self):
# 简化的匹配检测(实际游戏需要更复杂的逻辑)
pass
def update(self):
pass
def draw(self):
for row in range(self.grid_size):
for col in range(self.grid_size):
rect = pygame.Rect(col*self.cell_size, row*self.cell_size,
self.cell_size-2, self.cell_size-2)
pygame.draw.rect(self.screen, self.grid[row][col], rect)
if self.selected == (col, row):
pygame.draw.rect(self.screen, (255,255,255), rect, 3)
主程序入口
if __name__ == "__main__":
game = DecompressionGame()
# 自动检测按键选择游戏类型
while True:
game.run()
keys = pygame.key.get_pressed()
if keys[pygame.K_1]:
game.start_game(GameType.BUBBLE_POP)
elif keys[pygame.K_2]:
game.start_game(GameType.DRAG_SORT)
elif keys[pygame.K_3]:
game.start_game(GameType.MATCH_CLEAR)
elif keys[pygame.K_ESCAPE]:
pygame.quit()
sys.exit()
功能说明
- 泡泡点击游戏:点击彩色泡泡获得分数,泡泡会持续生成
- 拖拽整理游戏:将随机位置的方块拖拽到对应目标区域
- 消除方块游戏:点击交换相邻方块位置(匹配检测逻辑需完善)
扩展建议
- 添加音效使用
pygame.mixer - 增加游戏难度随时间提升的机制
- 实现存档功能记录最高分
- 添加更多游戏类型如数字排序、绘画板等
运行前需安装依赖:pip install pygame numpy
更多推荐
所有评论(0)