问题描述
我正在使用 python 的 Pygame 模块编写游戏。在这个游戏中,您需要在平台上跳跃,同时避免掉出屏幕。我从以前的游戏中借用了代码,因此某些变量不匹配。尽管如此,我想让它让如果你在一个平台上,你可以站在它上面,但我不能让角色站在平台上,它会掉下来。
这是我的代码:
# Import modules and initialize
import pygame as p
import sys
import random
p.init()
# Define variables
player_movement = 0
GraviTY = 0.25
asteroid_height = [650,625]
score = 0
high_score = 0
game_font = p.font.Font('fonts/Pressstart2P-Regular.ttf',20)
game_active = False
FPS = p.time.Clock()
# Make some functions
def create_asteroid():
random_asteroid_pos = random.choice(asteroid_height)
new_asteroid = asteroid_surface.get_rect(midtop = (650,random_asteroid_pos))
return new_asteroid
def move(asteroids):
for asteroid in asteroids:
asteroid.centerx -= 5
return asteroids
def draw(asteroids):
for asteroid in asteroids:
sc.blit(asteroid_surface,asteroid)
def collision(asteroids):
for asteroid in asteroids:
if player_rect.colliderect(asteroid):
GraviTY = 0
player_movement += 1
else:
GraviTY = 0.25
player_movement = 0
if player_rect.bottom >= 600:
GraviTY = -1
else:
GraviTY = 0.25
return True
def display_score(game_state):
if game_state == 'in_game':
score_surface = game_font.render(f'score: {int(score)}',True,(255,255,255))
score_rect = score_surface.get_rect(center = (110,30))
sc.blit(score_surface,score_rect)
elif game_state == 'game_over':
high_score_surface = game_font.render(f'High score: {int(high_score)}',255))
high_score_rect = high_score_surface.get_rect(center = (320,370))
sc.blit(high_score_surface,high_score_rect)
def update_score(score,high_score):
if score > high_score:
high_score = score
return high_score
# Make a screen
sc = p.display.set_mode((700,700))
p.display.set_caption('The Adventures of Cubeman')
# Make a backround
bg = p.image.load('images/backround.png')
bg = p.transform.scale2x(bg)
# Put in main music
# Play main music
# Import character
ship = p.image.load('images/cube.png').convert()
# Import asteroid
asteroid_surface = p.image.load('images/platform.png').convert()
# Asteroid logic
asteroid_list = []
SPAWN = p.USEREVENT
p.time.set_timer(SPAWN,1500)
# HitBox variables
player_rect = ship.get_rect(center = (100,350))
# Sound FX
jump_sound = p.mixer.sound('sound/jump.wav')
hit_sound = p.mixer.sound('sound/impact.wav')
# Begin code logic
while True:
# Make the game exit cleanly
for event in p.event.get():
if event.type == p.QUIT:
p.quit()
sys.exit()
if event.type == p.KEYDOWN:
if event.key == p.K_SPACE and game_active:
player_movement = 0
player_movement -= 6
jump_sound.play()
if event.type == p.KEYDOWN:
if event.key == p.K_SPACE and game_active == False:
game_active = True
asteroid_list.clear()
player_movement = 0
score = 0
player_rect.center = (100,350)
if event.type == SPAWN:
asteroid_list.append(create_asteroid())
# INDENTATION
#<--|
sc.blit(bg,(0,0))
if game_active:
player_movement += GraviTY
player_rect.centery += player_movement
# Draw asteroids and player
sc.blit(ship,player_rect)
asteroid_list = move(asteroid_list)
draw(asteroid_list)
game_active = collision(asteroid_list)
# score system
score += 0.01
display_score('in_game')
# Game info
info_surface = game_font.render('SPACE to move!',255))
info_rect = info_surface.get_rect(center = (550,30))
sc.blit(info_surface,info_rect)
else:
high_score = update_score(score,high_score)
display_score('game_over')
# Make the main menu/game over screen
game_over_surface = game_font.render('The Adventures of Cubeman',255))
game_over_rect = game_over_surface.get_rect(center = (320,330))
sc.blit(game_over_surface,game_over_rect)
game_over_surface1 = game_font.render('SPACE to play!',255))
game_over_rect1 = game_over_surface1.get_rect(center = (320,350))
sc.blit(game_over_surface1,game_over_rect1)
FPS.tick(120)
p.display.update()
感谢任何帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)