2016-06-24 9 views
0

Ich habe ein Spiel mit Python und Pygame gemacht. Mein Schiff bewegt sich, aber ich habe Probleme damit, Kugeln zu schießen. Ich habe eine Funktion namens shootBullets() definiert, aber es funktioniert nicht. Und jetzt, wenn ich die Leertaste drücke, bewegt sich mein Schiff. Es soll sich nur bewegen, wenn ich die linke oder rechte Pfeiltaste drücke. Ich möchte, dass mein Schiff Kugeln nach unten schießt, wenn ich die Leertaste drücke. Hier ist mein Code:Warum schießt mein Schiff keine Kugeln?

import pygame,sys 
from pygame.locals import * 

pygame.init() 

black = (0,0,0) 
white = (255,255,255) 
red = (255,0,0) 
green = (0,255,0) 
blue = (0,0,255) 
bright_blue = (0, 135, 255) 
yellow = (255,242,0) 
ship_body = (33, 117, 243) 

screen = pygame.display.set_mode((500,500)) 
pygame.display.set_caption("Battleship") 
gameExit = False 
background = pygame.image.load("Sky Background.png") 
bulletImg = pygame.image.load("Bullet.png") 
bulletY = 80 

def shootBullets(): 
    for event in pygame.event.get(): 
     if event.type == KEYDOWN and event.key == K_SPACE: 
      bulletY += 5 
      screen.blit(bulletImg,(247,bulletY))   

pygame.key.set_repeat(50,50) 

ship_points = [ [100, 50], [180, 95], [320, 95], [400, 50], [250, 35] ] 
x = 0 
y = 0 

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      gameExit = True  

     if event.type == KEYDOWN: 
      if event.key == pygame.K_LEFT: x = -5 
      if event.key == pygame.K_RIGHT: x = 5 

      for point in ship_points: 
       point[0] += x 

      for point in ship_points: 
       if point[0] <= 0 or point[0] >= 500: 
        gameExit = True  

    shootBullets() 

    screen.fill(black) 
    screen.blit(background, (0,0)) 
    ship = [ 
      pygame.draw.polygon(screen, ship_body, ship_points), 
      pygame.draw.polygon(screen, black, ship_points, 1)] 

    pygame.display.update() 

pygame.quit() 
quit() 
+0

Du bist gerade nicht, ob Raum gedrückt wird oder nicht. Warum sollte der Weltraum dann Kugeln schießen? – syntonym

+2

Ihre Zeile 'Punkt [0] + = x' wird ausgeführt, wenn _eine_ Taste gedrückt wird. "x" kann von vorherigen Schleifeniterationen übernommen werden. – khelwood

Antwort

1

In Ihrer Hauptschleife Sie nur für links und rechts, nicht für den Raum suchen. Sie überprüfen die Funktion shootBullets, ob Raum gedrückt wird, aber das ist zu spät, shootBullets wird nie ausgeführt (tatsächlich wird es ausgeführt, wenn die for event in get() Schleife ist irgendwie beendet, aber das ist nicht das, was Sie wollen).

tun Anstatt so etwas wie:

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      gameExit = True  

     if event.type == KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       move_left() 
      if event.key == pygame.K_RIGHT: 
       move_right() 
      if event.key == pygame.SPACE: 
       shootBullet() 
      [...] 
+0

Können Sie Ihren Code so bearbeiten, dass er korrekt ausgerichtet ist – PyNEwbie

+0

@PyNEwbie Tut mir leid, Sie haben Recht. Ich denke, Sie können auch andere Antworten bearbeiten, um solche Fehler zu beheben. – syntonym

+0

Ich wollte deins bearbeiten, aber ich war nicht ganz sicher für die Ausrichtung der letzten if-Anweisung. Ich dachte es wäre so wie du es aber korrigiert hast. . . – PyNEwbie