Python 游戏结束在pygame中无法正常工作
我现在面临三个问题,我想分别回答,请合作Python 游戏结束在pygame中无法正常工作,python,pygame,Python,Pygame,我现在面临三个问题,我想分别回答,请合作 import pygame, sys from random import randint pygame.init() screen_size = (350,674) screen = pygame.display.set_mode(screen_size) pygame.display.set_caption("First Game") x_poss = randint(0,350) y_poss = randint(0,675)
import pygame, sys
from random import randint
pygame.init()
screen_size = (350,674)
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption("First Game")
x_poss = randint(0,350)
y_poss = randint(0,675)
width = 20
height = 20
vel = 8
bases = []
spines = []
red = (255,0,0)
image_1 = pygame.image.load('bird2.png').convert_alpha()
image_2 = pygame.image.load('base.png').convert_alpha()
image_3 = pygame.image.load('base2.png').convert_alpha()
image_4 = pygame.image.load('enemy.png').convert_alpha()
j = 10
isJump = False
jumpCount = j
run = True
base = pygame.draw.rect(screen, (255,255,255), (randint(0,330), randint(0,675), width, height))
def jump():
global jumpCount, y_poss
for base in bases:
if bird.colliderect(base):
isJump = True
if jumpCount >= -j:
y_poss -= (jumpCount * abs(jumpCount)) * 0.5
jumpCount -= 1
else:
jumpCount = j
isJump = False
def draw_rect(color, x, y, width, height):
pygame.draw.rect(screen, color, (x,y,width, height))
def game_over(x,y):
game_over_font = pygame.font.Font('Omnibus.ttf',40)
game_over_text = game_over_font.render('GAME OVER', True, (0,0,0))
screen.blit(game_over_text, (x,y))
num_bases = 5
num_spines = 5
is_game_over = False
grav = 1
velo = 2
while len(bases) < 2*num_bases:
rect = pygame.Rect(randint(0,330), randint(0,675), width, height)
if rect.collidelist(bases) < 0:
bases.append(rect)
while len(spines) < num_spines:
rect = pygame.Rect(randint(0,330), randint(0,675), 10, 10)
if rect.collidelist(spines) < 0:
spines.append(rect)
while run:
pygame.time.delay(40)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
key = pygame.key.get_pressed()
if key[pygame.K_LEFT] and x_poss > vel - width:
x_poss -= vel
if key[pygame.K_q]:
run = False
sys.exit()
if key[pygame.K_RIGHT] and x_poss < 350 - vel - width:
x_poss += vel
if not(isJump):
if key[pygame.K_UP] and y_poss > vel:
y_poss -= vel
if key[pygame.K_DOWN] and y_poss < 670 - height - vel:
y_poss += vel
if key[pygame.K_SPACE]:
isJump = True
else:
if jumpCount >= -10:
y_poss -= (jumpCount * abs(jumpCount)) * 0.5
jumpCount -= 1
else:
jumpCount = 10
isJump = False
bird = pygame.draw.rect(screen, (255,255,255), (x_poss, y_poss, width, height))
spine = pygame.draw.rect(screen, (0,0,0), (300,440,10,10))
screen.fill((255,255,255))
draw_rect((255,255,255),x_poss, y_poss, width, height)
screen.blit(image_1, bird)
for spine in spines:
screen.blit(image_4, spine)
spine.x += velo
if spine.x >= 355:
spine.x = -15
if spine.colliderect(bird):
is_game_over = True
break
for base_1 in bases[:num_bases]:
screen.blit(image_2, base_1)
for base_2 in bases[num_bases:]:
screen.blit(image_3, base_2)
for i, base_1 in enumerate(bases[:num_bases]):
if base.collidelist(bases[i+1:]) >= 0:
bases.remove(base_1)
bases.append(pygame.draw.rect(screen, (255,255,255), (randint(0,330), randint(0,675), width, height)))
screen.blit(image_2, base_1)
for i, base_2 in enumerate(bases[num_bases:]):
if base.collidelist(bases[i+1:]) >= 0:
bases.remove(base_2)
bases.append(pygame.draw.rect(screen, (255,255,255), (randint(0,330), randint(0,675), width, height)))
screen.blit(image_3, base_2)
for base_1 in bases[:num_bases]:
base_1.y += grav
base_1.x += 0#-1
if base_1.x == -50:
base_1.x = 360
if base_1.y == 675:
base_1.x = randint(0,360)
base_1.y = randint(-10, 0)
for base_2 in bases[num_bases:]:
base_2.y += grav
base_2.x += 0#1
if base_2.x == 360:
base_2.x = -50
if base_2.y == 675:
base_2.x = randint(0,360)
base_2.y = randint(-10, 0)
"""for i, base in enumerate(bases):
if base.y - base[i+1].y < 20:
base.y + (bases[i+1].y - base.y)
for i, spine in enumerate(spines):
i += 1
if spines[i].y - spines[0].y < 20:
spine.y + (spines[i].y - spine.y)"""
if is_game_over:
grav = 0
velo = 0
game_over(45, 336)
jump()
pygame.display.update()
我尝试了一种新的方法。现在,每当鸟与刺碰撞时,底部和刺都会停止,但我想从屏幕上删除我的鸟图像…
if is_game_over:
grav = 0
velo = 0
game_over(45, 336)
接下来的两个问题很快就会出现……请站在一旁帮助我……我认为问题在于,你只是告诉它结束游戏,然后继续执行其他所有操作,你没有阻止其余代码的运行。添加另一个变量,
is\u game\u over
如何,然后将您的if代码替换为:
if is_game_over:
grav = 0
velo = 0
game_over(45, 336)
if spine.colliderect(bird):
is_game_over = True
break
然后,在for
循环之外结束游戏:
if is_game_over:
game_over(45, 336)
continue # or break, depending on what you're trying to do with game_over
现在这样,它应该跳过剩下的代码,这样你的游戏就停止了。希望这对你有用
另外,为什么在
while
循环中定义了game\u over
函数?这意味着它将在每个循环中重新定义。没问题@Azeem8869786Thanks@Rolv apnese您的代码工作正常。