2016-06-11 9 views
-1

Ich mache ein Space Invaders-ähnliches Spiel. Ich habe die erste erste Stufe beendet, die 4 Reihen von 10 Aliens hat. Ich möchte ein weiteres Level hinzufügen, wo es 4 Reihen von 17 Aliens gibt, um es schwierig zu machen und das Zeitlimit zu reduzieren. Ich habe einen separaten Modulnamen "LEVEL2" gemacht, was ich versucht habe zu importieren und auszuführen, nachdem Level 1 abgeschlossen ist. Kann mir bitte jemand helfen, das herauszufinden?Wie kann ich ein Level 2 in meinem Spiel hinzufügen?

Vielen Dank im Voraus

MAIN GAME (Stufe 1):

import pygame, random, sys 
from time import sleep 
from pygame.locals import * 
import subprocess 
import LEVEL2 

BLACK = (0, 0, 0) 
WHITE = (255, 255, 255) 
RED = (255, 0, 0) 
BLUE = (0, 0, 255) 
NAVYBLUE = (0,0,45) 
GREY = (128,128,128) 
screen_width = 900 
screen_height = 650 

pygame.init() 
OpenScreen = pygame.display.set_mode([screen_width, screen_height]) 


screen = pygame.display.set_mode([screen_width, screen_height]) 
class Block(pygame.sprite.Sprite): 
    def __init__(self, image): 
     aliens = pygame.image.load('aliens.png') 
     aliens = pygame.transform.scale(aliens, (20,20)) 
     super(Block, self).__init__() 

     self.image = aliens 

     self.rect = self.image.get_rect() 

