2016-06-11 4 views
-1

Я делаю космическую захватчиков-подобную игру. Я закончил первый первый уровень, который имеет 4 ряда из 10 инопланетян. Я хочу добавить еще один уровень, в котором есть 4 ряда из 17 инопланетян, чтобы сделать его трудным и сократить время. Я сделал отдельное имя модуля «LEVEL2», которое я пытался импортировать и запускать после завершения первого уровня. Может кто-то, пожалуйста, помогите мне понять это.Как я могу добавить уровень 2 в свою игру?

Заранее спасибо

MAIN GAME (уровень 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() 

Здесь уровень 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

Вместо 2-х модулей кода копирования и вставки рекомендуется использовать код с условными переменными, количество кораблей, линий, скорость, номер уровня, а затем повторно использовать один и тот же код игры с различными параметрами. – gbtimmon

+0

I попробовал это, но не был уверен точно, как вызывать разные значения, например цикл for, который имеет диапазон (количество инопланетян), я не знаю, как его вызвать, и с другим набором значений – user108

+0

Почему бы не использовать переменная типа level = 1, и имеет оператор if, который либо запускает уровень 1, либо уровень 2 в зависимости от этой переменной? – numbermaniac

ответ

0

Возьмите все, что материал на уровне 1 за исключением определения классов , и включил его в функции с разумными именами, такими как «init» и «playGame». Пусть они будут членами класса под названием «Уровень».

Обратите внимание на то, какие аспекты различаются в Уровне 1 и Уровне 2. Сделайте эти вещи, которые отличаются от параметров, на уровне __init__ члена Уровня и используйте их для инициализации некоторой локальной переменной, которая будет повторно использоваться ее членом playGame.

Теперь убедитесь, что функции playGame и init работают для обоих уровней.

Просто не имеет смысла переписывать весь этот код для каждого уровня. Таким образом, вы можете иметь столько уровней, сколько хотите.

+0

Хорошо, спасибо, я попробую это. – user108

+0

Я новичок, и я все еще застрял. Не могли бы вы показать мне, как? – user108

+0

Я бы предпочел посмотреть, что вы написали, и где вы застряли, когда вы его написали. Почему бы вам не попробовать? –

Смежные вопросы