首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游戏-如何完成游戏?

游戏-如何完成游戏?
EN

Stack Overflow用户
提问于 2019-11-29 15:57:31
回答 2查看 1.8K关注 0票数 2

我正在创造一个小游戏。当用户达到100点或更多的时候,游戏应该停止,一个新的屏幕应该出现。我试过了,但没有用。游戏不停止,屏幕“闪烁”。我如何完成游戏并“制作”一个新的屏幕?我想需要一个时间循环,但我不知道怎么做。

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-29 16:14:26

不要在update()中画任何图。在draw()中执行所有依赖于score的绘图

代码语言:javascript
复制
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。当比赛结束时,比分就不应该改变:

代码语言:javascript
复制
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)

    # [...]
票数 2
EN

Stack Overflow用户

发布于 2019-11-29 16:13:58

也许不是最优雅的答案,但,我假设你有一个游戏循环的一些地方。有些像:

代码语言:javascript
复制
while(True):
    for event in pygame.events.get():
       ....

嗯,我有时只是创建一个新的游戏循环欢迎屏幕或游戏屏幕上使用相同的游戏窗口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59107919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档