class Player(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.mouse.set_visible(0) 
     ship = pygame.image.load('spaceship.png') 
     ship = pygame.transform.scale(ship, (20,30)) 
     super(Player, self).__init__() 

     self.image = ship 
     self.rect = self.image.get_rect() 
    def update(self): 
     pos = pygame.mouse.get_pos() 
     self.rect.x = pos[0] 

class Bullet(pygame.sprite.Sprite): 
    def __init__(self): 
     bullets = pygame.image.load('missile.png') 
     bullets = pygame.transform.scale(bullets, (15,25)) 
     super(Bullet, self).__init__() 
     self.image = bullets 
     self.rect = self.image.get_rect() 

    def update(self): 
     self.rect.y -= 1.25 

all_sprites_list = pygame.sprite.Group() 
block_list = pygame.sprite.Group() 
bullet_list = pygame.sprite.Group() 


for i in range(10): 
    block = Block(Block) 
    block.rect.x = (40 * i) + 200 
    block.rect.y = 50 
    block_list.add(block) 
    all_sprites_list.add(block) 

for i in range(10): 
    block = Block(Block) 
    block.rect.x = (40 * i) + 200 
    block.rect.y = 75 
    block_list.add(block) 
    all_sprites_list.add(block) 

for i in range(10): 
    block = Block(Block) 
    block.rect.x = (40 * i) + 200 
    block.rect.y = 100 
    block_list.add(block) 
    all_sprites_list.add(block) 

for i in range(10): 
    block = Block(Block) 
    block.rect.x = (40 * i) + 200 
    block.rect.y = 125 
    block_list.add(block) 
    all_sprites_list.add(block) 




player = Player() 
all_sprites_list.add(player) 
done = False 
clock = pygame.time.Clock() 
score = 0 
time = 3000 
player.rect.y = 615 
font = pygame.font.SysFont(None, 30) 



while not done: 
    OpenScreen.fill(WHITE) 
    fonts = pygame.font.SysFont("impact", 55) 
    display = fonts.render('PRESS SPACE TO PLAY', True, (BLACK)) 
    OpenScreen.blit(display, (200 , 200)) 
    font1 = pygame.font.SysFont("impact", 25) 
    display1 = font.render("Press Escape to quit", True, (BLACK)) 
    OpenScreen.blit(display1, (670,600)) 
    pygame.display.flip() 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 
     pressed = pygame.key.get_pressed() 

     if pressed[pygame.K_ESCAPE]: 
      done = True 

     elif pressed[pygame.K_SPACE]: 
      while not done: 

       for event in pygame.event.get(): 
        if event.type == pygame.QUIT: 
         done = True 

        elif event.type == pygame.MOUSEBUTTONDOWN: 
         bullet = Bullet() 
         bullet.rect.x = player.rect.x + 3.5 
         bullet.rect.y = player.rect.y 
         all_sprites_list.add(bullet) 
         bullet_list.add(bullet) 



       all_sprites_list.update() 

       for bullet in bullet_list: 
        block_hit_list = pygame.sprite.spritecollide(bullet, block_list, True) 
        for block in block_hit_list: 

         bullet_list.remove(bullet) 
         all_sprites_list.remove(bullet) 
         score += 1 
        if bullet.rect.y < -10: 
         bullet_list.remove(bullet) 
         all_sprites_list.remove(bullet) 

       screen.fill(NAVYBLUE) 
       scoredisplay = font.render("Score {0}".format(score), 1, (WHITE)) 
       screen.blit(scoredisplay, (5, 10)) 
       all_sprites_list.draw(screen) 
       timedisplay = font.render("Time {0}".format(time), 1, (WHITE)) 
       screen.blit(timedisplay, (5, 30)) 
       pygame.display.flip() 

       time -= 1 
       if time == 0: 
        done = True 
        screen.fill(WHITE) 
        font= pygame.font.SysFont("impact", 36) 
        display = font.render("YOU RAN OUT OF TIME!! :(Your final score was {}".format(score), 1, (BLACK)) 
        screen.blit(display, (100,200)) 
        pygame.display.flip() 
        pygame.time.wait(1500) 

       if len(block_list) == 0: 
        done == True 
        len(bullet_list) == 0 
        screen.fill(WHITE) 
        time = 0 
        font = pygame.font.SysFont("impact", 55) 
        display = font.render('You Won!',True ,(BLACK)) 
        display1 = font.render('Press SPACE for Level 2',True ,(BLACK)) 
        display2 = font.render('Escape to quit',True ,(BLACK)) 
        screen.blit(display,(350,200)) 
        screen.blit(display1,(350,400)) 
        screen.blit(display2,(500,500)) 
        clock.tick(60) 
        pygame.display.flip() 
        pygame.time.wait(1500) 
        for event in pygame.event.get(): 
         if event.type == pygame.QUIT: 
          done = True 
         pressed = pygame.key.get_pressed() 
         if pressed[pygame.K_ESCAPE]: 
          done = True 
         elif pressed[pygame.K_SPACE]: 
          done = False 
          subprocess.call("LEVEL2.py", shell=True) 


pygame.quit() 

ist hier Ebene 2:

import pygame, random, sys 
from time import sleep 
from pygame.locals import * 
BLACK = (0, 0, 0) 
WHITE = (255, 255, 255) 
RED = (255, 0, 0) 
BLUE = (0, 0, 255) 
NAVYBLUE = (0,0,45) 
GREY = (128,128,128) 
screen_width = 900 
screen_height = 650 

pygame.init() 
OpenScreen = pygame.display.set_mode([screen_width, screen_height]) 


screen = pygame.display.set_mode([screen_width, screen_height]) 
class Block(pygame.sprite.Sprite): 
    def __init__(self, image): 
     aliens = pygame.image.load('aliens.png') 
     aliens = pygame.transform.scale(aliens, (20,20)) 
     super(Block, self).__init__() 

     self.image = aliens 

     self.rect = self.image.get_rect() 

class Player(pygame.sprite.Sprite): 
    def __init__(self): 
     pygame.mouse.set_visible(0) 
     ship = pygame.image.load('spaceship.png') 
     ship = pygame.transform.scale(ship, (20,30)) 
     super(Player, self).__init__() 

     self.image = ship 
     self.rect = self.image.get_rect() 
    def update(self): 
     pos = pygame.mouse.get_pos() 
     self.rect.x = pos[0] 

class Bullet(pygame.sprite.Sprite): 
    def __init__(self): 
     bullets = pygame.image.load('missile.png') 
     bullets = pygame.transform.scale(bullets, (15,25)) 
     super(Bullet, self).__init__() 
     self.image = bullets 
     self.rect = self.image.get_rect() 

    def update(self): 
     self.rect.y -= 3 

all_sprites_list = pygame.sprite.Group() 
block_list = pygame.sprite.Group() 
bullet_list = pygame.sprite.Group() 


for i in range(17): 
    block = Block(Block) 
    block.rect.x = (40 * i) + 110 
    block.rect.y = 50 
    block_list.add(block) 
    all_sprites_list.add(block) 

for i in range(17): 
    block = Block(Block) 
    block.rect.x = (40 * i) + 110 
    block.rect.y = 75 
    block_list.add(block) 
    all_sprites_list.add(block) 

for i in range(17): 
    block = Block(Block) 
    block.rect.x = (40 * i) + 110 
    block.rect.y = 100 
    block_list.add(block) 
    all_sprites_list.add(block) 

for i in range(17): 
    block = Block(Block) 
    block.rect.x = (40 * i) + 110 
    block.rect.y = 125 
    block_list.add(block) 
    all_sprites_list.add(block) 




player = Player() 
all_sprites_list.add(player) 
done = False 
clock = pygame.time.Clock() 
score = 0 
time = 2000 
player.rect.y = 615 
font = pygame.font.SysFont(None, 30) 



while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 
     pressed = pygame.key.get_pressed() 

     if pressed[pygame.K_ESCAPE]: 
      done = True 

     elif pressed[pygame.K_SPACE]: 
      while not done: 

       for event in pygame.event.get(): 
        if event.type == pygame.QUIT: 
         done = True 

        elif event.type == pygame.MOUSEBUTTONDOWN: 
         bullet = Bullet() 
         bullet.rect.x = player.rect.x + 3.5 
         bullet.rect.y = player.rect.y 
         all_sprites_list.add(bullet) 
         bullet_list.add(bullet) 



       all_sprites_list.update() 

       for bullet in bullet_list: 
        block_hit_list = pygame.sprite.spritecollide(bullet, block_list, True) 
        for block in block_hit_list: 

         bullet_list.remove(bullet) 
         all_sprites_list.remove(bullet) 
         score += 1 
        if bullet.rect.y < -10: 
         bullet_list.remove(bullet) 
         all_sprites_list.remove(bullet) 

       screen.fill(NAVYBLUE) 
       scoredisplay = font.render("Score {0}".format(score), 1, (WHITE)) 
       screen.blit(scoredisplay, (5, 10)) 
       all_sprites_list.draw(screen) 
       timedisplay = font.render("Time {0}".format(time), 1, (WHITE)) 
       screen.blit(timedisplay, (5, 30)) 
       pygame.display.flip() 

       time -= 1 
       if time == 0: 
        done = True 
        screen.fill(WHITE) 
        font= pygame.font.SysFont("impact", 36) 
        display = font.render("YOU RAN OUT OF TIME!! :(Your final score was {}".format(score), 1, (BLACK)) 
        screen.blit(display, (100,200)) 
        pygame.display.flip() 
        pygame.time.wait(1500) 

       if len(block_list) == 0: 
        done == True 
        screen.fill(WHITE) 
        font = pygame.font.SysFont("impact", 55) 
        display = font.render('You Won!',True ,(BLACK)) 
        screen.blit(display,(350,200)) 
        pygame.display.flip() 
        pygame.time.wait(1500) 
       clock.tick(60) 

pygame.quit() 
+0

Anstelle von 2 Modulen zum Kopieren und Einfügen empfiehlt es sich, den Spielcode an die übergebenen Variablen, Anzahl der Schiffe, Linien, Geschwindigkeit und Ebenennummer anzupassen und denselben Spielecode mit anderen Parametern wiederzuverwenden – gbtimmon

+0

I versuchte das, war aber nicht sicher, wie genau man verschiedene Werte aufrufen soll, zum Beispiel die for-Schleife, die eine Reichweite (Anzahl von Aliens) hat, ich weiß nicht, wie man sie nennen soll und mit einer anderen Menge von Werten – user108

+0

Warum nicht a verwenden Variable wie level = 1, und habe eine if-Anweisung, die abhängig von dieser Variablen entweder die Ebene 1 oder die Ebene 2 ausführt? – numbermaniac

Antwort

0

Nehmen Sie, dass alle Sachen in der Stufe 1 außer die Klassendefinitionen und setze es in Funktionen mit vernünftigen Namen wie "init" und "playGame". Lass sie Mitglieder einer Klasse namens "Level" sein.

Beachten Sie, welche Aspekte in Level 1 und Level 2 unterschiedlich sind. Machen Sie diese unterschiedlichen Parameter in Level __init__ Mitglied und verwenden Sie sie, um einige lokale Variablen zu initialisieren, die von seinem playGame Mitglied wiederverwendet werden.

Jetzt wird sichergestellt, dass die Funktionen playGame und init für beide Ebenen funktionieren.

Es macht einfach keinen Sinn, den ganzen Code für jede Ebene neu zu schreiben. Auf diese Weise können Sie beliebig viele Ebenen haben.

+0

Ok, danke ich versuche das. – user108

+0

Ich bin ein Anfänger und bin immer noch fest. Kannst du mir bitte zeigen wie? – user108

+0

Ich würde lieber sehen, was Sie geschrieben haben und wo Sie stecken geblieben sind, als Sie es geschrieben haben. Warum versuchst du es nicht? –

Verwandte Themen