用户:
小鹿UUyM查看:1 回复:3 评论:1 创建时间:2023-03-30T19:00:55
--------------------------------------密封线-----------------------------------------------------------------------------------------------------------------------------------------
首先,你需要安装pygame库
在命令行中输入:
pip install pygame
然后在你的程序中写入一下代码:
import pygame
from pygame.locals import *
import sys
# 初始化pygame
pygame.init()
# 屏幕设置
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("跑酷游戏")
# 颜色
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
BLACK = (0, 0, 0)
# 方块设置
PLAYER_SIZE = 50
player = pygame.Rect(WIDTH // 2, HEIGHT // 2, PLAYER_SIZE, PLAYER_SIZE)
gravity = 1
jump_force = -15
vertical_speed = 0
def check_collision(player, obstacles):
for obstacle in obstacles:
if player.colliderect(obstacle):
return True
return False
def check_side_collision(player, obstacles):
side_collision = False
for obstacle in obstacles:
if player.colliderect(obstacle):
if player.y < obstacle.y or player.y > obstacle.y + obstacle.height:
continue
side_collision = True
break
return side_collision
def switch_level(level):
global player, obstacles
player.x = 50
player.y = HEIGHT - PLAYER_SIZE - 50
obstacles = levels[level]
gravity = 1
jump_force = -15
vertical_speed = 0
return level + 1
def check_on_ground(player, obstacles):
test_rect = player.copy()
test_rect.y += 1 # 向下移动一个像素
return test_rect.y >= HEIGHT - PLAYER_SIZE - 50 or check_collision(test_rect, obstacles)
# 关卡设计
#这里可以根据自己的想法添加关卡
levels = [
[
pygame.Rect(200, 400, 100, 20),
pygame.Rect(400, 300, 100, 20),
pygame.Rect(600, 200, 100, 20),
],
[
pygame.Rect(喵),
pygame.Rect(400, 350, 300, 20),
],
[
pygame.Rect(100, 500, 600, 20),
],
[
pygame.Rect(300, 0, 20, 200),
pygame.Rect(300, 300, 20, 200),
],
[
pygame.Rect(150, 200, 20, 200),
pygame.Rect(450, 200, 20, 200),
],
[
pygame.Rect(200, 200, 100, 20),
pygame.Rect(400, 400, 100, 20),
],
[
pygame.Rect(0, 300, 600, 20),
],
[
pygame.Rect(200, 400, 20, 100),
pygame.Rect(400, 200, 20, 100),
],
[
pygame.Rect(100, 0, 20, 200),
pygame.Rect(100, 300, 20, 200),
pygame.Rect(600, 0, 20, 200),
pygame.Rect(600, 300, 20, 200),
],
[
pygame.Rect(300, 200, 200, 20),
],
]
# 在游戏循环前定义一个简单的绘制文本的函数
def draw_text(text, font, color, surface, x, y):
textobj = font.render(text, 1, color)
textrect = textobj.get_rect()
textrect.topleft = (x, y)
surface.blit(textobj, textrect)
# 添加一个新函数用于显示主菜单
def show_menu():
menu_font = pygame.font.Font(None, 36)
selected_level = 0
max_level = len(levels) - 1
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_UP:
selected_level -= 1
if selected_level < 0:
selected_level = max_level
elif event.key == K_DOWN:
selected_level += 1
if selected_level > max_level:
selected_level = 0
elif event.key == K_RETURN:
return selected_level
screen.fill(WHITE)
for index, level in enumerate(levels):
color = BLUE if index == selected_level else (0, 0, 0)
draw_text(f"关卡 {index + 1}", menu_font, color, screen, WIDTH // 2 - 50, HEIGHT // 2 + 50 * (index - len(levels) // 2))
pygame.display.update()
pygame.time.delay(50)
# 状态设置
current_level = 0
menu = True
# 游戏循环
while True:
prev_x, prev_y = player.x, player.y
obstacles = levels[current_level]
# 在绘制障碍物和检查碰撞时,使用obstacles变量
for obstacle in obstacles:
pygame.draw.rect(screen, BLACK, obstacle)
if check_collision(player, obstacles):
player.x, player.y = prev_x, prev_y
if menu:
current_level = show_menu()
menu = False
player.x = 50
player.y = HEIGHT - PLAYER_SIZE - 50
obstacles = levels[current_level]
else:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
vertical_speed += gravity
# 在处理按键事件前,添加以下代码以检查玩家是否在地面上
on_ground = check_on_ground(player, obstacles)
side_collision = check_side_collision(player, obstacles)
keys = pygame.key.get_pressed()
if keys[pygame.K_w] and side_collision:
player.y -= 5
elif keys[pygame.K_w] and on_ground:
vertical_speed = jump_force
if keys[pygame.K_a]:
player.x -= 5
if keys[pygame.K_d]:
player.x += 5
if check_collision(player, levels[current_level]):
player.x, player.y = prev_x, prev_y
player.y += vertical_speed
if check_collision(player, obstacles):
player.y = prev_y
vertical_speed = 0
screen.fill(WHITE)
# 绘制玩家
pygame.draw.rect(screen, BLUE, player)
# 检查是否到达关卡终点
if player.x >= WIDTH - PLAYER_SIZE:
current_level = switch_level(current_level)
if current_level >= len(levels):
# 游戏完成,返回主菜单
menu = True
current_level = 0
else:
# 载入新关卡
pass
# 绘制障碍物
for obstacle in levels[current_level]:
pygame.draw.rect(screen, BLACK, obstacle)
# 更新屏幕
pygame.display.flip()
pygame.time.delay(50)
然后运行就可以玩了!
本程序可以当做一个跑酷模版增加更多玩法
*注 本程序原作者:GPT-4