Exemplo n.º 1
0
class GameTestController001:
    def __init__(self, display: Surface, event_system: EventSystem,
                 images_loader: ImagesLoader):

        self.__display = display
        self.__event_system = event_system

        self.__background = images_loader.smoothscale(
            images_loader.load_surface(
                os.path.join('backgrounds', 'stars_blue.png')),
            self.__display.get_size())
        self.__display.blit(self.__background, (0, 0))

        player = build_player_ship(self.__display.get_rect().center, (0, 0),
                                   10, self.__event_system, images_loader)
        self.__player_group = GroupSingle(player)
        self.__sprites_group = Group(player)

    def process_events(self):

        self.__event_system.update()

    def update(self):

        self.__sprites_group.update()
        self.__player_group.sprite.rect.clamp_ip(self.__display.get_rect())

    def render_frame(self):

        self.__sprites_group.clear(self.__display, self.__background)
        self.__sprites_group.draw(self.__display)
Exemplo n.º 2
0
class Panel:
	def __init__(self, world_map):
		self.world_map = world_map
		self.group = Group()
		self.energy_bar = EnergyBar(world_map.main_character, 15, 10, self.group)
		self.energy_bar.put(75, 13)
		self.energy_bar = LifeBar(world_map.main_character, 15, 10, self.group)
		self.energy_bar.put(75, 30)
		
		self.rect = Rect(0, 0, SCREEN_W, 40)
		self.background = data.load_image('panel.png')
		font = Font(data.filepath('fonts', 'vera.ttf'), 12)
		#font.set_bold(True)
		self.twister_text = font.render("Twister:", True, (0,0,0))
		self.life_text = font.render("Life:", True, (0,0,0))
		self.world_text = font.render("World: %s" % world_map.name, True, (0,0,0))
		
		class TimeText(Sprite):
			def __init__(self, world_map, *groups):
				Sprite.__init__(self, *groups)
				self.world_map = world_map
			def update(self, *args):
				time = self.world_map.time
				time_str = self.world_map.get_time()
				if time < 60:
					color = (170, 0, 0)
				elif time < 120:
					color = (255, 100, 0)
				else:
					color = (0, 0, 0) 
				self.image = font.render("Time: %s"% time_str , True, color)
				self.rect = self.image.get_rect()
				self.rect.move_ip(500, 0)
				
		TimeText(world_map, self.group)
		self.key = KeyItem(world_map)
		self.key.put(620, 20)
		self.key.remove(self.key.groups())
		
		
	def draw(self, screen):
		if self.world_map.got_key:
			self.key.add(self.group)
		screen.set_clip(self.rect)
		self.group.clear(screen, self.background)
		self.group.update()
		self.group.draw(screen)
		
	def draw_background(self, screen):
		screen.blit(self.background, (0,0))
		screen.blit(self.twister_text, (10, 0))
		screen.blit(self.life_text, (10, 17))
		screen.blit(self.world_text, (500, 17))
Exemplo n.º 3
0
class StatefulBoardElement:
    def __init__(self, default_value, get_value, render):
        self.value = copy.copy(default_value)
        self.get_value = get_value
        self.render = render
        self.rendered = Group()

    def notify(self, surface, background):
        if self.value != self.get_value():
            self.rendered.clear(surface, background)
            self.value = copy.copy(self.get_value())
            self.rendered = self.render()

    def force_render(self):
        self.rendered = self.render()

    def draw(self, surface, background):
        self.rendered.clear(surface, background)
        self.rendered.draw(surface)

    def update(self, callback_handler=None):
        self.rendered.update(callback_handler)
Exemplo n.º 4
0
    for e in event.get():
        if e.type == QUIT:
            done = True
        elif e.type == KEYDOWN:
            if e.key == K_ESCAPE:
                done = True
            elif e.unicode == u'r':
                generation = randint(0,500)
                index = randint(0,10000)
                while not personat(generation, index):
                    index += 1
                describeperson(generation, index)
                
        elif e.type == MOUSEBUTTONDOWN and e.button == 1:
            for sprite in sprites:
                if sprite.rect.collidepoint(e.pos) and sprite.exists:
                    generation = sprite.rect.left / 8
                    index = sprite.rect.top / 8

                    describeperson(generation, index)
                    
                    break

    sprites.update()
    sprites.clear(screen, background)
    sprites.draw(screen)
    
    display.flip()

    limit.tick(20)
Exemplo n.º 5
0
    particles = Group()
    events.create_gas(settings, screen, particles, wall)

    #Sets clock (used for fixed FPS) and timer (used to count collision rate)
    clock = pygame.time.Clock()
    pygame.time.set_timer(pygame.USEREVENT + 1, 1000)

    info = Info(settings, screen)
    info.prep_collisions()

    keepGoing = True
    while keepGoing:
        clock.tick(30) #30 FPS

        events.check_events(screen, settings, particles, info, wall)
        particles.clear(screen, background)

        for particle in particles:
            particle.update(wall) #updates vel and pos
            if particle.collision:
                info.collision_rate += 1
                particle.collision = False

        screen.fill(settings.bg_color) #cleans screen
        particles.draw(screen)
        wall.draw(screen)

        info.prep(wall, total_kinetic_energy(particles), len(particles))
        info.show()

        pygame.display.flip()
Exemplo n.º 6
0
    def run_game():
        global ch, dobollet, t, bulets, t2
        forrand = 1000
        pygame.init()
        pygame.joystick.init()
        joysticks = [
            pygame.joystick.Joystick(x)
            for x in range(pygame.joystick.get_count())
        ]
        for joystick in joysticks:
            joystick.init()
        ai_settings = Settings()
        screen = pygame.display.set_mode(
            (ai_settings.screen_width, ai_settings.screen_height))
        pygame.display.set_caption('Alien Invasion')
        ship = Ship(ai_settings, screen)
        ship2 = Ship(ai_settings, screen)
        bullets = Group()
        aliens = Group()
        ships = Group()

        ships.add(ship)
        ships2 = Group()
        ships2.add(ship2)
        blocks = Group()
        cu = 1
        cd = 1
        cr = 1

        moneys = 0
        cl = 1
        cu2 = 1
        cd2 = 1
        cr2 = 1
        ship.y -= 47
        ship.rect.y = ship.y
        moneys = 0
        cl2 = 1
        tank = 0
        fuster = 1
        poweraps = Group()
        updatenow = 0
        bezero = 0
        die_blocks = Group()
        tr = '[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,0,0,0,0,0,1,4,0,3,3,3,0,7,0,1,1,1,1,2,1,0,0,0,0,0,0,1,4,7,6,3,0,0,1,0,0,0,0,0,1,2,1,0,0,1,0,0,0,1,4,4,3,3,0,1,0,0,1,0,0,1,2,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,7,7,6,0,1,2,1,0,0,1,0,0,4,1,0,0,0,1,0,0,0,0,1,0,0,1,2,1,0,0,0,0,0,4,1,0,7,6,6,0,1,0,3,0,4,3,0,0,1,2,1,0,4,0,7,7,4,0,0,0,3,1,0,3,0,0,0,0,0,1,2,1,0,4,1,7,7,4,1,4,4,0,1,1,1,1,1,1,0,4,1,2,1,3,4,3,1,7,7,1,1,7,7,7,7,7,7,7,0,0,0,1,2,1,3,4,3,1,7,7,7,7,6,7,7,7,6,7,7,7,7,0,0,0,1,2,1,3,4,3,1,1,7,7,1,1,1,1,1,7,7,7,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1'
        filename = 'level_5.txt'
        #        t = []

        ht = 3
        ht2 = 3
        htbullets = Group()

        alienbullets = Group()
        nothing = Group()
        score = 0

        jkd = Group()
        t2 = 1
        do_liberint(pygame, Block, blocks, ai_settings, screen, filename,
                    warrior, aliens, poweraps)
        for power in poweraps.sprites():
            power.image = pygame.image.load('bomb.gif')

        joycon.set_player_lamp_flashing(1)
        joycon2.set_player_lamp_flashing(2)
        bg_color = (20, 260, 200)
        invis = 0

        ships.add(ship)
        i1 = 0
        i2 = 0
        innothing = Group()

        ships2.add(ship2)

        shoot = pygame.mixer.Sound('07 - Metal Man.mp3')
        shoot.play(-1)
        collision = pygame.sprite.groupcollide(ships, blocks, false, True)
        collision = pygame.sprite.groupcollide(ships2, blocks, False, True)
        collision = pygame.sprite.groupcollide(ships, aliens, false, True)
        collision = pygame.sprite.groupcollide(ships2, aliens, False, True)

        collision = pygame.sprite.groupcollide(aliens, blocks, false, True)

        # shoot = mixer.Sound("C:\windows\media\Ring02.wav")
        # #C:\windows\downloads\
        timer = 5
        while True:
            pygame.time.wait(timer)
            screen.fill(ai_settings.bg_color)
            isstickbut = joycon.stick_r_btn
            isstickmove = joycon.stick_r

            if isstickmove[1] > 2000:

                ship.rect.x += 3
                if pygame.sprite.spritecollideany(ship, blocks):
                    ship.rect.x -= 3
                t = 2
                #('up')
            elif isstickmove[1] < 1000:
                #ship.y += 3
                #('down')
                ship.rect.x -= 3
                if pygame.sprite.spritecollideany(ship, blocks):
                    ship.rect.x += 3
                t = 3

            elif isstickmove[0] > 3000:
                #ship.x += 3
                #('r')
                ship.rect.y += 3
                if pygame.sprite.spritecollideany(ship, blocks):
                    ship.rect.y -= 3
                t = 1
            elif isstickmove[0] < 1000:
                #ship.x -= 3
                #('l')
                t = 0
                ship.rect.y -= 3
                if pygame.sprite.spritecollideany(ship, blocks):
                    ship.rect.y += 3

            isstickbut = joycon2.stick_l_btn
            isstickmove = joycon2.stick_l

            if isstickmove[1] > 3000:

                ship2.rect.x -= 3
                t2 = 3
                if pygame.sprite.spritecollideany(ship2, blocks):
                    ship2.rect.x += 3
                #('up')
            elif isstickmove[1] < 2000:
                #ship.y += 3
                #('down')
                t2 = 2
                ship2.rect.x += 3
                if pygame.sprite.spritecollideany(ship2, blocks):
                    ship2.rect.x -= 3

            elif isstickmove[0] > 3000:
                #ship.x += 3
                #('r')
                ship2.rect.y -= 3
                t2 = 0

                if pygame.sprite.spritecollideany(ship2, blocks):
                    ship2.rect.y += 3
            elif isstickmove[0] < 1600:
                #ship.x -= 3
                #('l')
                t2 = 1
                ship2.rect.y += 3
                if pygame.sprite.spritecollideany(ship2, blocks):
                    ship2.rect.y -= 3  # isstickmove=joycon2.stick_l
            # if isstickmove[1] > 3000:

            #     ship2.rect.x += 1
            #     if pygame.sprite.spritecollideany(ship2,blocks):
            #         ship2.rect.x -= 1
            # elif isstickmove[1] < 1000:
            #     #ship.y += 3
            #     #('down')
            #     ship.rect.x -= 1
            #     if pygame.sprite.spritecollideany(ship2,blocks):
            #         ship2.rect.x += 1
            # elif isstickmove[0] > 3000:
            #     #ship.x += 3
            #     #('r')
            #     ship2.rect.y += 1
            #     if pygame.sprite.spritecollideany(ship2,blocks):
            #         ship2.rect.y -= 1
            # elif isstickmove[0] < 1000:
            #     #ship.x -= 3
            #     #('l')
            #     ship2.rect.y -= 1
            #     if pygame.sprite.spritecollideany(ship2,blocks):
            #         ship2.rect.y += 1

            for event_type, status in joycon.events():
                if status == 1:
                    if event_type == 'b':
                        bul = Bullet(ai_settings, screen, ship, 1, 1, 1, t)
                        bullets.add(bul)
                    if event_type == 'x':
                        if ht > 0:
                            bul = htBullet(ai_settings, screen, ship, aliens,
                                           bullets, choice(aliens.sprites()))
                            ht -= 1
                            htbullets.add(bul)

                    if event_type == 'y':
                        nothingi = Block(ai_settings, screen, 'fire.gif')
                        nothingi.rect.x, nothingi.rect.y = ship.rect.x, ship.rect.y

                        if t == 0:
                            nothingi.rect.y -= 60
                        if t == 1:
                            nothingi.rect.y += 60
                        if t == 2:
                            nothingi.rect.x += 60
                        if t == 3:
                            nothingi.rect.x -= 60

                        blocks.add(nothingi)
                        innothing.add(nothingi)
                    if event_type == 'a':
                        nothingi = Block(ai_settings, screen, 'fire.gif')
                        nothingi.rect.x, nothingi.rect.y = ship.rect.x, ship.rect.y
                        blocks.add(nothingi)
                        innothing.add(nothingi)
                    print(event_type)
                    if event_type == 'right_sr':
                        if timer == 5:
                            timer = 50
                        else:
                            timer = 5
            for event_type, status in joycon2.events():
                if status == 1:
                    if event_type == 'up':
                        bul = Bullet(ai_settings, screen, ship2, 1, 1, 1, t2)
                        bullets.add(bul)
                    if event_type == 'down':
                        if ht2 > 0:

                            bul = htBullet(ai_settings, screen, ship2, aliens,
                                           bullets, choice(aliens.sprites()))
                            ht2 -= 1
                            htbullets.add(bul)

                    if event_type == 'right':
                        nothingi = Block(ai_settings, screen, 'fire.gif')
                        nothingi.rect.x, nothingi.rect.y = ship2.rect.x, ship2.rect.y
                        if t2 == 0:
                            nothingi.rect.y -= 60
                        if t2 == 1:
                            nothingi.rect.y += 60
                        if t2 == 2:
                            nothingi.rect.x += 60
                        if t2 == 3:
                            nothingi.rect.x -= 60
                        blocks.add(nothingi)
                        innothing.add(nothingi)
                    if event_type == 'left':
                        nothingi = Block(ai_settings, screen, 'fire.gif')
                        nothingi.rect.x, nothingi.rect.y = ship2.rect.x, ship2.rect.y
                        blocks.add(nothingi)
                        innothing.add(nothingi)
                    if event_type == 'left_sr':
                        if timer == 5:
                            timer = 50
                        else:
                            timer = 5

                #(event_type, status)
            # for event_type, status in joycon3.events():
            #     #("ButtonEventJoyCon:")
            #     #(event_type, status)
            # for event_type, status in joycon4.events():
            #     #("ButtonEventJoyCon:")
            #     #(event_type, status)
            screen.fill(ai_settings.bg_color)
            jkd.draw(screen)

            for bul in bullets.sprites():
                bul.draw_bullet()
            for bul in alienbullets.sprites():
                bul.draw_bullet()

            blocks.draw(screen)
            die_blocks.draw(screen)
            ships.draw(screen)
            ships2.draw(screen)
            bullets.update(1, 1)
            collision = pygame.sprite.groupcollide(bullets, innothing, True,
                                                   True)
            collision = pygame.sprite.groupcollide(alienbullets, innothing,
                                                   True, True)
            collision = pygame.sprite.groupcollide(bullets, blocks, True,
                                                   false)
            collision = pygame.sprite.groupcollide(bullets, blocks, True,
                                                   false)
            collision = pygame.sprite.groupcollide(bullets, aliens, True, True)
            collision = pygame.sprite.groupcollide(bullets, blocks, True,
                                                   false)
            collision = pygame.sprite.groupcollide(alienbullets, blocks, True,
                                                   false)
            collision = pygame.sprite.groupcollide(bullets, aliens, True, True)
            collision = pygame.sprite.groupcollide(bullets, alienbullets, True,
                                                   True)
            aliens.draw(screen)
            aliens.update()
            bullets.update(9, 9)
            alienbullets.update(2, 1)
            blocks.draw(screen)

            for alien in aliens.sprites():
                if randint(0, 1500) == 45:
                    bullet = htBullet(ai_settings, screen, alien, aliens, ship,
                                      choice([ship, ship2]))
                    alienbullets.add(bullet)

                tre = randint(0, 150)
                if tre == 45:
                    alien.t = randint(0, 3)
                if pygame.sprite.spritecollideany(alien, blocks):
                    if alien.t == 0:
                        alien.y += 3
                        alien.rect.y += 3
                    if alien.t == 1:
                        alien.y -= 3
                        alien.rect.y -= 3
                    if alien.t == 2:
                        alien.x -= 3
                        alien.rect.x -= 3
                    if alien.t == 3:
                        alien.x += 3
                        alien.rect.x += 3

                    alien.t = randint(0, 3)
            if pygame.sprite.spritecollideany(ship, aliens):
                shoot.stop()
                shoot = pygame.mixer.Sound('27 - Game Over.mp3')
                shoot.play(-1)
                aliens.clear()
                alienbullets.clear()
                pygame.quit()
                run_game()
                sys.exit()
            if pygame.sprite.spritecollideany(ship2, aliens):
                shoot.stop()
                shoot = pygame.mixer.Sound('27 - Game Over.mp3')
                shoot.play(0)
                sys.exit()
                pygame.quit()
                run_game()

            if pygame.sprite.spritecollideany(ship, alienbullets):
                shoot.stop()
                shoot = pygame.mixer.Sound('27 - Game Over.mp3')
                shoot.play(-1)
                shoot.stop()
                pygame.quit()
                sys.exit()
                run_game()
            if pygame.sprite.spritecollideany(ship2, alienbullets):
                shoot.stop()
                shoot = pygame.mixer.Sound('27 - Game Over.mp3')
                shoot.play(0)
                shoot.stop()
                pygame.quit()

                run_game()
            print(len(aliens), len(alienbullets))
            if len(aliens) <= 0:
                shoot.stop()

                break
            for bul in htbullets.sprites():
                bul.draw_bullet()
            htbullets.update(0, 1)
            collision = pygame.sprite.groupcollide(htbullets, aliens, True,
                                                   True)
            pygame.display.flip()
Exemplo n.º 7
0
class GUI():
    team_0_cash = 100
    team_1_cash = 100

    def __init__(self, screen_rect, filestr):
        """
        Initialize the display.
        screen_rect: the bounds of the screen
        """

        # Set up the screen
        self.screen = pygame.display.set_mode((screen_rect.w, screen_rect.h))
        self.screen_rect = screen_rect
        self.background = pygame.image.load(filestr).convert()
        self.bar_rect = pygame.Rect(0, 0, screen_rect.w, 70)
        self.living_units = Group()
        self.unit_list = []

    def load_background(self):
        #Scale image to match screensize given
        self.background = pygame.transform.scale(
            self.background, (self.screen_rect.w, self.screen_rect.h))
        #Place image on screen drawing from the top left
        self.screen.blit(self.background, [0, 0])

    def can_spawn(self, unit, unit_list):

        for units in unit_list:
            if unit.side == 0 and units.side == 0:
                if units.screen_x == FORTRESS_WIDTH:
                    return

            if unit.side == 1 and units.side == 1:
                if units.screen_x == SCREEN_WIDTH - UNIT_WIDTH - FORTRESS_WIDTH:
                    return

        # if not len(unit.rect.collidelistall(unit_list))>0:
        self.living_units.add(unit)
        self.unit_list.append(unit)

    def activate_melee(self, team):
        new_melee = unit.unit_type['melee'](side=team, spawn=True)

        self.can_spawn(new_melee, self.unit_list)

    def activate_archer(self, team):
        new_archer = unit.unit_type['archer'](side=team, spawn=True)

        self.can_spawn(new_archer, self.unit_list)

    def activate_fortress(self, team):
        new_fortress = unit.unit_type['fortress'](side=team, spawn=True)
        self.unit_list.append(new_fortress)
        self.living_units.add(new_fortress)

    def update_units(self):
        self.living_units.clear(self.screen, self.background)
        for sprites in self.living_units:
            sprites.move(self.unit_list)
            sprites.attack(self.unit_list)
            if sprites.die():
                self.living_units.remove(sprites)
                self.unit_list.remove(sprites)
                if sprites.side: self.team_0_cash += 20
                else: self.team_1_cash += 20

    def render_info(self, info):
        info_text = font.render(str(int(info)), 1, (255, 0, 0))
        info_rect = info_text.get_rect()
        return info_text, info_rect

    def draw_units(self):
        for sprites in self.living_units:
            sprites.image.convert()
            sprites.image = pygame.transform.scale(sprites.image, sprites.size)
            sprites.image.blit(
                self.render_info(sprites.health)[0],
                self.render_info(sprites.health)[1])
        self.living_units.draw(self.screen)

    def draw_HUD(self):
        HUD = pygame.Surface((self.bar_rect[2], self.bar_rect[3]))
        HUD.fill((125, 125, 125), self.bar_rect)
        self.screen.blit(HUD, (0, 0))
        self.screen.blit(self.render_info(self.team_0_cash)[0], (0, 0))
        self.screen.blit(
            self.render_info(self.team_1_cash)[0],
            (self.screen_rect.w - 50, 0))
Exemplo n.º 8
0
class Benefits(Sprite):
    """All benefits displayed on the game screen"""

    def __init__(self, screen, background_image, prizes_settings_list, dangers_settings_list, danger_probability,
                 min_lifetime, max_lifetime, benefit_quantity):
        """Initialize main variables and objects for benefits management"""
        super(Benefits, self).__init__()
        self.screen = screen
        self.background_image = background_image
        self.prizes_settings_list = prizes_settings_list
        self.penalties_settings_list = dangers_settings_list
        self.penalty_probability = danger_probability
        self.min_lifetime = min_lifetime
        self.max_lifetime = max_lifetime
        self.benefit_quantity = benefit_quantity
        self.prizes_settings_quantity = len(self.prizes_settings_list)
        self.penalties_settings_quantity = len(self.penalties_settings_list)
        self.benefits = Group()

    def _kill_benefits_with_lifetime_runned_out(self):
        """Kill benefit if its lifetime run out"""
        for benefit in self.benefits:
            if benefit.update() == 0:
                benefit.kill()

    def _create_prize(self, benefit_lifetime, benefit_position_x, benefit_position_y):
        """Rand and create benefit"""
        chosen_prize = random.randint(0, self.prizes_settings_quantity - 1)
        self.benefits.add(Benefit(self.prizes_settings_list[chosen_prize]["image"],
                                  benefit_position_x,
                                  benefit_position_y,
                                  self.prizes_settings_list[chosen_prize]["price"],
                                  False,
                                  benefit_lifetime,
                                  False))

    def _create_penalty(self, benefit_lifetime, benefit_position_x, benefit_position_y):
        """Rand and create danger"""
        chosen_penalty = random.randint(0, self.penalties_settings_quantity - 1)
        self.benefits.add(Benefit(self.penalties_settings_list[chosen_penalty]["image"],
                                  benefit_position_x,
                                  benefit_position_y,
                                  True,
                                  self.penalties_settings_list[chosen_penalty]["speed"],
                                  benefit_lifetime,
                                  True))

    def update(self, free_space_grid):
        """Refresh benefits"""
        self.benefits.clear(self.screen, self.background_image)
        self._kill_benefits_with_lifetime_runned_out()
        # Check how many benefits exist. If too few create new.
        current_benefits_quantity = len(self.benefits)
        while current_benefits_quantity < self.benefit_quantity:
            # Choose free space on the floor for creation benefit
            free_space_grid_quantity = len(free_space_grid.sprites())
            if free_space_grid_quantity < self.benefit_quantity:
                break
            chosen_free_space_grid = random.randint(0, free_space_grid_quantity - 1)
            # Rand common properties for prizes and dangers
            benefit_lifetime = random.randint(self.min_lifetime, self.max_lifetime)
            chosen_free_space_tile = free_space_grid.sprites()[chosen_free_space_grid]
            benefit_position_x = chosen_free_space_tile.rect.x
            benefit_position_y = chosen_free_space_tile.rect.y
            chosen_free_space_tile.kill()
            # Create benefit
            if random.random() <= self.penalty_probability:
                self._create_penalty(benefit_lifetime, benefit_position_x, benefit_position_y)
            else:
                self._create_prize(benefit_lifetime, benefit_position_x, benefit_position_y)
            current_benefits_quantity += 1
        self.benefits.draw(self.screen)
Exemplo n.º 9
0
    def clear(self):

        Group.clear(self, self.bg, self.clear_callback)
        if self.enterSurface is not None:
            self.enterSurface.blit(self.clearBg, self.rect)
Exemplo n.º 10
0
    def run_game_2():
        global ch, dobollet, t, bulets, t2
        forrand = 1000
        pygame.init()
        pygame.joystick.init()
        joysticks = [
            pygame.joystick.Joystick(x)
            for x in range(pygame.joystick.get_count())
        ]
        for joystick in joysticks:
            joystick.init()
        ai_settings = Settings()
        screen = pygame.display.set_mode(
            (ai_settings.screen_width, ai_settings.screen_height))
        pygame.display.set_caption('Alien Invasion')
        ship = Ship(ai_settings, screen)
        ship2 = Ship(ai_settings, screen)
        bullets = Group()
        aliens = Group()
        ships = Group()

        ships.add(ship)
        ships2 = Group()
        ships2.add(ship2)
        blocks = Group()
        cu = 1
        cd = 1
        cr = 1

        moneys = 0
        cl = 1
        cu2 = 1
        cd2 = 1
        cr2 = 1
        ship.y -= 47
        ship.rect.y = ship.y
        moneys = 0
        cl2 = 1
        tank = 0
        fuster = 1
        poweraps = Group()
        updatenow = 0
        bezero = 0
        die_blocks = Group()
        tr = '[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,0,0,0,0,0,1,4,0,3,3,3,0,7,0,1,1,1,1,2,1,0,0,0,0,0,0,1,4,7,6,3,0,0,1,0,0,0,0,0,1,2,1,0,0,1,0,0,0,1,4,4,3,3,0,1,0,0,1,0,0,1,2,1,0,0,1,1,1,0,1,1,1,1,1,1,0,0,0,7,7,6,0,1,2,1,0,0,1,0,0,4,1,0,0,0,1,0,0,0,0,1,0,0,1,2,1,0,0,0,0,0,4,1,0,7,6,6,0,1,0,3,0,4,3,0,0,1,2,1,0,4,0,7,7,4,0,0,0,3,1,0,3,0,0,0,0,0,1,2,1,0,4,1,7,7,4,1,4,4,0,1,1,1,1,1,1,0,4,1,2,1,3,4,3,1,7,7,1,1,7,7,7,7,7,7,7,0,0,0,1,2,1,3,4,3,1,7,7,7,7,6,7,7,7,6,7,7,7,7,0,0,0,1,2,1,3,4,3,1,1,7,7,1,1,1,1,1,7,7,7,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1'
        filename = 'liberint_boss.txt'
        #        t = []

        alienbullets = Group()
        nothing = Group()
        score = 0
        ch = 50

        jkd = Group()
        t2 = 1
        do_liberint(pygame, Block, blocks, ai_settings, screen, filename,
                    warrior, aliens, poweraps)
        for power in poweraps.sprites():
            power.image = pygame.image.load('bomb.gif')

        joycon.set_player_lamp_flashing(1)
        joycon2.set_player_lamp_flashing(2)
        bg_color = (20, 260, 200)
        invis = 0

        ships.add(ship)
        i1 = 0
        i2 = 0
        innothing = Group()

        ships2.add(ship2)

        shoot = pygame.mixer.Sound('07 - Metal Man.mp3')
        shoot.play(-1)
        collision = pygame.sprite.groupcollide(ships, blocks, false, True)
        collision = pygame.sprite.groupcollide(ships2, blocks, False, True)
        collision = pygame.sprite.groupcollide(ships, aliens, false, True)
        collision = pygame.sprite.groupcollide(ships2, aliens, False, True)

        collision = pygame.sprite.groupcollide(aliens, blocks, false, True)

        # shoot = mixer.Sound("C:\windows\media\Ring02.wav")
        # #C:\windows\downloads\
        ch = 20
        timer = 5
        while True:
            pygame.time.wait(timer)
            screen.fill(ai_settings.bg_color)
            isstickbut = joycon.stick_r_btn
            isstickmove = joycon.stick_r

            if isstickmove[1] > 2000:

                ship.rect.x += 3
                if pygame.sprite.spritecollideany(ship, blocks):
                    ship.rect.x -= 3
                t = 2
                #('up')
            elif isstickmove[1] < 1000:
                #ship.y += 3
                #('down')
                ship.rect.x -= 3
                if pygame.sprite.spritecollideany(ship, blocks):
                    ship.rect.x += 3
                t = 3

            elif isstickmove[0] > 3000:
                #ship.x += 3
                #('r')
                ship.rect.y += 3
                if pygame.sprite.spritecollideany(ship, blocks):
                    ship.rect.y -= 3
                t = 1
            elif isstickmove[0] < 1000:
                #ship.x -= 3
                #('l')
                t = 0
                ship.rect.y -= 3
                if pygame.sprite.spritecollideany(ship, blocks):
                    ship.rect.y += 3

            isstickbut = joycon2.stick_l_btn
            isstickmove = joycon2.stick_l

            if isstickmove[1] > 3000:

                ship2.rect.x -= 3
                t2 = 3
                if pygame.sprite.spritecollideany(ship2, blocks):
                    ship2.rect.x += 3
                #('up')
            elif isstickmove[1] < 2000:
                #ship.y += 3
                #('down')
                t2 = 2
                ship2.rect.x += 3
                if pygame.sprite.spritecollideany(ship2, blocks):
                    ship2.rect.x -= 3

            elif isstickmove[0] > 3000:
                #ship.x += 3
                #('r')
                ship2.rect.y -= 3
                t2 = 0

                if pygame.sprite.spritecollideany(ship2, blocks):
                    ship2.rect.y += 3
            elif isstickmove[0] < 1600:
                #ship.x -= 3
                #('l')
                t2 = 1
                ship2.rect.y += 3
                if pygame.sprite.spritecollideany(ship2, blocks):
                    ship2.rect.y -= 3
            # isstickmove=joycon2.stick_l
            # if isstickmove[1] > 3000:

            #     ship2.rect.x += 1
            #     if pygame.sprite.spritecollideany(ship2,blocks):
            #         ship2.rect.x -= 1
            # elif isstickmove[1] < 1000:
            #     #ship.y += 3
            #     #('down')
            #     ship.rect.x -= 1
            #     if pygame.sprite.spritecollideany(ship2,blocks):
            #         ship2.rect.x += 1
            # elif isstickmove[0] > 3000:
            #     #ship.x += 3
            #     #('r')
            #     ship2.rect.y += 1
            #     if pygame.sprite.spritecollideany(ship2,blocks):
            #         ship2.rect.y -= 1
            # elif isstickmove[0] < 1000:
            #     #ship.x -= 3
            #     #('l')
            #     ship2.rect.y -= 1
            #     if pygame.sprite.spritecollideany(ship2,blocks):
            #         ship2.rect.y += 1

            for event_type, status in joycon.events():
                if status == 1:
                    if event_type == 'b':
                        bul = Bullet(ai_settings, screen, ship, 1, 1, 1, t)
                        bullets.add(bul)

                    if event_type == 'y':
                        nothingi = Block(ai_settings, screen, 'fire.gif')
                        nothingi.rect.x, nothingi.rect.y = ship.rect.x, ship.rect.y

                        if t == 0:
                            nothingi.rect.y -= 60
                        if t == 1:
                            nothingi.rect.y += 60
                        if t == 2:
                            nothingi.rect.x += 60
                        if t == 3:
                            nothingi.rect.x -= 60

                        blocks.add(nothingi)
                        innothing.add(nothingi)
                    if event_type == 'a':
                        nothingi = Block(ai_settings, screen, 'fire.gif')
                        nothingi.rect.x, nothingi.rect.y = ship.rect.x, ship.rect.y
                        blocks.add(nothingi)
                        innothing.add(nothingi)
                    if event_type == 'right_sr':
                        if timer == 5:
                            timer = 50
                        else:
                            timer = 5
            for event_type, status in joycon2.events():
                if status == 1:
                    if event_type == 'up':
                        bul = Bullet(ai_settings, screen, ship2, 1, 1, 1, t2)
                        bullets.add(bul)
                    if event_type == 'left_sr':
                        if timer == 5:
                            timer = 50
                        else:
                            timer = 5
                    if event_type == 'right':
                        nothingi = Block(ai_settings, screen, 'fire.gif')
                        nothingi.rect.x, nothingi.rect.y = ship2.rect.x, ship2.rect.y
                        if t2 == 0:
                            nothingi.rect.y -= 60
                        if t2 == 1:
                            nothingi.rect.y += 60
                        if t2 == 2:
                            nothingi.rect.x += 60
                        if t2 == 3:
                            nothingi.rect.x -= 60
                        blocks.add(nothingi)
                        innothing.add(nothingi)
                    if event_type == 'left':
                        nothingi = Block(ai_settings, screen, 'fire.gif')
                        nothingi.rect.x, nothingi.rect.y = ship2.rect.x, ship2.rect.y
                        blocks.add(nothingi)
                        innothing.add(nothingi)

                #(event_type, status)
            # for event_type, status in joycon3.events():
            #     #("ButtonEventJoyCon:")
            #     #(event_type, status)
            # for event_type, status in joycon4.events():
            #     #("ButtonEventJoyCon:")
            #     #(event_type, status)
            screen.fill(ai_settings.bg_color)
            jkd.draw(screen)

            for bul in bullets.sprites():
                bul.draw_bullet()
            for bul in alienbullets.sprites():
                bul.draw_bullet()

            blocks.draw(screen)
            die_blocks.draw(screen)
            ships.draw(screen)
            ships2.draw(screen)
            bullets.update(1, 1)
            collision = pygame.sprite.groupcollide(bullets, innothing, True,
                                                   True)
            collision = pygame.sprite.groupcollide(alienbullets, innothing,
                                                   True, True)
            collision = pygame.sprite.groupcollide(bullets, blocks, True,
                                                   false)
            collision = pygame.sprite.groupcollide(bullets, blocks, True,
                                                   false)

            collision = pygame.sprite.groupcollide(bullets, blocks, True,
                                                   false)
            collision = pygame.sprite.groupcollide(alienbullets, blocks, True,
                                                   false)
            collision = pygame.sprite.groupcollide(alienbullets, bullets, True,
                                                   True)
            collision2 = pygame.sprite.groupcollide(bullets, aliens, True,
                                                    False)

            if collision2:
                bullets.empty()
                print(len(bullets))
                ch -= 1
                alien.speed_factor += 5
                for x in range(0):
                    bullet = Bullet(ai_settings, screen, alien, aliens,
                                    alienbullets, ship, 0)
                    alienbullets.add(bullet)
                    bullet = Bullet(ai_settings, screen, alien, aliens,
                                    alienbullets, ship, 1)
                    alienbullets.add(bullet)
                    bullet = Bullet(ai_settings, screen, alien, aliens,
                                    alienbullets, ship, 2)
                    alienbullets.add(bullet)
                    bullet = Bullet(ai_settings, screen, alien, aliens,
                                    alienbullets, ship, 3)
                    alienbullets.add(bullet)

                print(ch)
                if ch == 0:
                    collision2 = pygame.sprite.groupcollide(
                        bullets, aliens, False, False)
                    shoot.stop()
                    break
            collision = pygame.sprite.groupcollide(bullets, alienbullets, True,
                                                   True)
            aliens.draw(screen)
            aliens.update()
            bullets.update(9, 9)
            alienbullets.update(2, 1)
            blocks.draw(screen)
            for alien in aliens.sprites():
                if randint(89, 90) == 0 and len(alienbullets) <= 8:
                    bullet = Bullet(ai_settings, screen, alien, aliens,
                                    alienbullets, ship, 0)
                    alienbullets.add(bullet)
                    bullet = Bullet(ai_settings, screen, alien, aliens,
                                    alienbullets, ship, 1)
                    alienbullets.add(bullet)
                    bullet = Bullet(ai_settings, screen, alien, aliens,
                                    alienbullets, ship, 2)
                    alienbullets.add(bullet)
                    bullet = Bullet(ai_settings, screen, alien, aliens,
                                    alienbullets, ship, 3)
                    alienbullets.add(bullet)

                tre = randint(0, 150)
                if tre == 45:
                    alien.t = randint(0, 3)
                if pygame.sprite.spritecollideany(alien, blocks):
                    if alien.t == 0:
                        alien.y += alien.speed_factor
                        alien.rect.y += alien.speed_factor
                    if alien.t == 1:
                        alien.y -= alien.speed_factor
                        alien.rect.y -= alien.speed_factor
                    if alien.t == 2:
                        alien.x -= alien.speed_factor
                        alien.rect.x -= alien.speed_factor
                    if alien.t == 3:
                        alien.x += alien.speed_factor
                        alien.rect.x += alien.speed_factor

                    alien.t = randint(0, 3)
            if pygame.sprite.spritecollideany(ship, aliens):
                shoot.stop()
                shoot = pygame.mixer.Sound('27 - Game Over.mp3')
                shoot.play(-1)
                aliens.clear()
                alienbullets.clear()
                pygame.quit()
                run_game()
                sys.exit()
            if pygame.sprite.spritecollideany(ship2, aliens):
                shoot.stop()
                shoot = pygame.mixer.Sound('27 - Game Over.mp3')
                shoot.play(0)
                sys.exit()
                pygame.quit()
                run_game()

            if pygame.sprite.spritecollideany(ship, alienbullets):
                shoot.stop()
                shoot = pygame.mixer.Sound('27 - Game Over.mp3')
                shoot.play(-1)
                shoot.stop()
                pygame.quit()
                sys.exit()
                run_game()
            if pygame.sprite.spritecollideany(ship2, alienbullets):
                shoot.stop()
                shoot = pygame.mixer.Sound('27 - Game Over.mp3')
                shoot.play(0)
                shoot.stop()
                pygame.quit()

                run_game()
            print(len(aliens), len(alienbullets))

            pygame.display.flip()


# import pygame
# import cv2

# video = cv2.VideoCapture("test.mov")
# success, video_image = video.read()
# fps = video.get(cv2.CAP_PROP_FPS)

# window = pygame.display.set_mode(video_image.shape[1::-1])
# clock = pygame.time.Clock()

# run = success
# while run:
#     clock.tick(fps)
#     for event in pygame.event.get():
#         if event.type == pygame.QUIT:
#             run = False

#     success, video_image = video.read()
#     if success:
#         video_surf = pygame.image.frombuffer(
#             video_image.tobytes(), video_image.shape[1::-1], "BGR")
#     else:
#         run = False
#     window.blit(video_surf, (0, 0))
#     pygame.display.flip()

# pygame.quit()
# exit()
# run_game_2()
Exemplo n.º 11
0
class Snake(Sprite):
    """Snake consisting of snake elements"""
    def __init__(self, screen, background_image, step_length, grid_size,
                 starting_position_x, starting_position_y, direction,
                 step_images_sets):
        """Initialize snake"""
        super(Snake, self).__init__()
        self.screen = screen
        self.background_image = background_image
        self.step_length = step_length
        self.grid_size = grid_size
        self.step_counter = 0
        self.step_images_sets = step_images_sets
        self.step_images_sets_quantity = len(self.step_images_sets)
        self.direction = direction
        self.steps_quantity = len(self.step_images_sets[0])
        self.new_direction_flag = []
        self.add_body_element_flag = False
        self.snake_head = None
        # Used for checking collision between snake head and another snake elements.
        # Without the second snake element - because of constraint caused by snake turning equal 90 grades.
        self.snake_body = Group()
        # All snake elements used for refreshing animation
        self.all_snake = Group()
        # Used for moving each snake element in proper order
        self.all_snake_list = []
        self._create_head(starting_position_x, starting_position_y)

    def _create_head(self, starting_position_x, starting_position_y):
        """Create snake head"""
        self.snake_head = SnakeElement(self.screen, self.step_length,
                                       self._rand_element_skin(), 0,
                                       starting_position_x,
                                       starting_position_y, self.direction,
                                       self.steps_quantity)
        self.all_snake.add(self.snake_head)
        self.all_snake_list.append(self.snake_head)

    def _rand_element_skin(self):
        """Rand layout for snake element"""
        return self.step_images_sets[random.randint(
            0, self.step_images_sets_quantity - 1)]

    def _add_body_element(self):
        """Add new snake element to the snake."""
        last_element = self.all_snake_list[-1]
        last_element_position_x = last_element.rect.x
        last_element_position_y = last_element.rect.y
        last_element_direction = last_element.direction
        last_element_step_number = last_element.step_number
        if last_element_direction == constants.DIRECTION_UP:
            new_element_position_x = last_element_position_x
            new_element_position_y = last_element_position_y + self.grid_size
        elif last_element_direction == constants.DIRECTION_RIGHT:
            new_element_position_x = last_element_position_x - self.grid_size
            new_element_position_y = last_element_position_y
        elif last_element_direction == constants.DIRECTION_DOWN:
            new_element_position_x = last_element_position_x
            new_element_position_y = last_element_position_y - self.grid_size
        elif last_element_direction == constants.DIRECTION_LEFT:
            new_element_position_x = last_element_position_x + self.grid_size
            new_element_position_y = last_element_position_y
        new_element = SnakeElement(self.screen, self.step_length,
                                   self._rand_element_skin(),
                                   last_element_step_number,
                                   new_element_position_x,
                                   new_element_position_y,
                                   last_element_direction, self.steps_quantity)
        self.all_snake.add(new_element)
        self.all_snake_list.append(new_element)
        if len(self.all_snake_list) > 2:
            self.snake_body.add(new_element)

    def increase_body(self):
        """Set flag for snake body incrementation which will be executed during snake update"""
        self.add_body_element_flag = True

    def change_direction(self, new_direction):
        """Set flag for changing snake direction which will be executed during snake update"""
        new_direction_flag_count = len(self.new_direction_flag)
        # Check is new direction allowed
        # Compare with current direction or with direction waiting for implementation in new_direction_flag (stack)
        if (new_direction != self.direction
                and ((new_direction_flag_count == 0
                      and new_direction + self.direction != 0) or
                     (new_direction_flag_count == 1
                      and new_direction + self.new_direction_flag[0] != 0))):
            self.new_direction_flag.append(new_direction)

    def update(self):
        """Update snake - move body and implement changes from previously settled flags"""
        # Apply changes from flags if snake is in the proper position.
        # Changes are constrained by grid size used for floor space management)
        if self.step_counter % self.grid_size == 0:
            # Increase snake body
            if self.add_body_element_flag:
                self._add_body_element()
                self.add_body_element_flag = False
            # Change snake direction
            if (len(self.new_direction_flag) > 0
                    and self.snake_head.is_on_the_screen()):
                self.direction = self.new_direction_flag.pop(0)
            previous_element_direction = self.direction
            for snake_element in self.all_snake_list:
                new_direction = previous_element_direction
                previous_element_direction = snake_element.direction
                snake_element.direction = new_direction
            self.step_counter = 0
        self.all_snake.update()
        self.step_counter += self.step_length

    def draw(self):
        """Draw snake"""
        self.all_snake.clear(self.screen, self.background_image)
        self.all_snake.draw(self.screen)