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)
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))
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)
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)
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()
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()
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))
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)
def clear(self): Group.clear(self, self.bg, self.clear_callback) if self.enterSurface is not None: self.enterSurface.blit(self.clearBg, self.rect)
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()
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)