pygame - 如何完成游戏?
pygame - How to finish game?
我正在制作一个小游戏。当用户达到 100 点或更多点时,游戏应该停止并出现一个新屏幕。我试过了,但没有用。游戏不停,画面"flickers"。我怎样才能完成游戏并 "make" 一个新屏幕?我认为需要一个 while 循环,但我不知道该怎么做。
from random import randint
import pygame
WIDTH = 800
HEIGHT = 800
apple = Actor("apple")
apple.pos = randint(0, 800), randint(-800, 0)
pear = Actor("pear")
pear.pos = randint(0, 800), randint(-800, 0)
plum = Actor("plum")
plum.pos = randint(0, 800), randint(-800, 0)
donut = Actor("donut")
donut.pos = randint(0, 800), randint(-800, 0)
ice = Actor("ice")
ice.pos = randint(0, 800), randint(-800, 0)
chips = Actor("chips")
chips.pos = randint(0, 800), randint(-800, 0)
happysmiley = Actor("happysmiley")
happysmiley.pos = 300, 750
score = 0
background = pygame.image.load("images\background.png")
pygame.mixer.init()
pygame.mixer.music.load("music\funmusic.mp3")
pygame.mixer.music.play(-1)
def draw():
screen.clear()
screen.blit("background",(0,0))
apple.draw()
pear.draw()
plum.draw()
donut.draw()
ice.draw()
chips.draw()
happysmiley.draw()
screen.draw.text("Punkte: " + str(score), (700, 5), color = "black")
def update():
global score
if apple.y < 800:
apple.y = apple.y + 4
else:
apple.x = randint(0, 800)
apple.y = randint(-800, 0)
if pear.y < 800:
pear.y = pear.y + 4
else:
pear.x = randint(0, 800)
pear.y = randint(-800, 0)
if plum.y < 800:
plum.y = plum.y + 4
else:
plum.x = randint(0, 800)
plum.y = randint(-800, 0)
if donut.y < 800:
donut.y = donut.y + 4
else:
donut.x = randint(0, 800)
donut.y = randint(-800, 0)
if ice.y < 800:
ice.y = ice.y + 4
else:
ice.x = randint(0, 800)
ice.y = randint(-800, 0)
if chips.y < 800:
chips.y = chips.y + 4
else:
chips.x = randint(0, 800)
chips.y = randint(-800, 0)
if keyboard.left:
happysmiley.x = happysmiley.x - 5
elif keyboard.right:
happysmiley.x = happysmiley.x + 5
if happysmiley.collidepoint (apple.x, apple.y):
score = score + 2
effect = pygame.mixer.Sound("sounds\bonus.wav")
effect.play()
if happysmiley.collidepoint (pear.x, pear.y):
score = score + 1
effect = pygame.mixer.Sound("sounds\bonus.wav")
effect.play()
if happysmiley.collidepoint (plum.x, plum.y):
score = score + 1
effect = pygame.mixer.Sound("sounds\bonus.wav")
effect.play()
if happysmiley.collidepoint (donut.x, donut.y):
score = score - 1
effect = pygame.mixer.Sound("sounds\no.wav")
effect.play()
if happysmiley.collidepoint (ice.x, ice.y):
score = score - 1
effect = pygame.mixer.Sound("sounds\no.wav")
effect.play()
if happysmiley.collidepoint (chips.y, chips.y):
score = score - 1
effect = pygame.mixer.Sound("sounds\no.wav")
effect.play()
if score >= 100:
endoflevel1()
def endoflevel1():
screen.clear()
global score
screen.fill("green")
screen.draw.text("Game Over: Du hast das 1. Level erfolgreich abgeschlossen!", topleft=(100,350), fontsize=30)
pygame.display.flip()
可能不是有史以来最优雅的答案,但我假设您在某处有一个游戏循环。像这样的东西:
while(True):
for event in pygame.events.get():
....
好吧,有时我只是使用相同的 pygame window.
为欢迎屏幕或游戏结束屏幕创建一个新的游戏循环
不要在update()
. Do all the drawing in draw()
中画图,依赖于score
:
def draw():
screen.clear()
if score >= 100:
endoflevel1()
else
drawgame()
def drawgame():
screen.blit("background",(0,0))
apple.draw()
pear.draw()
plum.draw()
donut.draw()
ice.draw()
chips.draw()
happysmiley.draw()
screen.draw.text("Punkte: " + str(score), (700, 5), color = "black")
def endoflevel1():
global score
screen.fill("green")
screen.draw.text("Game Over: Du hast das 1. Level erfolgreich abgeschlossen!",
topleft=(100,350), fontsize=30)
请注意,您还必须评估 update
中的分数是否大于或等于 100。当游戏结束时,分数不应该改变:
def update():
global score
# do not change the score if the game has end
if score >= 100:
pygame.mixer.music.stop() # optionally stop music
return
if apple.y < 800:
apple.y = apple.y + 4
else:
apple.x = randint(0, 800)
apple.y = randint(-800, 0)
# [...]
我正在制作一个小游戏。当用户达到 100 点或更多点时,游戏应该停止并出现一个新屏幕。我试过了,但没有用。游戏不停,画面"flickers"。我怎样才能完成游戏并 "make" 一个新屏幕?我认为需要一个 while 循环,但我不知道该怎么做。
from random import randint
import pygame
WIDTH = 800
HEIGHT = 800
apple = Actor("apple")
apple.pos = randint(0, 800), randint(-800, 0)
pear = Actor("pear")
pear.pos = randint(0, 800), randint(-800, 0)
plum = Actor("plum")
plum.pos = randint(0, 800), randint(-800, 0)
donut = Actor("donut")
donut.pos = randint(0, 800), randint(-800, 0)
ice = Actor("ice")
ice.pos = randint(0, 800), randint(-800, 0)
chips = Actor("chips")
chips.pos = randint(0, 800), randint(-800, 0)
happysmiley = Actor("happysmiley")
happysmiley.pos = 300, 750
score = 0
background = pygame.image.load("images\background.png")
pygame.mixer.init()
pygame.mixer.music.load("music\funmusic.mp3")
pygame.mixer.music.play(-1)
def draw():
screen.clear()
screen.blit("background",(0,0))
apple.draw()
pear.draw()
plum.draw()
donut.draw()
ice.draw()
chips.draw()
happysmiley.draw()
screen.draw.text("Punkte: " + str(score), (700, 5), color = "black")
def update():
global score
if apple.y < 800:
apple.y = apple.y + 4
else:
apple.x = randint(0, 800)
apple.y = randint(-800, 0)
if pear.y < 800:
pear.y = pear.y + 4
else:
pear.x = randint(0, 800)
pear.y = randint(-800, 0)
if plum.y < 800:
plum.y = plum.y + 4
else:
plum.x = randint(0, 800)
plum.y = randint(-800, 0)
if donut.y < 800:
donut.y = donut.y + 4
else:
donut.x = randint(0, 800)
donut.y = randint(-800, 0)
if ice.y < 800:
ice.y = ice.y + 4
else:
ice.x = randint(0, 800)
ice.y = randint(-800, 0)
if chips.y < 800:
chips.y = chips.y + 4
else:
chips.x = randint(0, 800)
chips.y = randint(-800, 0)
if keyboard.left:
happysmiley.x = happysmiley.x - 5
elif keyboard.right:
happysmiley.x = happysmiley.x + 5
if happysmiley.collidepoint (apple.x, apple.y):
score = score + 2
effect = pygame.mixer.Sound("sounds\bonus.wav")
effect.play()
if happysmiley.collidepoint (pear.x, pear.y):
score = score + 1
effect = pygame.mixer.Sound("sounds\bonus.wav")
effect.play()
if happysmiley.collidepoint (plum.x, plum.y):
score = score + 1
effect = pygame.mixer.Sound("sounds\bonus.wav")
effect.play()
if happysmiley.collidepoint (donut.x, donut.y):
score = score - 1
effect = pygame.mixer.Sound("sounds\no.wav")
effect.play()
if happysmiley.collidepoint (ice.x, ice.y):
score = score - 1
effect = pygame.mixer.Sound("sounds\no.wav")
effect.play()
if happysmiley.collidepoint (chips.y, chips.y):
score = score - 1
effect = pygame.mixer.Sound("sounds\no.wav")
effect.play()
if score >= 100:
endoflevel1()
def endoflevel1():
screen.clear()
global score
screen.fill("green")
screen.draw.text("Game Over: Du hast das 1. Level erfolgreich abgeschlossen!", topleft=(100,350), fontsize=30)
pygame.display.flip()
可能不是有史以来最优雅的答案,但我假设您在某处有一个游戏循环。像这样的东西:
while(True):
for event in pygame.events.get():
....
好吧,有时我只是使用相同的 pygame window.
为欢迎屏幕或游戏结束屏幕创建一个新的游戏循环不要在update()
. Do all the drawing in draw()
中画图,依赖于score
:
def draw():
screen.clear()
if score >= 100:
endoflevel1()
else
drawgame()
def drawgame():
screen.blit("background",(0,0))
apple.draw()
pear.draw()
plum.draw()
donut.draw()
ice.draw()
chips.draw()
happysmiley.draw()
screen.draw.text("Punkte: " + str(score), (700, 5), color = "black")
def endoflevel1():
global score
screen.fill("green")
screen.draw.text("Game Over: Du hast das 1. Level erfolgreich abgeschlossen!",
topleft=(100,350), fontsize=30)
请注意,您还必须评估 update
中的分数是否大于或等于 100。当游戏结束时,分数不应该改变:
def update():
global score
# do not change the score if the game has end
if score >= 100:
pygame.mixer.music.stop() # optionally stop music
return
if apple.y < 800:
apple.y = apple.y + 4
else:
apple.x = randint(0, 800)
apple.y = randint(-800, 0)
# [...]