2016-07-19 6 views
-2

Ich arbeite daran, ein Spiel für meine Programmierklasse mit Python zu machen. Ich weiß nicht, wie ich dem Spieler die Option erneut geben kann, wenn er verliert oder das Spiel beendet. Ich benutze Python 2.7. Dies ist der Code für mein Spiel:Hinzufügen einer Wiederspieloption zum Python-Spiel

import pygame, sys, time, random 
from pygame.locals import * 


# set up pygame 
pygame.init() 
mainClock = pygame.time.Clock() 

# set up the window 
WINDOWWIDTH = 1000 
WINDOWHEIGHT = 500 
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32) 
pygame.display.set_caption('Dankest Memes') 

# set up the colors 
PINK = (223, 61, 163) 
TEXTCOLOR = (223, 61, 163) 



def waitForPlayerToPressKey(): 
while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      terminate() 
     if event.type == KEYDOWN: 
      if event.key == K_ESCAPE: # pressing escape quits 
       terminate() 
      return 

def terminate(): 
while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      terminate() 
     if event.type == KEYDOWN: 
      if event.key == K_ESCAPE: # pressing escape quits 
       terminate() 
      return 

def drawText(text, font, surface, x, y): 
    textobj = font.render(text, 1, TEXTCOLOR) 
    textrect = textobj.get_rect() 
    textrect.topleft = (x, y) 
    surface.blit(textobj, textrect) 
font = pygame.font.SysFont(None, 48) 
TEXTCOLOR = (255,250,250) 

Score=4 

# set up fonts 
font = pygame.font.SysFont(None, 48) 
myscore=4 

# set up the block data structure 
file = 'score.txt' 
player = pygame.Rect(300, 100, 40, 40) 
playerImage = pygame.image.load('player.png') 
playerStretchedImage = pygame.transform.scale(playerImage, (40, 40)) 
foodImage = pygame.image.load('meme.png') 
foods = [] 
for i in range(20): 
    foods.append(pygame.Rect(random.randint(0, WINDOWWIDTH - 20), random.randint(0, WINDOWHEIGHT - 20), 20, 20)) 

foodCounter = 0 
NEWFOOD = 40 

baddie = pygame.Rect(300, 100, 40, 40) 
baddieImage = pygame.image.load('baddie.png') 
baddieStretchedImage = pygame.transform.scale(baddieImage, (40, 40)) 
baddies = [] 
for i in range(20): 
    baddies.append(pygame.Rect(random.randint(0, WINDOWWIDTH - 20), random.randint(0, WINDOWHEIGHT - 20), 20, 20)) 

baddieCounter = 0 
NEWBADDIE = 120 

# set up keyboard variables 
moveLeft = False 
moveRight = False 
moveUp = False 
moveDown = False 

MOVESPEED = 6 

# set up music 
pickUpSound = pygame.mixer.Sound('pickup.wav') 
pygame.mixer.music.load('background.mp3') 
pygame.mixer.music.play(-1, 0.0) 
musicPlaying = True 

# show the "Start" screen 
drawText('Dankest Memes', font, windowSurface, (WINDOWWIDTH/3), (WINDOWHEIGHT/3)) 
drawText('Press any key to start.', font, windowSurface, (WINDOWWIDTH/3) - 50, (WINDOWHEIGHT/3) + 50) 
drawText('Move with WASD or the arrow keys.', font, windowSurface, (WINDOWWIDTH/3) - 50, (WINDOWHEIGHT/3) + 100) 
drawText('Collect green Pepes to get points.', font, windowSurface, (WINDOWWIDTH/3) - 50, (WINDOWHEIGHT/3) + 150) 
drawText('Avoid the chickens.', font, windowSurface, (WINDOWWIDTH/3) - 50, (WINDOWHEIGHT/3) + 200) 
pygame.display.update() 
waitForPlayerToPressKey() 


