示例#1
0
def alien_fleet(settings, screen, aliens):
    alien_init = alien.Alien(settings, screen)
    space_x = settings.width - 3 * alien_init.rect.width
    space_y = settings.height - (
        3 + settings.space_increase) * alien_init.rect.height
    alien_number = int(space_x / (3 * alien_init.rect.width))
    alien_rows = int(space_y /
                     ((3 + settings.space_increase) * alien_init.rect.height))

    for row in range(alien_rows):
        for alien_count in range(alien_number):
            alien_init = alien.Alien(settings, screen)
            alien_init.x = alien_init.rect.width + 3 * alien_init.rect.width * alien_count
            alien_init.y = alien_init.rect.height + (
                1.25 + settings.space_increase) * alien_init.rect.height * row
            alien_init.rect.x = alien_init.x
            alien_init.rect.y = alien_init.y
            aliens.add(alien_init)
示例#2
0
def create_fleet(screen, set, aliens, ship_1):
    alien_0 = alien.Alien(screen, set)
    alien_0_width = alien_0.alien_rect.width  # 获取外星人的宽度
    alien_0_height = alien_0.alien_rect.height  # 获取外星人的高度
    aliens_numbers_x = get_number_alien(set, alien_0_width)
    aliens_numbers_y = get_number_rows(set, alien_0_height, ship_1)
    for number in range(aliens_numbers_x):
        for rows in range(aliens_numbers_y):
            create_alien(screen, number, aliens, rows, set)
示例#3
0
def generate_alien(ai_settings, screen, alien_group):
    if len(alien_group) < ai_settings.aliens_numlimit:
        level = 3
        new_alien = alien.Alien(ai_settings, screen)
        alien_group.add(new_alien)
        for aliens in alien_group:
            rect = aliens.image.get_rect()
            # print(type(rect))
            rect.y -= level * rect.width
示例#4
0
def init_aliens(screen, aliens):
    locations = []
    for i in range(10):
        col = random.randint(0, 12)
        row = random.randint(0, 18)
        pos = [col, row]
        if pos not in locations:
            locations.append(pos)
            new_alien = alien.Alien(screen, [0, 5])
            new_alien.rect.top, new_alien.rect.left = [-pos[0] * 50 - 50, pos[1] * 60 + 10]
            aliens.add(new_alien)
示例#5
0
    def create_fleet(self):
        new_alien = alien.Alien(self)
        # self.aliens.add(new_alien)
        available_space_x = self.settings.screen_width - (2 * new_alien.width)
        number_aliens_x = available_space_x // (2 * new_alien.width)

        available_space_y = (self.settings.screen_height + (7 * new_alien.height) - self.ship.height)
        number_rows = available_space_y // (2 * new_alien.height)

        for row_number in range(number_rows):
            for n in range(number_aliens_x):
                self.create_alien(n,row_number)
def create_fleet(ai_settings, screen, stats, sb, ship, aliens, alien_bullets,
                 explosions):
    set_dummy_alter_move = False
    # create a "dummy" alien to get its dimensions
    dummy_alien = al.Alien(ai_settings, screen, stats, sb,
                           set_dummy_alter_move, alien_bullets, explosions)
    number_aliens_x = get_number_aliens_x(
        ai_settings,
        dummy_alien.rect.width)  # use those dimensions to find number
    number_rows = get_number_rows(ai_settings, ship.rect.height,
                                  dummy_alien.rect.height)
    # now spawn them
    alter_move = 1  # staggers movement
    for row_number in range(number_rows):
        for alien_number in range(number_aliens_x):
            create_alien(ai_settings, screen, stats, sb, aliens, alien_number,
                         row_number, alter_move, alien_bullets, explosions)
            alter_move *= -1
示例#7
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 17-8-1 下午11:00
# @Author  : Zhangbin
# @Site    : home
# @File    : test.py
# @Software: PyCharm Community Edition
# 为了测试函数使用
import alien

a_alien = alien.Alien(settings, screen)
示例#8
0
def create_alien(screen, number, aliens, rows, set):
    alien_0 = alien.Alien(screen, set)
    alien_0.alien_rect.left = alien_0.alien_rect.width + 2 * alien_0.alien_rect.width * number
    alien_0.alien_rect.top = alien_0.alien_rect.height + 2 * alien_0.alien_rect.height * rows
    aliens.add(alien_0)
