问题描述
游戏结束后,当我再次开始游戏时,它从相同的位置开始。 按 Backspace 退出推送模式(这样您也可以向上移动和向下移动)。
import pygame,sys
WIDTH,HEIGHT = 800,600
pygame.init()
win = pygame.display.set_mode((WIDTH,HEIGHT))
clock = pygame.time.Clock()
game_over = False
# Player Class
class Player:
def __init__(self,x,y):
self.x = int(x)
self.y = int(y)
self.rect = pygame.Rect(self.x,self.y,32,32)
self.color = (250,120,60)
self.velX = 0
self.velY = 0
self.left_pressed = False
self.right_pressed = False
self.up_pressed = False
self.down_pressed = False
self.speed = 6
self.trail = []
self.running = False
def main(self):
self.update()
self.check_collisons()
self.draw()
sparc.main()
def draw(self):
global win
pygame.draw.rect(win,self.color,self.rect)
pygame.draw.rect(win,(sparc.color),sparc.Rect)
def check_collisons(self):
if self.x >= 760:
self.x = 760
elif self.x <= 0 :
self.x = 0
if self.y >=570:
self.y = 570
elif self.y<=0:
self.y = 0
def update(self):
self.velX = 0
self.velY = 0
if self.left_pressed and not self.right_pressed:
self.velX = -self.speed
if self.right_pressed and not self.left_pressed:
self.velX = self.speed
if self.up_pressed and not self.down_pressed :
self.velY = -self.speed
if self.down_pressed and not self.up_pressed :
self.velY = self.speed
self.x += self.velX
self.y += self.velY
self.rect = pygame.Rect(self.x,32)
pos = self.rect.midbottom
if self.trail:
if self.trail[-1] != pos:
self.trail.append(pos)
else:
self.trail = [pos,pos]
def push(self):
global win,player,game_over
game_over = False
win.fill((255,255,0))
self.y = 570
while self.running == False and game_over==False:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
self.left_pressed = True
if event.key==pygame.K_RIGHT:
self.right_pressed = True
if event.key == pygame.K_BACKSPACE:
self.running = True
main_game()
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
player.left_pressed = False
if event.key == pygame.K_RIGHT:
player.right_pressed = False
win.fill((12,24,36))
player.main()
pygame.draw.lines(win,(player.color),False,player.trail,2)
pygame.display.update()
clock.tick(60)
class Sparc:
def __init__(self):
self.x = WIDTH-40
self.y = HEIGHT-40
self.color = (255,255)
self.Rect = pygame.Rect(self.x,30,30)
self.velx = 2
self.vely = 3
def move(self):
if self.Rect.y==HEIGHT-40:
self.Rect.x -= self.velx
if self.Rect.x<=5:
self.Rect.x = 5
self.Rect.y -=self.vely
if self.Rect.y<=5:
self.Rect.y = 5
self.Rect.x +=self.velx
if self.Rect.x>=WIDTH-40:
self.Rect.x = WIDTH-40
self.Rect.y+= self.vely
def check_collisons(self):
if self.Rect.colliderect(player.rect):
you_lost()
def main(self):
self.check_collisons()
self.move()
player = Player(WIDTH / 2,570)
sparc = Sparc()
def main_game():
while player.running== True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player.left_pressed = True
if event.key == pygame.K_RIGHT:
player.right_pressed = True
if event.key == pygame.K_UP:
player.up_pressed = True
if event.key == pygame.K_DOWN:
player.down_pressed = True
if player.y >= 560:
if event.key == pygame.K_BACKSPACE:
player.running = False
player.push()
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
player.left_pressed = False
if event.key == pygame.K_RIGHT:
player.right_pressed = False
if event.key == pygame.K_UP:
player.up_pressed = False
if event.key == pygame.K_DOWN:
player.down_pressed = False
win.fill((12,36))
player.main()
pygame.draw.lines(win,2)
clock.tick(60)
pygame.display.flip()
def you_lost():
global game_over
game_over = True
while game_over == True:
win.fill((120,36))
font = pygame.font.Font('freesansbold.ttf',32)
text = font.render('GAME OVER',True,((255,100,0)))
textRect = text.get_rect()
textRect.center = (WIDTH // 2,HEIGHT// 2)
win.blit(text,textRect)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
pass
pygame.display.update()
clock.tick(60)
player.push()
有什么办法可以重启吗? 当我按回车键时,游戏结束后一切都会重新启动。 我正在尝试构建这样的东西 - https://drive.google.com/file/d/1vAxbIKjbq8HRnjbAAUOffyH3efynjbXM/view?usp=sharing
如果您可以构建一个函数来填充路径之间的区域(您可以查看 docx 以获得更好的解释),那么请将其放在答案中。
解决方法
我相信您需要创建变量来存储状态。然后您可以在结束游戏时以该状态返回。