예제 #1
0
def createAlien(aiSettings, screen, aliens, alienNumber, rowNumber):
		alien = Alien(aiSettings, screen)
		alienWidth = alien.rect.width
		alien.x = alienWidth + 2 * alienWidth * alienNumber
		alien.rect.x = alien.x
		alien.rect.y = alien.rect.height + 2 * alien.rect.height * rowNumber
		aliens.add(alien)
예제 #2
0
def create_an_alien(ai_settings, screen, aliens, row_num, column_num):
    alien = Alien(ai_settings, screen)
    alien_width = alien.rect.width
    alien.x = alien_width + 2 * alien_width * column_num
    alien.rect.x = alien.x
    alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_num
    aliens.add(alien)
예제 #3
0
class TestAlien(unittest.TestCase):
    def setUp(self):
        self.constraint = (1000, 1000)
        self.alien = Alien(self.constraint, 100, 100, Directions.left, 1)

    def test_init_no_params(self):
        alien = Alien(self.constraint)
        self.assertEqual(alien.x, 0)
        self.assertEqual(alien.direction, (1, 0))
        self.assertEqual(alien.kind, 'blue')
        self.assertEqual(alien.health, 100)
        self.assertEqual(alien.image_size, 160)
        self.assertEqual(alien.radius, 65)

    def test_init(self):
        self.assertEqual(self.alien.x, 100)
        self.assertEqual(self.alien.y, 100)
        self.assertEqual(self.alien.direction, Directions.left)
        self.assertEqual(self.alien.kind, 'lion')

    def test_hit(self):
        previous_health = self.alien.health
        self.alien.hit(10)
        self.assertEqual(self.alien.health, previous_health - 10)

    def test_is_dead(self):
        self.assertFalse(self.alien.is_dead())
        self.alien.health = 0
        self.assertTrue(self.alien.is_dead())
def create_alien(ai_settings, screen, aliens, alien_number, row_number):

	"""Create an alien and place it in the row."""

	

	alien = Alien(ai_settings, screen)
	
	alien.check_type()

	alien_width = alien.rect.width

	alien.x = ai_settings.randomint

	alien.rect.x = alien.x

	if alien.randomint1 <= 1:
		alien.rect.y = 694.75
		
	if alien.randomint1 >= 2 and alien.randomint1 < 4:	
		alien.rect.y = 400
		
	if alien.randomint1 >= 4:
		alien.rect.y =140
		
	aliens.add(alien)
예제 #5
0
def alien_battle():
  human = Human()
  alien = Alien()

  print("There is an human in front of you")
  action = input("What will you do run to ship or shot the human? (run / shoot): ")

  while alien.distance > 0 or human.health > 0 or alien.lifeForce > 0:

    if action == "run":
      alien.run()
      human.attack(human)
    elif action == "shoot":
      alien.alienAttack(human)
      human.attack(alien)
      

    if alien.distance == 0:
      print("You made it to the ship!")
      print("The Game is now over!")
      break
    elif human.health == 0:
      print("You killed the human!")
      print("The Game is now over!")
      break
    elif alien.lifeForce == 0:
      print("The human kills you!")
      print("The Game is now over!")
      break

    print("Distance to ship is: " + str(alien.distance) + " feet!")
    print("Human Life is: " + str(human.health))
    print("Alien life is: " + str(alien.lifeForce)) 

    action = input("What will you do run to bunker or shot the human? (run / shoot) ")
예제 #6
0
def create_alien(ai_settings, screen, aliens, alien_number, row_number):
	"""Create an alien and place it in the row."""
	alien = Alien(ai_settings, screen)
	alien.x = alien.rect.width+2*alien.rect.width*alien_number
	alien.rect.x = alien.x
	alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
	aliens.add(alien)
예제 #7
0
def create_alien(ai_settings,screen,aliens,alien_number,row_number):
    alien = Alien(ai_settings,screen)
    alien_width = alien.rect.width
    alien.x = alien_width + 2*alien_width*alien_number
    alien.rect.x = alien.x
    alien.rect.y = alien.rect.height + 2*alien.rect.height*row_number
    aliens.add(alien)
def create_alien(ai_settings, screen, aliens, alien_number, row_number):
    """Utworzenie obcego i umieszczenie go w rzędzie."""
    alien = Alien(ai_settings, screen)
    alien_width = alien.rect.width
    alien.x = alien_width + 2 * alien_width * alien_number
    alien.rect.x = alien.x
    alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
    aliens.add(alien)