示例#9
0
    def update(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.quit = True

            if event.type == pygame.KEYDOWN or event.type == pygame.KEYUP:
                if event.key == pygame.K_ESCAPE:
                    self.quit = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_LEFT:
                    self.rotate_left = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_RIGHT:
                    self.rotate_right = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_UP:
                    self.thrust = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_SPACE:
                    self.fire = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_s:
                    self.spawn = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_n:
                    self.next_level = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_m and event.type == pygame.KEYDOWN:
                    self.music_playing = not self.music_playing
                    self.play_music(self.music_playing)
                elif event.key == pygame.K_p:
                    if event.type == pygame.KEYDOWN:
                        self.show_particles = not self.show_particles
                elif event.key == pygame.K_i:
                    self.info = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_RETURN:
                    self.enter = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_f:
                    if self.player:
                        self.player.shield_on()
            elif event.type == pygame.MOUSEBUTTONDOWN or event.type == pygame.MOUSEBUTTONUP:
                if event.button == 3:
                    self.thrust = event.type == pygame.MOUSEBUTTONDOWN
                elif event.button == 1:
                    self.fire = event.type == pygame.MOUSEBUTTONDOWN

        self.particle.show(self.show_particles)

        x, y = pygame.mouse.get_rel()
        self.rotate_by = x / 5.0

        if self.rotate_left:
            self.rotate_by = -3
        elif self.rotate_right:
            self.rotate_by = 3

        if self.player:
            self.player.thrust(self.thrust)

            if self.fire:
                self.player.fire()

            self.player.rotate_by(self.rotate_by)

        for i in self.sprites:
            i.update()
        self.particle.update()

        self.alien_time -= 1
        if self.alien_time < 0:
            self.alien_time = random.randint(1000, 2000)
            alien.Alien(self)

        if self.player and self.player.kill:
            self.player = None

        self.sprites = [x for x in self.sprites if not x.kill]

        # split the world into a map of 100x100 squares, put a note in each
        # square of each sprite which intersects with that square ... then when
        # we test for collisions, we only need to test against the sprites in
        # that map square

        # 100 is the max radius of the asteroids we make
        map_spacing = 100
        map_width = int(math.ceil(float(self.width) / map_spacing))
        map_height = int(math.ceil(float(self.height) / map_spacing))
        world_map = []
        for x in range(map_width):
            map_row = [[] for y in range(map_height)]
            world_map.append(map_row)

        for i in self.sprites:
            i.tested_collision = False
            x = int(i.position[0] / map_spacing) % map_width
            y = int(i.position[1] / map_spacing) % map_height
            for a in range(x - 1, x + 2):
                for b in range(y - 1, y + 2):
                    world_map[a % map_width][b % map_height].append(i)

        for i in self.sprites:
            x = int(i.position[0] / map_spacing) % map_width
            y = int(i.position[1] / map_spacing) % map_height
            i.test_collisions(world_map[x][y])

            # now we've tested i against everything it could possibly touch,
            # we no longer need to test anything against i
            i.tested_collision = True
示例#10
0
    def update(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.quit = True
            elif event.type == self.SECOND_EVENT:
                self.score = max(self.score - self.settings.time_cost, 0)
            elif event.type == pygame.KEYDOWN or event.type == pygame.KEYUP:
                if event.key == pygame.K_ESCAPE:
                    self.quit = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_s:
                    self.spawn = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_n:
                    self.next_level = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_p:
                    if event.type == pygame.KEYDOWN:
                        self.show_particles = not self.show_particles
                elif event.key == pygame.K_i:
                    self.info = event.type == pygame.KEYDOWN
                elif event.key == pygame.K_RETURN:
                    self.enter = event.type == pygame.KEYDOWN
        self.rotate_left = False
        self.rotate_right = False
        self.thrust = False
        self.fire = False
        if (self.player_driver and self.player):
            state = self.state()
            self.player_driver.write(state)
            command = self.player_driver.read_timeout(
                self.settings.timeout).split()
            if len(command) != 3:
                raise ValueError('All commands are not present')
            turn, thrust, fire = command
            # turn
            #if turn not in ['ccw', 'cw', 'off']:
            #raise ValueError("Turn has unexpected value")
            self.rotate_left = (turn == 'ccw')
            self.rotate_right = (turn == 'cw')
            # thrust
            #if thrust not in ['on', 'off']:
            #raise ValueError("Thrust has unexpected value")
            self.thrust = (thrust == 'on')
            # fire
            self.fire = (fire == 'on')

        self.particle.show(self.show_particles)

        if self.rotate_left:
            self.rotate_by = -3
        elif self.rotate_right:
            self.rotate_by = 3
        else:
            self.rotate_by = 0

        if self.player:
            if self.thrust:
                self.player.thrust()

            if self.fire:
                self.player.fire()

            self.player.rotate_by(self.rotate_by)

        for i in self.sprites:
            i.update()
        self.particle.update()

        self.alien_time -= 1
        if self.alien_time < 0:
            self.alien_time = random.randint(1000, 2000)
            alien.Alien(self)

        if self.player and self.player.kill:
            self.player = None

        self.sprites = [x for x in self.sprites if not x.kill]

        # split the world into a map of 100x100 squares, put a note in each
        # square of each sprite which intersects with that square ... then when
        # we test for collisions, we only need to test against the sprites in
        # that map square

        # 100 is the max size of the asteroids we make
        map_spacing = 100
        map_width = int(math.ceil(float(self.width + 1) / map_spacing))
        map_height = int(math.ceil(float(self.height + 1) / map_spacing))
        world_map = []
        for x in range(map_width):
            map_row = [[] for y in range(map_height)]
            world_map.append(map_row)

        for i in self.sprites:
            i.tested_collision = False
            x = int(i.position[0] / map_spacing)
            y = int(i.position[1] / map_spacing)
            for a in range(x - 1, x + 2):
                for b in range(y - 1, y + 2):
                    world_map[a % map_width][b % map_height].append(i)

        for i in self.sprites:
            x = int(i.position[0] / map_spacing)
            y = int(i.position[1] / map_spacing)
            i.test_collisions(world_map[x][y])

            # now we've tested i against everything it could possibly touch,
            # we no longer need to test anything against i
            i.tested_collision = True
示例#11
0
# player variables
player = rocket.Rocket(100, display_height / 2 - 40)
moving = True
godmode = False

# score variables
score = 0
highscore_file = open('highscore.dat', "r")
highscore_int = int(highscore_file.read())

# enemy rocket variables
enemy_ufo = enemy_ufo.EnemyUfo(-200, display_height / 2 - 40)
enemy_ufo_alive = False

# alien variables
alien = alien.Alien(-200, 400)
alien_alive = False

# spaceship variables
spaceship_x = 800
spaceship_y = random.randint(0, 400)
spaceship_alive = False
spaceship_hit_player = False
warning_once = True
warning = False
warning_counter = 0
warning_message = message_to_screen("!", font, 200, red)

# asteroid variables
asteroid_x = -200
asteroid_y = random.randint(0, 400)
示例#12
0
 def create_alien(self,n,row_number):
     new_alien = alien.Alien(self)
     new_alien.x = new_alien.width + 2 * new_alien.width * n
     new_alien.rect.x = new_alien.x
     new_alien.rect.y = new_alien.rect.height + 2 * new_alien.rect.height * row_number
     self.aliens.add(new_alien)
示例#13
0
def main(winstyle=0):
    # Initialize pygame
    pygame.init()
    if pygame.mixer and not pygame.mixer.get_init():
        print 'Warning, no sound'
        pygame.mixer = None

    # Mdodo de exibicao
    winstyle = 0  #tela
    bestdepth = pygame.display.mode_ok(SCREENRECT.size, winstyle, 32)
    screen = pygame.display.set_mode(SCREENRECT.size, winstyle, bestdepth)

    # Carregamento das imagens


    img = load_image('player1.gif')
    cs.Player.images = [img, pygame.transform.flip(img, 1, 0)]
    img = load_image('explosion1.gif')
    ex.Explosion.images = [img, pygame.transform.flip(img, 1, 1)]
    al.Alien.images = load_images('alien1.gif', 'alien2.gif', 'alien3.gif')
    bm.Bomb.images = [load_image('bomb.gif')]
    ti.Shot.images = [load_image('shot.gif')]


    # decorate the game window
    icon = pygame.transform.scale(cs.Player.images[0], (32, 32))
    pygame.display.set_icon(icon)
    pygame.display.set_caption('PASSAR EM IP OU MORRER')
    pygame.mouse.set_visible(0)

    # Fundo
    bgdtile = load_image('background.gif')
    background = pygame.Surface(SCREENRECT.size)
    for x in range(0, SCREENRECT.width, bgdtile.get_width()):
        background.blit(bgdtile, (x, 0))
    screen.blit(background, (0, 0))
    pygame.display.flip()


    # Carrega os efeitos sonoros
    boom_sound = load_sound('boom.wav')
    shoot_sound = load_sound('car_door.wav')
    if pygame.mixer:
        music = os.path.join('data', 'bg2.mp3')
        pygame.mixer.music.load(music)
        pygame.mixer.music.play(-1)



    # Initialize Game Groups
    aliens = pygame.sprite.Group()
    shots = pygame.sprite.Group()
    bombs = pygame.sprite.Group()
    all = pygame.sprite.RenderUpdates()
    lastalien = pygame.sprite.GroupSingle()

    ####atribuir grupos padrao para cada classe Sprite
    cs.Player.containers = all
    al.Alien.containers = aliens, all, lastalien
    ti.Shot.containers = shots, all
    bm.Bomb.containers = bombs, all
    ex.Explosion.containers = all
    pt.Score.containers = all


    # Criar Alguns valores iniciais
    global Score
    alienreload = ALIEN_RELOAD
    clock = pygame.time.Clock()

    # initialize our starting sprites
    global SCORE
    player = cs.Player()
    al.Alien()
    if pygame.font:
        all.add(pt.Score())

    score = pt.Score()

    while player.alive():



        for event in pygame.event.get():
            if event.type == QUIT or \
                    (event.type == KEYDOWN and event.key == K_ESCAPE):
                return
        keystate = pygame.key.get_pressed()

        all.clear(screen, background)

        all.update()

        # Entrada do jogador

        direction = keystate[K_RIGHT] - keystate[K_LEFT]
        player.move(direction)
        firing = keystate[K_SPACE]
        if not player.reloading and firing and len(shots) < MAX_SHOTS:
            ti.Shot(player.gunpos())
            shoot_sound.play()
        player.reloading = firing

        # Criando novo inimigo
        if alienreload:
            alienreload = alienreload - 1
        elif not int(random.random() * ALIEN_ODDS):
            al.Alien()
            alienreload = ALIEN_RELOAD

        # Soltar bomba
        if lastalien and not int(random.random() * BOMB_ODDS):
            bm.Bomb(lastalien.sprite)


        # detectar colisoes
        for alien in pygame.sprite.spritecollide(player, aliens, 1):
            boom_sound.play()
            ex.Explosion(alien)
            ex.Explosion(player)
            SCORE = SCORE + 1
            print "Game over"
            player.kill()
            pygame.display.delay(3000)


        for alien in pygame.sprite.groupcollide(shots, aliens, 1, 1).keys():
            boom_sound.play()
            ex.Explosion(alien)
            SCORE = SCORE  + 1
            print SCORE



        for bomb in pygame.sprite.spritecollide(player, bombs, 1):
            boom_sound.play()
            ex.Explosion(player)
            ex.Explosion(bomb)
            player.kill()
            print "Game over"
            pygame.display.delay(3000)




        #drawText("Score: %s" % (SCORE),pygame.font.Font(None,50),screen, 0,0,(255,255,255))
        #texts("Score: %s" % (SCORE), screen)
        font=pygame.font.Font(None,30)
        scoretext=font.render("Score: %s" % (SCORE), 1,(255,255,255))
        screen.blit(scoretext, (0, 0))


        # desenhar a cena
        dirty = all.draw(screen)
        pygame.display.update(dirty)

        # cap the framerate
        clock.tick(60)

    if pygame.mixer:
        pygame.mixer.music.fadeout(1000)
    pygame.time.wait(1000)
示例#14
0
	def spawn_alien(self):
		new_alien = alien.Alien(alien_image, window.width, window.height, ship, planet, brains=self.alien_brains, 
			bullet_freq=self.bullet_freq)
		new_alien.reset()
		self.aliens.append(new_alien)