2017-07-20 12 views
1

私は新しいプログラマーで、私の弾丸が表示されない理由を理解しようとしています。 Y座標が変化するようですが、何らかの理由で弾丸が表示されません。これは、Pythonで私のコードです:シンプルスペースインベーダーゲームに箇条書きが表示されない

#Importing necessary modules 
import random 
import pygame 
import sys 
#Setting up pygame 
pygame.init() 
shooting = False 
n = 0 
keys = [False,False,False,False] 
clock = pygame.time.Clock() 
screen = pygame.display.set_mode([500,500]) 
font = pygame.font.Font(None,50) 
#Creating class for player 
class Player: 
    def __init__(self,x,y,width,height): 
     self.x = x 
     self.y = y 
     self.width = width 
     self.height = height 
    def draw(self): 
     pygame.draw.rect(screen,[0,255,0], 
[int(self.x),int(self.y),int(self.width),int(self.height)],0) 
    def move(self): 
     if keys[1] == True: 
      self.x -= 1 
     elif keys[3] == True: 
      self.x += 1 

     if self.x < 0: 
      print(self.x) 
      self.x = 0 
     if self.x > 500 - self.width: 
      print(self.x) 
      self.x = 500 - self.width 
    def shoot(self): 
     return 
class Bullet: 
    def __init__(self,x,y): 
    self.x = x 
    self.y = y 
    def update(self,y_amount = 5): 
     self.y += y_amount 
     return 
    def draw(self): 
     pygame.draw.rect(screen,[0,255,0],[int(self.x),int(self.y),10,30],0) 

bullets = []   



#Creating a player 
player = Player(200,450,40,20) 
#Main Loop 
while True: 
    clock.tick(60) 
    #Background 
    screen.fill([0,0,0]) 
    #Letting Player move 
    player.move() 
    #Drawing Player 
    player.draw() 
    #Updating screen 
    pygame.display.flip() 
    #Checking for events 
    for event in pygame.event.get(): 
     #Checking for quit 
     if event.type == pygame.QUIT: 
      sys.exit() 
     if event.type == pygame.KEYDOWN: 
      #Checking for keys 
      if event.key == pygame.K_w: 
       keys[0] = True 
      elif event.key == pygame.K_a: 
       keys[1]=True 
      elif event.key == pygame.K_s: 
       keys[2]=True 
      elif event.key == pygame.K_d: 
       keys[3]=True 
      elif event.key == pygame.K_SPACE: 
       shooting = True 


     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_w: 
       keys[0]=False 
      elif event.key == pygame.K_a: 
       keys[1]=False 
      elif event.key == pygame.K_s: 
       keys[2]=False 
      elif event.key == pygame.K_d: 
       keys[3]=False 
      elif event.key == pygame.K_SPACE: 
       shooting = False 





    if shooting == True: 
     bullets.append(Bullet(player.x, player.y)) 

    for bullet in bullets: 
     bullet.update() 
     bullet.draw() 
+2

問題を示す_最小限の例を作成することで、問題を改善することができます(これはプログラミングの問題のほとんどが解決される方法でもあります)。 –

+0

コードを実行できません。私はそれをコピーして貼り付けると、インデントについて何らかのエラーが発生します。私たちがあなたを助けることができるように修正する必要があります。 –

+0

他のpygame Space-Invaderの例を見てみるとよいでしょう:https://github.com/mattboan/Galtron – SeeDerekEngineer

答えて

2

私はあなたがいない初めに、whileループの最後で画面を更新する必要があると信じています:

while True: 
    #fill screen 
    for event in pygame.event.get(): 
     #get user input 

    pygame.display().flip() 
+0

これは 'pygame.display.flip()'で 'screen.display()です。 () 'を返します。 – skrx

+0

@skrxそれを指摘してくれてありがとう。今は修正されています。 – Ajax1234

3

ルール1:チェックあなたの座標システム。

Pygameの左上に(0,0)があり、あなたのプレーヤーは(x、450) - 下部にあります。弾丸を作成するときは、プレイヤー座標で行い、位置を更新してYを増やします(上向きではなく下向きに移動)。

関連する問題