예제 #9
0
def create_alien(ai_settings, screen, aliens, alien_number, row_number):
	"""create an alien and place it in the row"""
	# create an alien and find the number of aliens in a row
	# spacing between each alien is equal to one alien width
	alien = Alien(ai_settings, screen)
	alien_width = alien.rect.width
	alien.x = alien_width + 2 * alien_width * alien_number
	alien.rect.x = alien.x
	alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
	aliens.add(alien)
예제 #10
0
def create_alien(ai_settings, screen, aliens, alien_number, row_number):
	# 创建一个外星人并将其加入当前行
	alien = Alien(ai_settings,screen)
	alien_width = alien.rect.width
	# 算当前外星人的x
	alien.x = alien_width + alien_width * 2 * alien_number
	alien.rect.x = alien.x
	# 根据第几行 计算y
	alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
	aliens.add(alien)
예제 #11
0
def create_alien(ai_settings, screen, aliens, alien_number, row_number):
    """Create an alien, and place it in the row."""
    alien = Alien(ai_settings, screen)
    alien_width = alien.rect.width
    alien.x = alien_width + 2 * alien_width * alien_number
    alien.rect.x = alien.x
    alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
    aliens.add(alien)

    if alien_number == 0 or alien_number == 2 or alien_number == 4 or alien_number == 6 or alien_number == 8:
        alien.image =  pygame.image.load('images/alien.bmp')
예제 #12
0
def create_fleet(ai_settings, screen, aliens):
    """Create a full of aliens."""
    # Create a full fleet of aliens.
    # Spacing between each alien is equal to one alien width.
    alien = Alien(ai_settings, screen)
    alien_width = alien.rect.width
    available_space_x = ai_settings.screen_width - 2 * alien_width
    number_aliens_x = int(available_space_x/ (2 * alien_width))


    # Create the first row of aliens.
    for alien_number in range(number_aliens_x):
        # Create an alien and place it in the row.
        alien = Alien(ai_settings, screen)
        alien.x = alien_width + 2 * alien_width * alien_number
        alien.rect.x = alien.x
        aliens.add(alien)
예제 #13
0
def create_fleet(ai_settings, screen, aliens):

    """创建外星人群"""
    # 创建一个外星人, 并计算一行可容纳多少个外星人
    # 外星人间距为外星人宽度
    alien = Alien(ai_settings, screen)
    alien_width = alien.rect.width
    available_space_x = ai_settings.screen_width - 2*alien_width
    number_aliens_x = int(available_space_x/(2*alien_width))

    # 创建第一个外星人
    for alien_number in range(number_aliens_x + 1):
        # 创建一个外星人并将其加入当前行
        alien = Alien(ai_settings, screen)
        alien.x = alien_width + 2 * alien_width * alien_number
        alien.rect.x = alien.x
        aliens.add(alien)
예제 #14
0
def create_alien(settings, screen, aliens, index, row_number):
    alien = Alien(settings, screen)
    alien.x = alien.rect.width + 0 if index == 0 else 1 * alien.rect.width * index
    alien.rect.x = alien.x
    alien.rect.y = alien.rect.height + 1 * alien.rect.height * row_number
    aliens.add(alien)
예제 #15
0
def create_alien(settings, screen, alien_number, aliens):
    alien = Alien(settings, screen)
    alien.x = alien.rect.width + 2 * alien.rect.width * alien_number
    alien.rect.x = alien.x
    aliens.add(alien)
예제 #16
0
def create_alien(ai_settings, screen, aliens, alien_number):
    alien = Alien(ai_settings, screen)
    alien_width = alien.rect.width
    alien.x = alien_width + 2 * alien_width * alien_number
    alien.rect.x = alien.x
    aliens.add(alien)
예제 #17
0
def create_fleet(ai_settings,screen,ship,aliens):
 """创建外星人群"""
 #创建一个外星人,并计算一行可以容纳多少个外星人
 #外星人间距为外星人宽度
 alien = Alien(ai_settings,screen)
 number_aliens_x = get_number_aliens_x(ai_settings,alien.rect.width)
 number_rows = get_number_rows(ai_settings,ship.rect.height,alien.rect.height)
  
 #创建第一行外星人
 for row_number in range(number_rows):
 for alien_number in range(number_aliens_x):
  #创建一个外星人并将其加入当前行
  create_aliens(ai_settings,screen,aliens,alien_number,row_number)
  