# run the game loop 
while True: 
    # check for the QUIT event 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
     if event.type == KEYDOWN: 
      # change the keyboard variables 
      if event.key == K_LEFT or event.key == ord('a'): 
       moveRight = False 
       moveLeft = True 
      if event.key == K_RIGHT or event.key == ord('d'): 
       moveLeft = False 
       moveRight = True 
      if event.key == K_UP or event.key == ord('w'): 
       moveDown = False 
       moveUp = True 
      if event.key == K_DOWN or event.key == ord('s'): 
       moveUp = False 
       moveDown = True 
     if event.type == KEYUP: 
      if event.key == K_ESCAPE: 
       pygame.quit() 
       sys.exit() 
      if event.key == K_LEFT or event.key == ord('a'): 
       moveLeft = False 
      if event.key == K_RIGHT or event.key == ord('d'): 
       moveRight = False 
      if event.key == K_UP or event.key == ord('w'): 
       moveUp = False 
      if event.key == K_DOWN or event.key == ord('s'): 
       moveDown = False 
      if event.key == ord('x'): 
       player.top = random.randint(0, WINDOWHEIGHT - player.height) 
       player.left = random.randint(0, WINDOWWIDTH - player.width) 
      if event.key == ord('m'): 
       if musicPlaying: 
        pygame.mixer.music.stop() 
       else: 
        pygame.mixer.music.play(-1, 0.0) 
       musicPlaying = not musicPlaying 

     if event.type == MOUSEBUTTONUP: 
      foods.append(pygame.Rect(event.pos[0] - 10, event.pos[1] - 10, 20, 20)) 

    foodCounter += 1 
    if foodCounter >= NEWFOOD: 
     # add new food 
     foodCounter = 0 
     foods.append(pygame.Rect(random.randint(0, WINDOWWIDTH - 20), random.randint(0, WINDOWHEIGHT - 20), 20, 20)) 

    baddieCounter += 1 
    if baddieCounter >= NEWBADDIE: 
     baddieCounter = 0 
     baddies.append(pygame.Rect(random.randint(0, WINDOWWIDTH - 20), random.randint(0, WINDOWHEIGHT - 20), 20, 20)) 

    # draw the pink background onto the surface 
    windowSurface.fill(PINK) 

    # move the player 
    if moveDown and player.bottom < WINDOWHEIGHT: 
     player.top += MOVESPEED 
    if moveUp and player.top > 0: 
     player.top -= MOVESPEED 
    if moveLeft and player.left > 0: 
     player.left -= MOVESPEED 
    if moveRight and player.right < WINDOWWIDTH: 
     player.right += MOVESPEED 
    drawText('Score: %s' % (Score), font, windowSurface, 10,0) 

    # draw the block onto the surface 
    windowSurface.blit(playerStretchedImage, player) 

    # check if the block has intersected with any food squares. 
    for food in foods[:]: 
     if player.colliderect(food): 
      foods.remove(food) 
      Score+=2 
      if musicPlaying: 
       pickUpSound.play() 

    for baddie in baddies[:]: 
     if player.colliderect(baddie): 
      baddies.remove(baddie) 
      Score-=4 
      if musicPlaying: 
       pickUpSound.play() 

    if Score < 0: 
     drawText('You have lost', font, windowSurface, (WINDOWWIDTH/3), (WINDOWHEIGHT/3)) 
     drawText('Press escape to quit the game', font, windowSurface, (WINDOWWIDTH/3) - 50, (WINDOWHEIGHT/3) + 50) 
     drawText('Press any other key to play again', font, windowSurface, (WINDOWWIDTH/3) - 50, (WINDOWHEIGHT/3) + 100) 
     pygame.display.update() 
     waitForPlayerToPressKey() 




    # draw the food 
    for food in foods: 
     windowSurface.blit(foodImage, food) 

    # draw the baddie 
    for baddie in baddies: 
     windowSurface.blit(baddieImage, baddie) 

    # draw the window onto the screen 
    pygame.display.update() 
    mainClock.tick(40) 



if event.key == pygame.K_ESCAPE: 
    pygame.quit() 
    sys.exit() 

Das Spiel ist einfach. Der Spieler bewegt sich herum, sammelt Essen, um Punkte zu bekommen und vermeidet Bösewichte, so dass sie keine Punkte verlieren. Wenn der Wert unter 0 fällt, verliert der Spieler. Ich habe es geschafft, den Spielbildschirm zu bekommen und zu beenden, aber ich kann es nicht mehr spielen lassen oder nach diesem Punkt das Spiel beenden.

Antwort

1

Zuerst von einem Vorschlag. Menschen werden Ihnen eher helfen, wenn Sie ihnen zeigen, was Sie versucht haben.

jedenfalls.

Was ich tun würde, ist Ihre gesamte Spielschleife in eine Funktion zu wickeln. Wie so:

def game_loop(): 
    while True: 
    # check for the QUIT event 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
      .... 

nächsten, wenn auch immer Ihr Spiel endet (ich nehme an, es eine Bedingung hat, dass es Ende macht), ein Spiel über Bildschirm-Funktion aufrufen. In Ihrer Game-Over-Screen-Funktion könnten Sie zunächst das Fenster mit einer Farbe füllen und dann irgendeinen Text auf den Bildschirm blitten, den Sie dem Benutzer zeigen möchten, wie zum Beispiel "Drücken Sie eine beliebige Taste, um wieder zu spielen". Dann würden Sie prüfen, ob eine Taste gedrückt wurde, und wenn ja, rufen Sie die Spielschleife auf. Sie müssen auch überprüfen, ob der Benutzer versucht, das Fenster zu schließen.

Rufen Sie dann das Spiel über Screen-Funktion wie folgt:

#pseudo code 
if game_has_ended == True: 
    game_over_screen() 
+1

Yo, wie geht es. Dein Diagramm zeigt, dass du es kürzlich getötet hast :) –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ Danke Mann, ich versuche mein Spiel zu verbessern :) Ich habe das Gefühl, dass ich es besser machen könnte. Ich habe in letzter Zeit gesehen, dass ich den Duffle Hammer benutze und ich fühle mich irgendwie eifersüchtig ... Ich benutze es als Motivation, um härter zu werden ;-) –

+0

Ein kleines Geständnis ... 10k ist nicht so glamourös wie Ich dachte es wäre so. Sei nicht enttäuscht. Der dumme Hammer macht aber Spaß. :) Btw, das Python-Tag ist wirklich mörderisch. Im Gegensatz dazu ist der Pandas-Tag viel einladender. –

Verwandte Themen