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)
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)
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
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)
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
#!/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)
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)
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
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
# 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)
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)
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)
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)