def check_fleet_edges(ai_settings,aliens):
 """有外星人到达边缘时采取相应措施"""
 for alien in aliens.sprites():
 if alien.check_edges():
  change_fleet_direction(ai_settings,aliens)
  break
  
def change_fleet_direction(ai_settings,aliens):
 """将整群外星人下移,并改变他们的运动方向"""
 for alien in aliens.sprites():
 alien.rect.y += ai_settings.fleet_drop_speed
 ai_settings.fleet_direction *= -1
 
def ship_hit(ai_settings,stats,screen,sb,ship,aliens,bullets):
 """响应被外星人撞到的飞船"""
 if stats.ships_left > 0:
 #将ship_left减1
 stats.ships_left -= 1
  
 #更新记分牌
 sb.prep_ships()
  
 #清空外星人列表和子弹列表
 aliens.empty()
 bullets.empty()
 #创建一群新的外星人,并将飞船放到屏幕低端中央
 create_fleet(ai_settings,screen,ship,aliens)
 ship.center_ship()
 #暂停
 sleep(0.5)
 else:
 stats.game_active = False
 pygame.mouse.set_visible(True)
 
def check_aliens_bottom(ai_settings,stats,screen,sb,ship,aliens,bullets):
 """检查是否有外星人到达屏幕低端"""
 screen_rect = screen.get_rect()
 for alien in aliens.sprites():
 if alien.rect.bottom >= screen_rect.bottom:
  #像飞船被撞到一样进行处理
  ship_hit(ai_settings,stats,screen,sb,ship,aliens,bullets)
  break
 
   
def update_aliens(ai_settings,stats,screen,sb,ship,aliens,bullets):
 """更新外星人群中所有外星人的位置"""
 check_fleet_edges(ai_settings,aliens)
 aliens.update()
 #检测外星人和飞船之间的碰撞
 if pygame.sprite.spritecollideany(ship,aliens):
 ship_hit(ai_settings,stats,screen,sb,ship,aliens,bullets)
 #检查是否有外星人到达屏幕低端
 check_aliens_bottom(ai_settings,stats,screen,sb,ship,aliens,bullets)
 
def check_high_score(stats,sb):
 """检查是否诞生了新的最高纪录"""
 if stats.score > stats.high_score:
 stats.high_score = stats.score
 sb.prep_high_score() 
예제 #18
0
def get_number_aliens_x(settings, screen):
    alien = Alien(settings, screen)
    alien_width = alien.rect.width
    avaliable_space_x = settings.screen_width - 2 * alien_width
    number_aliens_x = int(avaliable_space_x / (2 * alien_width))
    return number_aliens_x
예제 #19
0
    def _creat_fleet(self):
        if self.status.level % 10 == 0:
            #print(self.status.level)
            self.alien_boss.reset()
            boss = self.alien_boss
            self.aliens.add(boss)
            self.isboss_flag = True
            return

        new_ufo = Alien(self)
        new_ufo_width = new_ufo.rect.width
        new_ufo_height = new_ufo.rect.height
        available_space_x = self.settings.width - new_ufo_width * 2
        available_space_y = self.settings.height - new_ufo_height * 2 - self.ship.height * 3
        numbers_ufo_x = available_space_x // (2 * new_ufo_width)
        numbers_ufo_y = int(
            (available_space_y - self.ship.rect.height) / (2 * new_ufo_height))
        for j in range(numbers_ufo_y):
            for i in range(numbers_ufo_x):
                ufo = Alien(self)  #创建一排ufo
                if self.status.level < 10:
                    if random.random() > self.status.level / 10:
                        ufo.set_contribution()
                    else:
                        ufo.set_contribution(2)
                else:
                    if random.random() > (self.status.level - 10) / 10:
                        ufo.set_contribution(2)
                    else:
                        ufo.set_contribution(3)

                ufo.rect.x = (1 + i * 2) * new_ufo_width
                ufo.x = ufo.rect.x
                ufo.rect.y = (2 * j) * new_ufo_height
                ufo.y = ufo.rect.y

                self.aliens.add(ufo)  #end
예제 #20
0
 def _create_alien(self):
     """Creating an alien"""
     for alien in range(9):
         alien = Alien(self)
         self.aliens.add(alien)
