簡體   English   中英

無法弄清楚如何在我的pygame中成倍增加外星人?

[英]Can't figure out how to multiply aliens in my pygame?

所以我剛剛用pygame和python編寫了一個用於練習的道奇游戲。 我已經閱讀了很多教程並看了其他類似的游戲來幫助我。 基本上,外星人從屏幕的頂部下來(它們應該是隨機的大小和速度,它們的位置也應該是隨機的)並且玩家使用他們的鼠標移動飛船來躲避墜落的外星人。

我有一個if語句,它應該會使從頂部下來的外星人成倍增加,但是當我運行游戲時,只有一個外星人掉下來,當它到達屏幕的末端時它就會消失。 沒有其他外星人出現。 該程序仍在運行,因此游戲尚未結束。

這是我的完整代碼。

import pygame
import random
import sys
from pygame.locals import *
alienimg = pygame.image.load('C:\\Python27\\alien.png')
playerimg = pygame.image.load('C:\\Python27\\spaceship.png')

def playerCollision(playerRect, aliens): # a function for when the player hits an alien
    for a in aliens:
        if playerRect.colliderect(a['rect']):
            return True
    return False

def screenText(text, font, screen, x, y): #text display function
    textobj = font.render(text, 1, (255, 255, 255))
    textrect = textobj.get_rect()
    textrect.topleft = (x,y)
    screen.blit(textobj, textrect)

def main(): #this is the main function that starts the game

    pygame.init()

    screen = pygame.display.set_mode((500,500))
    clock = pygame.time.Clock()
    pygame.mouse.set_visible(False)
    pygame.display.set_caption('Dodge the Aliens') 
    font = pygame.font.SysFont("monospace", 45)


    pressed = pygame.key.get_pressed()

    aliens = []
    score = 0
    alienAdd = 0
    addedaliens = 0
    gameOver = False
    moveLeft = moveRight = moveUp = moveDown = False
    topScore = 0
    while gameOver==False: #while loop that actually runs the game
        score += 1

        playerImage =   pygame.image.load('C:\\Python27\\spaceship.png').convert() # the player images
        playerRect = playerImage.get_rect()
        screen.blit(playerImage, [300, 250])
        alienImage = pygame.image.load('C:\\Python27\\alien.png').convert() #alien images
        alienRect = alienImage.get_rect()
        screen.blit(alienImage, [ 50, 50 ])
        pygame.display.flip()


        for event in pygame.event.get(): #key controls
            if event.type == KEYDOWN and event.key == pygame.K_ESCAPE: #escape ends the game
                gameOver = True
            elif event.type == MOUSEMOTION:
                playerRect.move_ip(event.pos[0] - playerRect.centerx, event.pos[1] - playerRect.centery)
        screen.fill((0,0,0))
        pygame.display.flip()


        if not gameOver:
            alienAdd += 1
        if alienAdd == 6: # randomly adding aliens of different sizes and speeds
            aliendAdd = 0
            alienSize = random.randint(8, 25)
            newAlien = {'rect': pygame.Rect(random.randint(0, 500 - alienSize), 0 -alienSize, alienSize, alienSize),
                    'speed': random.randint(1, 8),
                    'surface':pygame.transform.scale(alienImage, (alienSize, alienSize)),
                    }
            aliens.append(newAlien)

        if moveLeft and playerRect.left > 0:
            playerRect.move_ip(-1 * 5, 0)
        if moveRight and playerRect.right < 500:
            playerRect.move_ip(5, 0)
        if moveUp and playerRect.top > 0:
            playerRect.move_ip(0, -1 * 5)
        if moveDown and playerRect.bottom < 500:
            playerRect.move_ip(0, 5)

        for a in aliens:
            if not gameOver:
                a['rect'].move_ip(0, a['speed'])


        for a in aliens[:]:
            if a['rect'].top > 500:
                aliens.remove(a) #removes the aliens when they get to the bottom of the screen

        screenText('Score %s' % (score), font, screen, 10, 0)
        screen.blit(playerImage, playerRect)

        pygame.display.update()

        for a in aliens:
            screen.blit(a['surface'], a['rect'])
        pygame.display.flip()


        if playerCollision(playerRect, aliens):
            if score > topScore:
                topScore = score
            gameOver = True


        clock.tick(30)

    screenText('Game Over!', font, screen, (750 / 6), ( 750 / 6))
    screenText('Press ENTER To Play Again.', font, screen, ( 750 / 6) - 80, (750 / 6) + 50)
    pygame.display.update()

if __name__ == "__main__":
    main()

另外,旁注,每當我把代碼放在這里時,我都會沿着每一行向下並縮進它。 有更簡單的方法嗎?

你在aliendAdd = 0aliendAdd = 0 ,應該是alienAdd = 0 這導致你繼續增加alienAdd越來越多,而不是再次命中你的alienAdd == 6 if語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM