2016-11-09 7 views
0

Ich bin noch ziemlich neu in Python und Programmierung im Allgemeinen. Ich versuche, einem Buch zu folgen, das ich benutze, um ein einfaches Spiel zu erstellen. Ich habe das Programm wortwörtlich eingegeben, so weit ich das beurteilen kann, aber aus welchem ​​Grund auch immer scheint alles in Ordnung zu sein, außer mein Schiffsbild erscheint nicht. Sieht jemand, was das Problem sein könnte? Ich verwende Python 3.4.3 mit der entsprechenden Pygame-Version.Versuchen Sie, ein Bild auf dem Bildschirm mit Pygame zu zeichnen, aber der Bildschirm ist leer?

#Creating a pygame window and responding to user input 

import sys 

import pygame 

def bg_draw(): 
    pygame.init() 
    screen = pygame.display.set_mode((1200, 800)) 
    pygame.display.set_caption("Alien Invasion") 

    while True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       sys.exit() 

       pygame.display.flip() 

bg_draw() 

#Setting the bg color 

def bg_color(): 
    pygame.display.set_caption('Alien Invasion') 

    bg_color = (230, 230, 230) 

    while True: 
     screen.fill(bg_color) 

     pygame.display.flip() 

bg_color() 


from settings import Settings 

def run_settings(): 
    #initializes pygame, settings, and screen object 
    pygame.init() 
    ai_settings = settings() 
    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) 
    pygame.display.set_caption("Alien Invasion") 

    #start main loop for game 

    while True: 
     #redraws screen during each pass through the loop 
     screen.fill(ai_settings.bg_color) 
     pygame.display.flip() 

run_settings() 



#Creating the ship class 


class ship(): 
    def __init__(self, screen): 
     self.screen = screen 
     #load ship image and get it's rect 
     self.image = pygame.image.load('ship.bmp') 
     self.rect = self.image.get_rect() 
     self.screen_rect = screen.get_rect() 

     #start a new ship at bottom of screen 
     self.rect.centerx = self.screen_rect.centerx 
     self.rect.bottom = self.screen_rect.bottom 

    def blitme(self): 
     self.screen.blit(self.image, self.rect) 


#drawing the ship on the screen 


def run_game(): 
    pygame.display.set_caption("Alien Invasion") 

    #makes a ship 
    ship = Ship(screen) 

    #start games main loop 
    while True: 
     screen.fill(ai_settings.bg_color) 
     ship.blitme() 
     pygame.display.flip() 

run_game() 
+0

aussehen könnte, wo ist 'Schiff()' Klasse und 'blitme()' Methode ? BTW 'ship()' und 'Ship()' sind nicht dieselbe Klasse - Sie sollten eine Fehlermeldung erhalten. Haben Sie es in der Konsole/termina/cmd.exe/powershell ausgeführt, um Fehlermeldungen zu sehen? – furas

+0

Sie haben zu viele 'while True' Loops. Sie starten die erste Schleife in 'bg_draw()' und Sie verlassen es nie. – furas

Antwort

0

Sie haben zu viele while True Schleifen. Sie laufen bg_draw(), so dass Sie zuerst while True ausführen und Sie verlassen es nie.

Neben ship() und Ship() ist nicht die gleiche Klasse, das gleiche mit settings() und Settings()

Ihr Code wie diese

# --- all import at the beginning --- 
import sys 
import pygame 
#from settings import Settings 

# --- constants --- (UPPER_CASE names) 

#WIDTH = 1200 
#HEIGHT = 800 
#GREY = (230, 230, 230) 

FPS = 30 

# --- classes --- (CamelCase names) 

class Settings(): 

    def __init__(self): 
     self.screen_width = 1200 
     self.screen_height = 800 
     self.bg_color = (230, 230, 230) 

class Ship(): 

    def __init__(self, screen): 
     self.screen = screen 
     #load ship image and get it's rect 
     self.image = pygame.image.load('ship.bmp') 
     self.rect = self.image.get_rect() 

     self.screen_rect = screen.get_rect() 
     #start a new ship at bottom of screen 
     self.rect.centerx = self.screen_rect.centerx 
     self.rect.bottom = self.screen_rect.bottom 

    def draw(self): 
     self.screen.blit(self.image, self.rect) 

# --- functions --- (lower_case names) 

def run_game(screen, ai_settings): 

    #makes a ship 
    ship = Ship(screen) 

    clock = pygame.time.Clock() 

    #start games main loop 
    while True: 
     # --- events --- 
     for event in pygame.event.get(): 
      # exit on close window 
      if event.type == pygame.QUIT: 
       return 

      # exit on press button ESC 
      elif event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_ESCAPE: 
        return 

     # --- updates --- 

     #empty 

     # --- draws --- 

     screen.fill(ai_settings.bg_color) 
     ship.draw() 
     pygame.display.flip() 

     # --- FPS --- 

     #control game speed 
     clock.tick(FPS) 

# --- main --- (lower_case names) 

ai_settings = Settings() 

pygame.init() 

screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) 
pygame.display.set_caption("Alien Invasion") 

run_game(screen, ai_settings) 

pygame.quit() 
Verwandte Themen