def create_alien(ai_settings,screen,aliens,alien_number,number_rows,alien_height,alien_width):
    alien=Alien(ai_settings,screen)
    alien.rect.x=alien_width+2*alien_width*alien_number
    alien.rect.y=alien_height+alien_height*2*number_rows
    aliens.add(alien)
def get_num_aliens(ai_settings, screen):
    alien_width = Alien(ai_settings).rect.width
    available_screen_width = ai_settings.screen_width - (2 * alien_width)
    return int(available_screen_width / (2 * alien_width))
예제 #23
0
    def _create_fleet(self):
        """Create the fleet of aliens."""
        # Create an alien and find the number of aliens in a row.
        # Spacing between each alien is equal to one alien width.
        alien = Alien(self)
        alien_width, alien height = alien.rect.size
        available_space_x = self.settings.screen_width - (2 * alien_width)
        number_aliens_x = available_space_x // (2 * alien_width)

        #Determine the number of rows of aliens that fit on the screen.
        ship_height = self.ship.rect.height
        available_space_y = (self.settings.screen_height -
                                (3 * alien_height) - ship_height)
        number_rows = available_space_y // (2 * alien_height)

        #Create the full fleet of aliens.
        for row_number in range(number_rows):
        # Create the first row of aliens.
        for alien_number in range(number_aliens_x):
            # Create an alien and place it in the row.
            self._create_alien(alien_number, row_number)
    def _create_alien(self, alien_number, row_number):
        """Create an alien and place it in the row."""
        alien = Alien(self)
        alien_width, alien_height = alien.rect.size
        alien.x = alien_width + 2 * alien_width * alien_number
        alien.rect.x = alien.x
        alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
        self.aliens.add(alien)

    def _update_aliens(self):
        """Check if the fleet is at an edge, then
        update the positions of all aliens in the fleet."""
        self._check_fleet_edges()
        self.aliens.update()
        #Look for alien-ship collisions.
        if pygame.sprite.spritecollideany(self.ship, self.aliens):
            self._ship_hit()
        #Look for aliens hitting the bottom of the screen.
        self._check_aliens_bottom()

    def _ship_hit(self):
        """Respond to the ship being hit by an alien."""
        if self.stats.ships_left > 0:
            # Decrement ships_left, and update scoreboard.
            self.stats.ships_left -=1
            self.sb.prep_ships()

            #Get rid of any remaining aliens and bullets.
            self.aliens.empty()
            self.bullets.empty()

            #Create a new fleet and center the ship.
            self._create_fleet()
            self.ship.center_ship()

            #pause
            sleep(0.5)
        else:
            self.stats.game_active = False
            pygame.mouse.set_visible(True)

    def _check_fleet_edges(self):
        """Respond appropriately if any aliens have reached an edge."""
        for alien in self.aliens.sprites():
            if alien.check_edges():
                self._change_fleet_direction()
                break
        
    def _change_fleet_direction(self):
        """Drop the entire fleet and change the fleet's direction."""
        for alien in self.aliens.sprites():
            alien.rect.y += self.settings.fleet_drop_speed
        self.settings.fleet_direction *= -1

    def _check_aliens_bottom(self):
        """Check if any aliens have rached the bottom of the screen."""
        screen_rect = self.screen.get_rect()
        for alien in self.aliens.sprites():
            if alien.rect.bottom >= screen_rect.bottom:
                # Treat this the same as if the ship got hit.
                self._ship_hit()
                break
예제 #24
0
def create_fleet(ai_settings, screen, ship,aliens):
    alien = Alien (ai_settings, screen)
    number_aliens_x = get_number_aliens_x(ai_settings,alien.rect.width)
    alien_width = alien.rect.alien_width
    number_rows = get_number_rows(ai_settings,ship.rect.height,alien.rect.height)
    def _update_bullets(self):
        self.bullets.update()
        for bullet in self.bullets.copy():
            if bullet.rect.bottom <= 0:
                self.bullets.remove(bullet)

    def _create_fleet(self):
        alien = Alien(self)
        alien_width = alien.rect.width
        available_space_x = self.settings.screen_width - (2 * alien_width)
        number_aliens_x = available_space_x // (2 * alien_width)
        for alien_number in range(number_aliens_x):
            self._create_alien(alien_number)
    def _create_alien(self, alien_number)
            alien = Alien(self)
            alien.x = alien_width + 2 * alien_width * alien_number
            alien.rect.x = alien.x
            self.aliens.add(alien)

    def _update_screen(self):
        self.screen.fill(self.settings.bg_color)
        self.ship.blitme()
        for bullet in self.bullets.sprites():
            bullet.draw_bullet()
        
        self.aliens.draw(self.screen)
        pygame.display.flip()

if __name__ == '__main__':
    ai = AlienInvasion()
def create_fleet(ai_settings, screen, aliens):
    #创建外星人群
    for alien_number in range(random.randint(1, 10)):
        alien = Alien(ai_settings, screen)
        aliens.add(alien)
예제 #27
0
def get_aliens(aliens, number):
    for n in range(number):
        if len(aliens) <= s.alien_sum:
            aliens.add(Alien())
예제 #28
0
def run_game():
    """used this to create a pyhton game window and respond to user interface"""
    # initialize game and create a screen object
    pygame.init()
    ai_settings = Settings()

    #earlier we passed the dimensions of the screen size directly but now we will pass the dimensions variable
    # in which the dimension is stored in another file

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

    play_button = Button(ai_settings, screen, "Play")
    #we create a play button and pass it further to update screen

    #create an instance to store game statistics.
    stats = GameStats(ai_settings)
    #creating an instance to store game statistics and create a scoreboard
    sb = Scoreboard(ai_settings, screen, stats)

    bg_color = (230, 230, 230)

    #making a ship
    ship = Ship(ai_settings, screen)

    #make a group to store bullets in. it is masde outside the loop
    # so that each time new group is not created and the program does
    # not becomes slow
    bullets = Group()

    #make a group of aliens
    aliens = Group()
    #create a fleet of aliens.
    gf.create_fleet(ai_settings, screen, ship, aliens)

    #earlier we passed the value of the color from here directly but now we have created a variable for that
    # which store the color in it in the file settings
    #makes the ALIENS
    alien = Alien(ai_settings, screen)
    # start main loop for the game

    while True:
        # earlier the watch for mouse and key events was from here but
        # now we have created another module for that

        gf.check_events(ai_settings, screen, stats, sb, play_button, ship,
                        aliens, bullets)

        if stats.game_active:
            #this loop is used when we want the code to run only when
            # game is active i.e. the user has ships remaining with him
            ship.update()
            gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens,
                              bullets)
            # did above code to make main file minimalistic
            gf.update_aliens(ai_settings, screen, stats, sb, ship, aliens,
                             bullets)
            # updating the position of each alien along with passing the
            # parameter for finding it the alien is at the edge
            # all the arguments in the update_aliens above will be used to
            # track the no. of ships left with the player once alien hits the ship

        gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets,
                         play_button)
        #it contains the attributes which will be updated along with the screen

        #redraws the screen through each pass through of the loop
        #meaning it will fill the screen using the function used in the next line of code
        #we have now passed the variable for the color rather than passing the color

        screen.fill(ai_settings.bg_color)

        ship.blitme()
        #used to draw the loaded ship on the foreground once the background has been drawn
        alien.blitme()
        #used to draw the loaded alien on the foreground once the background has been loaded
        # make the most recently drawn screen visible.
        pygame.display.flip()
예제 #29
0
 def _create_fleet(self):
     """create thefleet of aliens."""
     # make an alien
     alien = Alien(self)
     self.aliens.add(alien)
예제 #30
0
def create_alien(setting , screen , aliens , alien_num , alien_width  , row_number):
	alien = Alien(setting , screen)
	alien.x = alien_width + 2 * alien_width * alien_num
	alien.rect.x = alien.x
	alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
	aliens.add(alien)
def game():
    hallabol = False
    merinaav = meraantrikshyaan(310, 660, 80, 30)

    bullets = []
    bullets2 = []
    num_bullet = 0
    num_bullet2 =0

    for i in range(num_bullet2):
        i = missile2(345,650)
        bullets2.append(i)

    for i in range(num_bullet):
        i = missile(345, 650)
        bullets.append(i)

    x_move = 0

    aliens = []
    kitnealienthe = random.randint(1,9)

    global outputaliens
    outputaliens = kitnealienthe
    
    for i in range(1):
        tmp = random.randint(0,5)
        ali = Alien((tmp+1)*50 + tmp*20,70, 50)
        aliens.append(ali)

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

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_q:
                    GameOver()
                    pygame.display.update()
                    time.sleep(5)
                    hallabol = True
                   

                if event.key == pygame.K_d:
                    x_move = 8

                if event.key == pygame.K_a:
                    x_move = -8

                if event.key == pygame.K_SPACE:
                    num_bullet += 1
                    i = missile(merinaav.x + 35, merinaav.y)
                    bullets.append(i)

                if event.key == pygame.K_s:
                	num_bullet2 +=1
                	i = missile2(merinaav.x + 35, merinaav.y)
                	bullets2.append(i)

            if event.type == pygame.KEYUP:
                x_move = 0

        display.fill((8,8,8))

        for i in range(num_bullet):
            bullets[i].draw()
            bullets[i].move()


        for i in range(num_bullet2):
        	bullets2[i].draw()
        	bullets2[i].move()

        for alien in aliens:
            if alien.willdie == 0:
                alien.draw()
            else:
                alien.draw2()

            for item in bullets:
                if item.hit(alien.x, alien.y, alien.d):
                    bullets.remove(item)
                    num_bullet -= 1
                    global hit
                    hit +=1
                    # print 'hitting'
                    aliens.remove(alien)
                    kitnealienthe -= 1
            for item in bullets2:
                if item.hit(alien.x, alien.y, alien.d):
                    bullets2.remove(item)
                    num_bullet2 -= 1
                    alien.dieinfive()
                    alien.draw2()
                    # print 'hitting'
                    isincrement=alien.visitonlyonce()
                    if isincrement:
                        hit += 1
                    
                    # kitnealienthe -= 1 #added at last toh check pehle                    

        

        for alien in aliens:
            canikill = alien.iskillalien()
            if canikill:
                kitnealienthe -= 1
                aliens.remove(alien)
                # print 'hitting'
                # hit+=1
                

        checkche = check()
        if checkche:
            tmp = random.randint(0,5)
            ali = Alien((tmp+1)*50 + tmp*20,70, 50)
            aliens.append(ali)
            kitnealienthe  += 1            

        merinaav.x += x_move

        if merinaav.x < 0:
            merinaav.x -= x_move
        if merinaav.x + 80 > 700:
            merinaav.x -= x_move

        merinaav.draw()

        pygame.display.update()
        clock.tick(60)
예제 #32
0
 def _create_fleet(self):
     alien = Alien(self)
     self.aliens.add(alien)
예제 #33
0
 def _create_alien(self, alien_number):
     alien = Alien(self)
     alien_width = alien.rect.width
     alien.x = (alien_number * alien_width * 2) + alien_width
     alien.rect.x = alien.x
     self.aliens.add(alien)
예제 #34
0
def generator(ai_settings, screen):
    alien = Alien(ai_settings, screen)
    number_aliens_x = get_number_aliens_x(ai_settings, alien.rect.width)
    return randint(-number_aliens_x, number_aliens_x)
예제 #35
0
 def _spawn_enemy(self):
     """Spawns enemies randomly from the right side of the screen"""
     alien = Alien(self)
     alien_width = alien.rect.width
     alien.x = self.screen_width
     self.aliens.add(alien)
예제 #36
0
def create_alien(ai_settings, screen, aliens):
    alien = Alien(ai_settings, screen)
    alien.x = random.choice(range(200, 300, 30))
    alien.rect.x = alien.x
    aliens.add(alien)
예제 #37
0
    def _create_fleet(self):
        """Create the fleet of alien ships."""

        # Make an alien.
        alien = Alien(self)
        self.aliens.add(alien)
예제 #38
0
 def setUp(self):
     self.constraint = (1000, 1000)
     self.alien = Alien(self.constraint, 100, 100, Directions.left, 1)
예제 #39
0
def create_fleet(ai_settings,screen,stats,aliens):
    '''创建外星人群'''
    alien = Alien(ai_settings,screen)
    aliens.add(alien)
    stats.generate_alien_number += 1
예제 #40
0
def create_alien(ai_settings, screen, alien_number, alien_width):
    alien = Alien(ai_settings, screen, ai_settings.sideways_shooter)
    alien.x = (alien_number * 2 * alien_width) + alien_width
    alien.rect.x = alien.x
    return alien
예제 #41
0
 def _create_alien(self, alien_numbers, rows):
     alien = Alien(self)
     alien_width, alien_height = alien.rect.size
     alien.rect.x = alien.x = alien_width + 2 * alien_width * alien_numbers
     alien.rect.y = alien.rect.height + 2 * alien_height * rows
     self.aliens.add(alien)
예제 #42
0
    def loop(self):
        count = 0
        while 1:
            count = (count+1)%50
            self.clock.tick(25)

            #handle input events
            ok = self.handle_keys()
            if ok == False:
                return

            if self.game_started == False:
                start_text = self.font.render('Press any key to start', 2, (0,0,0))
                self.screen.blit(start_text, (150, 200))
                pygame.display.flip()
                continue

            if self.game_paused == 1:
                start_text = self.font.render('Game paused', 2, (255,255,255))
                self.screen.blit(start_text, (150, 200))
                pygame.display.flip()
                continue

            new_enemies = self.level.getenemies() 

            for enemy_y in new_enemies:
                #if random.randint(0,50) == 0:
                alien = Alien(enemy_y)
                alien.set_target(self.ship)
                self.enemies.add(alien)

            #aliens damaging the player, remove them
            damage  = pygame.sprite.spritecollide(self.ship, self.enemies, True)

            self.process_powerups()

            #check colisions with stage
            if self.level.checkcollide(self.ship.rect):
                #add some fancy explosions in the damage area
                self.explosions.add(Explosion(pygame.Rect(self.ship.rect.x,self.ship.rect.y,0,0)))
                damage.append(1)

            #Apply damages to the player
            if len(damage) > 0:
                self.background.warning()
                self.ship.damage()
                self.lifemeter.shake()
                self.explosions.add(Explosion(self.ship.rect))
                self.sounds['warning'].play()
                self.lifemeter.life = self.ship.life
                if self.lifemeter.life < 1:
                    self.game_finished = True
                    self.sounds['warning'].stop()

            #print (pygame.sprite.spritecollide(ship, level, True))

            #aliens hit by the fire, remove them
            penetration = self.ship.powerup['penetrate']
            for fireball in self.fire:
                hit = pygame.sprite.spritecollide(fireball, self.enemies, True)
                for dead in hit:
                    if dead.has_powerup():
                        powerup = Powerup(dead.rect, dead.value)
                        self.powerups.add(powerup)
                    self.explosions.add(Explosion(pygame.Rect(dead.rect.x,dead.rect.y,0,0)))
                    self.score+=dead.value*1000
                    if penetration == False:
                        fireball.kill()

            #draw the level

            all_sprites = pygame.sprite.Group()
            all_sprites.add(self.player.sprites())
            all_sprites.add(self.enemies.sprites())
            all_sprites.add(self.powerups.sprites())
            all_sprites.add(self.fire.sprites())
            all_sprites.add(self.hud.sprites())
            all_sprites.add(self.explosions.sprites())
            all_sprites.update()
            self.level.update()
            self.background.update()

            #Move and draw the background

            score_text = 'Score: {0}'.format((self.score))

            text = self.font.render(score_text, 1, (255, 255, 255))
            text_shadow = self.font.render(score_text, 1, (0,0,0))

            self.screen.blit(self.background, (0, 0))
            self.screen.blit(self.level, (0, 0))
            self.screen.blit(text_shadow, (12, 12))
            self.screen.blit(text, (10, 10))

            if self.game_finished == True:
                gameover_text = self.font.render("Game Over", 2, (255, 255, 255))
                self.screen.blit(gameover_text, (280, 200))
                gameover_text = self.font.render("Press Esc", 2, (255, 255, 255))
                self.screen.blit(gameover_text, (280, 230))
            else:
                all_sprites.draw(self.screen)

            #draw all the groups of sprites

            pygame.display.flip()
예제 #43
0
 def _create_alien(self, alien_number):
     alien = Alien(self)
     alien.x = alien_width + 2 * alien_width * alien_number
     alien.rect.x = alien.x
     self.aliens.add(alien)
def get_num_rows(ai_settings, ship_height):
    alien_height = Alien(ai_settings).rect.height
    avail_screen_height = (ai_settings.screen_height -
                           (ship_height + alien_height * 3))
    return int(avail_screen_height / (alien_height * 2))
예제 #45
0
def get_number_aliens_x(setting, screen):
    alien = Alien(setting, screen)
    alien_border = alien.rect.width * 2
    alien_space = setting.screen_width - alien_border
    alien_number = int(alien_space / (2 * alien.rect.width))
    return alien_number