def new(self): # initialize all variables and do all the setup for a new game conf.random.seed(self.seed) self.all_sprites = pg.sprite.LayeredUpdates() self.walls = pg.sprite.Group() self.mobs = pg.sprite.Group() self.bullets = pg.sprite.Group() self.items = pg.sprite.Group() for row, tiles in enumerate(self.maps[self.map_progress].data): for col, tile in enumerate(tiles): if tile == conf.WALL_TILE: Wall(self, conf.vec(col, row)) elif tile == conf.PLAYER_TILE: self.player = Player(self, conf.vec(col, row)) if (self.player_health != 0): self.player.health = self.player_health elif tile == conf.HEALTH_TILE: Item(self, conf.vec(col, row), 'health') elif tile == conf.MG_TILE: Item(self, conf.vec(col, row), 'machinegun') elif tile == conf.SW_TILE: Item(self, conf.vec(col, row), 'shockwave') elif tile == conf.SG_TILE: Item(self, conf.vec(col, row), 'shotgun') for row, tiles in enumerate(self.maps[self.map_progress].data): for col, tile in enumerate(tiles): if tile == conf.MOB_TILE: Mob(self, conf.vec(col, row)) self.paused = False self.camera = Camera(self, self.maps[self.map_progress].width, self.maps[self.map_progress].height) self.background = Background(self, conf.vec( self.maps[self.map_progress].width / 4, self.maps[self.map_progress].height / 4)) self.soundManager.play_sound_effect(self.effect_sounds['level_start'])
def createRectangleWall(coordinates, gameDisplay): # given top left and bottom right: width = coordinates[1][0] - coordinates[0][0] height = coordinates[1][1] - coordinates[0][1] x = (coordinates[0][0] + coordinates[1][0]) / 2 y = (coordinates[0][1] + coordinates[1][1]) / 2 sprite = pygame.transform.scale(pygame.image.load("wallTexture.png"), (width, height)) wall = Mob(sprite, x, y, 0, gameDisplay, 10, 1, 0) return wall
def assemble(self, player, characters): self.player = player alldead = True for x, c in enumerate(characters): char = Character.byName(c) if not char.dead: alldead = False char.charInfo = CharacterInfo(char) if char.player != player: #cheater!!! traceback.print_stack() print "AssertionError: %s plays a non-owned character!" % player.name return #create the mob m = Mob(char.spawn, player.zone, player, char) m.charIndex = x char.mob = m self.members.append(char) self.charInfos[x] = char.charInfo for item in char.items: if item.slot == RPG_SLOT_CURSOR: player.cursorItem = item # catch any items in character cursor_slot break index = 0 for c in self.members: if c.name == player.avatarCharName: player.modelChar = c player.modelIndex = index break index += 1 else: player.avatarCharName = self.members[0].name player.modelChar = self.members[0] player.modelIndex = 0 if alldead: for c in self.members: c.dead = False c.mob.health = 1 c.mob.mana = 1 player.curChar = self.members[0] # Assign cursor item to current character to avoid # confusion and any item handling problems. if player.cursorItem: player.cursorItem.setCharacter(player.curChar) player.updateCursorItem(None) player.restoreTradeItems()
def __init__(self, mode, category): ''' Desc: initializes the game screen and its respective features Args: self, mode, category Return: N/A ''' self.bg = pygame.image.load('assets/images/background2.jpg') self.bg = pygame.transform.scale(self.bg, (1920, 1080)) self.mob = Mob() self.hanged = Hanged() self.game = GameInteraction(mode, category)
def test_mobs(self): level = Level(25, 25) level.up_stairs_pos = Pos(1, 1) world = World([level]) mob = level.mobs[2, 2] = Mob(Pos(2, 2), 0, mobinfo['orc']) mob.move_to(Pos(3, 3)) self.assertNotIn((2, 2), level.mobs) self.assertEquals(mob, level.mobs.get((3, 3))) self.assertEquals(level.mobs.get(world.levels[0].up_stairs_pos), world.player)
def redraw_window(self, win, gracz, p1, p2, mobs, projectiles1, projectiles2): for m in mobs: mob = Mob(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8]) mob.draw(win) if gracz == 1: p1.draw(win) for p in projectiles1: p.draw(win) if gracz == 2: p2.draw(win) for p in projectiles2: p.draw(win)
def init(self): self.sprites = pygame.sprite.Group() self.mobs = pygame.sprite.Group() self.bullets = pygame.sprite.Group() self.power_ups = pygame.sprite.Group() for i in range(config.NB_MOBS): new_mob = Mob() new_mob.add(self.mobs, self.sprites) self.player = Player() self.sprites.add(self.player) self.score = 0 self.gameover = False
def reassemble(self): player = self.player for x, c in enumerate(self.members): m = Mob(c.spawn, player.zone, player, c) m.charIndex = x c.mob = m c.charInfo = CharacterInfo(c) self.charInfos[x] = c.charInfo player.curChar = self.members[0] # Assign cursor item to current character to avoid # confusion and any item handling problems. if player.cursorItem: player.cursorItem.setCharacter(player.curChar) player.updateCursorItem(None) player.restoreTradeItems()
def find_mobs_message(message): ambush = False timer = 180 if (re.search("It's an ambush!", message.text)): ambush = True timer = 360 link = re.search("\/fight.{1,100}", message.text) link = link.group(0) mob = Mob(message.from_user, link, ambush, None, message, timer) markup = mob.mobs_markups("⚔️ В бой", "🤝 Помогаю") message_for_update = RoyalTrident_bot.send_message(message.chat.id, mob.mobs_text, reply_markup=markup, parse_mode='HTML') message_for_update = message_for_update.wait() mob.message_for_update = message_for_update mob_list.append(mob) mob.updating() mob_list.remove(mob)
def addCharacter(self, char): player = self.player char.charInfo = CharacterInfo(char) m = Mob(char.spawn, player.zone, player, char) m.simObject = player.simObject m.charIndex = len(self.members) char.mob = m self.members.append(char) self.charInfos[m.charIndex] = char.charInfo for item in char.items: if item.slot == RPG_SLOT_CURSOR: player.cursorItem = item # catch any items in character cursor_slot # Assign cursor item to current character to avoid # confusion and any item handling problems. player.cursorItem.setCharacter(player.curChar) player.updateCursorItem(None) break player.zone.simAvatar.mind.callRemote("addPlayerMobInfo", player.simObject.id, m.mobInfo, char.spawn.getSpawnInfo()) player.zone.activeMobs.append(m) if char.dead: player.zone.detachMob(m) player.restoreTradeItems() player.rootInfo = RootInfo(player, self.charInfos) player.mind.callRemote("setRootInfo", player.rootInfo) player.updateKOS()
def mob_ini(n): for i in range(n): mob = Mob() all_sprites.add(mob) mobs.add(mob)
def game_screen(screen): contador = 0 clock = pygame.time.Clock() # Carrega o fundo do jogo background = pygame.image.load(path.join('Fundo4.jpg')).convert() background_rect = background.get_rect() x = 0 vx = 0 #gravidade g = 1 # Carrega os sons do jogo pygame.mixer.music.load(path.join(snd_dir, 'naruto.mp3')) pygame.mixer.music.set_volume(0.4) boom_sound = pygame.mixer.Sound(path.join(snd_dir, 'expl3.wav')) destroy_sound = pygame.mixer.Sound(path.join(snd_dir, 'expl6.wav')) pew_sound = pygame.mixer.Sound(path.join(snd_dir, 'pew.wav')) player = Player() # Cria um grupo só do inimigo monsters = pygame.sprite.Group() #Cria um grupo para plataformas plataformas = pygame.sprite.Group() # Cria um grupo de todos os sprites e adiciona a nave. all_sprites = pygame.sprite.Group() all_sprites.add(player) bullets = pygame.sprite.Group() pygame.mixer.music.play(loops=-1) PLAYING = 0 state = PLAYING MORRENDO= 1 DONE = 2 #Cria Pontuação score = 0 #Cria Vidas vidas=3 while state != DONE and contador < 3: # Ajusta a velocidade do jogo. clock.tick(FPS) if random.randrange(1,100) == 1: mob2 = Mob2() all_sprites.add(mob2) monsters.add(mob2) if random.randrange(1,200) == 1: mob3 = Mob3() all_sprites.add(mob3) monsters.add(mob3) if random.randrange(1,200) == 1: mob = Mob() # Cria um grupo só do inimigo all_sprites.add(mob) monsters.add(mob) if random.randrange(1, 50) == 1: #Cria plataforma tamanhos = [1, 3, 5] plat = Plataforma(WIDTH, HEIGHT-325, tamanhos[random.randrange(0, 3)]) all_sprites.add(plat) plataformas.add(plat) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: vx = 8 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Left{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_RIGHT: vx = -8 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Run{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_UP:#pulo player.speedy = -15 if event.key == pygame.K_DOWN: player.speedy = 10 if event.key == pygame.K_SPACE: player.imgs = [] n=5 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Punch{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step=5 player.image = pygame.transform.scale(player.image, (1,1)) bullet = Bullet(player.rect.centerx, player.rect.top) all_sprites.add(bullet) bullets.add(bullet) pew_sound.play() if event.key == pygame.K_m: player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "R{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step=5 player.image = pygame.transform.scale(player.image, (1,1)) ras = Rasengan(player.rect.centerx, player.rect.top) all_sprites.add(ras) bullets.add(ras) pew_sound.play() ################################# # Verifica se soltou alguma tecla. if event.type == pygame.KEYUP: # Dependendo da tecla, altera a velocidade. if event.key == pygame.K_LEFT: vx = 0 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Naruto{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_RIGHT: vx = 0 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Naruto{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_UP: if event.key == pygame.K_RIGHT: vx = 0 player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Naruto{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_DOWN: player.speedy = 0 if event.key == pygame.K_SPACE: player.imgs = [] n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Run{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 player.step=5 if event.key == pygame.K_m: player.imgs = [] player.steps = 5 n=6 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Run{0}.png".format(i+1))).convert()) player.frame = 0 player.steps = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if player.rect.y < HEIGHT/2 - 45.5:#gravidade player.speedy +=g # Verifica se houve colisão entre tiro e inimigo hits = pygame.sprite.groupcollide(monsters, bullets, True, True) for hit in hits: # Pode haver mais de um score += 50 # O meteoro e destruido e precisa ser recriado destroy_sound.play() contador += 1 #m = Mob() #all_sprites.add(m) #monsters.add(m) # Verifica se houve colisão entre personagem e inimigo hits = pygame.sprite.spritecollide(player, monsters, False, pygame.sprite.collide_circle) if hits: # Toca o som da colisão boom_sound.play() #time.sleep(5) # Precisa esperar senão fecha #morte #morte = Morte(hit.rect.center) #all_sprites.add(morte) boom_sound.play() #all_sprites.add(morte) #state = MORRENDO #morte_tick = pygame.time.get_ticks() #morte_duration = morte.frame_ticks * len(morte.morte_anim) + 400 #if vidas<=0: player.kill() running = False #else: #vidas-=1 # Depois de processar os eventos. # Atualiza a acao de cada sprite. all_sprites.update() # A cada loop, redesenha o fundo e os sprites screen.fill(BLACK) rel_x = x % background.get_rect().width x+= vx screen.blit(background, (rel_x -background.get_rect().width , 0)) if rel_x < WIDTH: screen.blit(background, (rel_x, 0)) all_sprites.draw(screen) # Depois de desenhar tudo, inverte o display. pygame.display.flip() #Desenha pontuação draw_text(screen, str(score), 18, WIDTH/2, 50) #Desenha vidas #draw_text(screen, str(vidas), 18, WIDTH/2, 80) g = 0 while state != DONE and contador >= 3: # Ajusta a velocidade do jogo. clock.tick(FPS) if random.randrange(1,100) == 1: mob2 = Mob2() all_sprites.add(mob2) monsters.add(mob2) if random.randrange(1,200) == 1: mob3 = Mob3() all_sprites.add(mob3) monsters.add(mob3) if random.randrange(1,200) == 1: mob = Mob() if random.randrange(1, 50) == 1: #Cria plataforma tamanhos = [1, 3, 5] plat = Plataforma(WIDTH, HEIGHT-325, tamanhos[random.randrange(0, 3)]) all_sprites.add(plat) plataformas.add(plat) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: vx = 8 player.imgs = [] n=5 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Flip{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_RIGHT: vx = -8 player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.step = 3 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) if event.key == pygame.K_UP:#pulo player.speedy = -15 if player.rect.y < HEIGHT/2 - 45.5:#gravidade player.speedy +=g all_sprites.update() time.sleep(1e-2) screen.fill(BLACK) screen.blit(background, (x, 0)) all_sprites.draw(screen) pygame.display.flip() if event.key == pygame.K_DOWN: player.speedy = 10 if event.key == pygame.K_SPACE: player.imgs = [] n=10 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "P{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step = 5 player.image = pygame.transform.scale(player.image, (1,1)) bullet = Nrpower(player.rect.centerx, player.rect.top) all_sprites.add(bullet) bullets.add(bullet) pew_sound.play() if event.key == pygame.K_m: player.imgs = [] n=5 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "NrP{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step = 5 player.image = pygame.transform.scale(player.image, (1,1)) powe = Nrm(player.rect.centerx, player.rect.top) all_sprites.add(powe) bullets.add(powe) pew_sound.play() ################################# # Verifica se soltou alguma tecla. if event.type == pygame.KEYUP: # Dependendo da tecla, altera a velocidade. if event.key == pygame.K_LEFT: vx = 0 player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_RIGHT: vx = 0 player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_UP: if event.key == pygame.K_RIGHT: vx = 0 player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if event.key == pygame.K_DOWN: player.speedy = 0 if event.key == pygame.K_SPACE: player.imgs = [] n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 player.step=5 if event.key == pygame.K_m: player.imgs = [] player.steps = 5 n=8 for i in range(n): player.imgs.append(pygame.image.load(path.join(img_dir, "Nr{0}.png".format(i+1))).convert()) player.frame = 0 player.steps = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1,1)) player.speedx = 0 if player.rect.y < HEIGHT/2 - 45.5:#gravidade player.speedy +=g time.sleep(1e-2) # Verifica se houve colisão entre tiro e inimigo hits = pygame.sprite.groupcollide(monsters, bullets, True, True) for hit in hits: # Pode haver mais de um # O meteoro e destruido e precisa ser recriado destroy_sound.play() contador += 1 score += 100 #m = Mob() #all_sprites.add(m) #monsters.add(m) # No lugar do meteoro antigo, adicionar uma explosão. # Verifica se houve colisão entre personagem e inimigo hits = pygame.sprite.spritecollide(player, monsters, False, pygame.sprite.collide_circle) if hits: # Toca o som da colisão #morte = Morte(hit.rect.center) #all_sprites.add(morte) boom_sound.play() #all_sprites.add(morte) #state = MORRENDO #morte_tick = pygame.time.get_ticks() #morte_duration = morte.frame_ticks * len(morte.morte_anim) + 400 #if vidas<=0: player.kill() state = DONE #else: #vidas-=1 #state = MORRENDO #now = pygame.time.get_ticks() #if now - morte_tick > morte_duration: #state = PLAYING #elif state == MORRENDO: # now = pygame.time.get_ticks() #if now - morte_tick > morte_duration: # state = DONE time.sleep(5) # Precisa esperar senão fecha # Depois de processar os eventos. # Atualiza a acao de cada sprite. all_sprites.update() hits = pygame.sprite.spritecollide(player, plataformas, False) if hits: player.rect.y = hits[0].rect.top player.speedy = 0 # A cada loop, redesenha o fundo e os sprites screen.fill(BLACK) rel_x = x % background.get_rect().width x+= vx screen.blit(background, (rel_x -background.get_rect().width , 0)) if rel_x < WIDTH: screen.blit(background, (rel_x, 0)) for p in plataformas: p.move(vx) all_sprites.draw(screen) #Desenha pontuação draw_text(screen, str(score), 18, WIDTH/2, 50) #Desenha vidas #draw_text(screen, str(vidas), 18, WIDTH/2, 80) # Depois de desenhar tudo, inverte o display. pygame.display.flip() return OVER
# initialize pygame and create window pygame.init() screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption(TITLE) clock = pygame.time.Clock() all_sprites = pygame.sprite.Group() bullets = pygame.sprite.Group() mobs = pygame.sprite.Group() player = Player() all_sprites.add(player) for i in range(1): m = Mob() all_sprites.add(m) mobs.add(m) # Game loop running = True while running: # keep loop running at the right speed clock.tick(FPS) # Process input (events) for event in pygame.event.get(): # check for closing window if event.type == pygame.QUIT: running = False elif event.type == pygame.MOUSEBUTTONDOWN: player.shoot(all_sprites, bullets)
def setUp(self): self.mob = Mob(57) pass
def new_mob(self): mob = Mob(self.settings, self.graphics_provider) self.all_sprites.add(mob) self.mobs.add(mob)
def draw(self, screen, hero_type, song, p): # создаем экран bg = pygame.image.load("main_fon.jpg") # создаем фон fon = pygame.transform.scale(bg, (self.width, self.height)) bg_sprites = pygame.sprite.Group() bg_sprite = pygame.sprite.Sprite() bg_sprite.image = fon bg_sprite.rect = bg_sprite.image.get_rect() bg_sprite.rect.x = 0 bg_sprite.rect.y = 0 bg_sprites.add(bg_sprite) bg_sprites.draw(screen) # создаем невидимый Surface для очистки спрайтов screen1 = pygame.Surface((self.width, self.height)) screen1.set_alpha(255) # создаем машину hero_sprites = pygame.sprite.Group() sprite = Hero(hero_sprites, hero_type) hero_sprites.add(sprite) # количество баллов self.p = p # калибруем позиции и границы передвижения pos1 = self.height * 0.8 pos2 = self.height * 0.50 mpos = self.height * 0.71 running = True move = 0 clock = pygame.time.Clock() fps = 1000 # создаем мобов targets = pygame.sprite.Group() mob = Mob(self.width + self.width * 0.2) targets.add(mob) self.con = sqlite3.connect("spn.db") self.cur = self.con.cursor() # рисуем спрайты и начинаем цикл hero_sprites.draw(screen) pygame.mixer.music.load(song) pygame.mixer.music.play(-1) while running: if self.p == 20: song = self.music_play() pygame.mixer.music.load(song) pygame.mixer.music.play(-1) for event in pygame.event.get(): if event.type == pygame.QUIT: return False # проверяем на нажатие клавиш if event.type == pygame.KEYDOWN: key = event.key if key == pygame.K_UP or key == pygame.K_w: move = -self.height * 0.2 * (1 / 50) sprite.update((0, move)) if sprite.get_y() < pos2: sprite.rect.y = pos2 hero_sprites.clear(screen, screen1) bg_sprites.draw(screen) elif key == pygame.K_DOWN or key == pygame.K_s: move = self.height * 0.2 * (1 / 50) sprite.update((0, move)) if sprite.get_y() > pos1: sprite.rect.y = pos1 hero_sprites.clear(screen, screen1) bg_sprites.draw(screen) # проверяем на поднятие клавиш if event.type == pygame.KEYUP: key = event.key if key == pygame.K_UP or key == pygame.K_w: if move == -self.height * 0.2 * (1 / 50): move = 0 hero_sprites.clear(screen, screen1) elif key == pygame.K_DOWN or key == pygame.K_s: if move == self.height * 0.2 * (1 / 50): move = 0 hero_sprites.clear(screen, screen1) # двигаем мобов mob.rect.x -= mob.move targets.clear(screen, screen1) # не даем машине выйти за границы if sprite.get_y() >= pos1 or sprite.get_y() <= pos2: move = 0 if sprite.get_y() > pos1: sprite.rect.y = pos1 elif sprite.get_y() < pos2: sprite.rect.y = pos2 # двигаем машину if pos2 <= sprite.get_y() <= pos1: sprite.update((0, move)) hero_sprites.clear(screen, screen1) # проверяем выход моба за экран if mob.rect.x <= self.width * 0 - self.width * 0.2: targets.clear(screen, screen1) targets.remove(mob) mob = Mob(self.width + self.width * 0.2) targets.add(mob) # проверяем столкновения с машиной if mob.rect.x <= sprite.rect.x + self.width * 0.3: if mob.get_y() < mpos: if sprite.get_y() <= mpos: name = mob.target # получаем тип героя, которого убили res = self.cur.execute("""SELECT * FROM Heroes WHERE Hero = '{}'""".format( name)).fetchall() type = str(res[0][1]) x = mob.rect.x targets.clear(screen, screen1) targets.remove(mob) mob = Mob((self.width + self.width * 0.2) + (x + (self.width * 0.2))) targets.add(mob) if type == 'Друг': self.p -= 5 elif type == 'Монстр': self.p += 5 elif type == 'Враг': d = Death() elif mob.get_y() > mpos: if sprite.get_y() > mpos: name = mob.target res = self.cur.execute("""SELECT * FROM Heroes WHERE Hero = '{}'""".format( name)).fetchall() type = str(res[0][1]) x = mob.rect.x targets.clear(screen, screen1) targets.remove(mob) mob = Mob((self.width + self.width * 0.2) + (x + (self.width * 0.2))) targets.add(mob) if type == 'Друг': self.p -= 5 elif type == 'Монстр': self.p += 5 elif type == 'Враг': d = Death() # начисление очков # рисуем все спрайты и обновляем if self.p == 20: m = MusicChoose(screen, hero_type) if self.p == 0: m = Death() clock.tick(fps) bg_sprites.draw(screen) targets.draw(screen) hero_sprites.draw(screen) # выводим очки points(self.p, self.width, self.height, screen) pygame.display.flip() pygame.display.update()
def update(self): self.background.update() self.sprites.update() # list of mobs collided with player ; mobs are deleted mob_hits_with_player = pygame.sprite.spritecollide( self.player, self.mobs, True, pygame.sprite.collide_circle) for mob_hit in mob_hits_with_player: self.sound_handler.play("player_hit") self.player.shield -= mob_hit.radius * 2 expl = Explosion(self.explosion_anim, mob_hit.rect.center, 'sm') self.sprites.add(expl) new_mob = Mob() new_mob.add(self.mobs, self.sprites) if self.player.shield < 0: self.sound_handler.play("player_death") self.death_explosion = Explosion(self.explosion_anim, self.player.rect.center, 'player') self.sprites.add(self.death_explosion) self.player.hide() self.player.lives -= 1 self.player.shield = self.player.initial_shield # check if player died if self.player.lives == 0 and not self.death_explosion.alive(): self.gameover = True log.info("Game Over!") log.info("Score: " + str(self.score)) # list of mobs collided with the bullets ; both are deleted mob_hits_with_bullets = pygame.sprite.groupcollide( self.mobs, self.bullets, True, True) for mob_hit in mob_hits_with_bullets: self.sound_handler.play("explosion") points_gained = 60 - mob_hit.radius self.score += points_gained log.info("Hit Radius: " + str(mob_hit.radius)) self.score_textes.append( Float_Text(str(points_gained), 60, mob_hit.rect.midtop[0], mob_hit.rect.midtop[1] - 10)) expl = Explosion(self.explosion_anim, mob_hit.rect.center, 'lg') self.sprites.add(expl) new_mob = Mob() # respawn a new mob new_mob.add(self.mobs, self.sprites) if random.random() > self.power_up_rate: # 90% power = Power_Up(mob_hit.rect.center) power.add(self.sprites, self.power_ups) # list of power_ups collided with player ; power_ups are deleted power_up_hits_with_player = pygame.sprite.spritecollide( self.player, self.power_ups, True) for pu_hit in power_up_hits_with_player: level = pu_hit.level if pu_hit.type == 'shield': self.sound_handler.play("shield") bonus = 1 if level == 'bronze' else 3 if level == 'silver' else 9 bonus *= self.player.initial_shield // random.randrange( 12, 30) # 20 / 40 / 60 % self.player.shield += bonus self.player.shield = self.player.initial_shield if self.player.shield > self.player.initial_shield else self.player.shield self.shield_bonus_textes.append( Float_Text(str(bonus), 60, pu_hit.rect.midtop[0], pu_hit.rect.midtop[1] - 10)) elif pu_hit.type == 'bolt': self.sound_handler.play("bolt") self.player.shoot_bonus_counter += 3 * ( 1 if level == 'bronze' else 2 if level == 'silver' else 4) # moving floating text about points got from destroying mobs self.score_textes = list( filter(lambda x: x.lifetime > 0, self.score_textes)) for s in self.score_textes: s.update(2, 2) # moving floating text about shield bonuses self.shield_bonus_textes = list( filter(lambda x: x.lifetime > 0, self.shield_bonus_textes)) for s in self.shield_bonus_textes: s.update(1, 1)
def newMob(): m = Mob(ui_settings) all_sprites.add(m) mobs.add(m)
all_sprites.update() # mobs and bullets collision. hits = pygame.sprite.groupcollide(mobs, bullets, True, True) for hit in hits: stats.score += 50 - hit.radius score_board.prep_score() explode = Explosion(ui_settings, mob_explose_sheet, 64, 64, hit.rect.center) explode.effects.play() all_sprites.add(explode) # Randomize the chances of getting a powerupsself. if random.random() > 0.9: power = Powerup(ui_settings, hit.rect.center) all_sprites.add(power) powers.add(power) m = Mob(ui_settings) all_sprites.add(m) mobs.add(m) # Check if the ship hit the powersself. powerhits = pygame.sprite.spritecollide(player, powers, True) if powerhits: for hit in powerhits: hit.effects.play() if hit.power_type == 'shield': player.shield += random.randrange(10, 20) if player.shield >= 100: player.shield = 100 elif hit.power_type == 'gun': player.powerup()
def makeMap(self, game): if self.level % 2 == 1 or self.level == 20: # This checks to see if the level is odd, or the last level to load map otherwise random level f = open(os.path.join(LVLDIR, 'lvl{}.txt').format(self.level), 'r') lines = f.readlines() self.map_of_level = lines else: # this is where we read in the blank map, pass it to populate level then continue with the makemap f = open(os.path.join(LVLDIR, 'level.txt'), 'r') lines = f.readlines() self.map_of_level = lines self.populateLevel(game) walls = ['#', '7', '8', 'X', 'Y', 'D', 'R', 'M', 'L', 'V', '=', '/'] for a in range(len(self.map_of_level)): for b in range(len(self.map_of_level[a])): y = a * IMGSIZE x = b * IMGSIZE # ---------------Walls, floors etc----------------------------------------------------------------------------- if self.map_of_level[a][b] not in walls: self.floors.append(pygame.Rect(x, y, IMGSIZE, IMGSIZE)) if self.map_of_level[a][b] == '#' or self.map_of_level[a][b] == '6' or self.map_of_level[a][b] == 'R': self.walls.append(pygame.Rect(x, y, IMGSIZE, IMGSIZE)) if self.map_of_level[a][b] == 'X': breakable_wall = Object(os.path.join(IMGDIR, 'breakable.bmp'), x, y) self.breakable.append(breakable_wall) if self.map_of_level[a][b] == 'Y': breakable_wall = Object(os.path.join(IMGDIR, 'breakable.bmp'), x, y) self.triggered_walls['Y'].append(breakable_wall.rect) self.breakable.append(breakable_wall) if self.map_of_level[a][b] == 'M': moveable_wall = MobTile(os.path.join(IMGDIR, 'breakable.bmp'), x, y) self.breakable.append(moveable_wall) self.moveable_walls.append(moveable_wall) if self.map_of_level[a][b] == 'D': door = Door(os.path.join(IMGDIR, 'door.bmp'), x, y) self.doors.append(door) if self.map_of_level[a][b] == ':': self.hidden_walls.append(pygame.Rect(x, y, IMGSIZE, IMGSIZE)) if self.map_of_level[a][b] == '7': wall = pygame.Rect(x, y, IMGSIZE, IMGSIZE) self.triggered_walls['7'].append( wall) # uses a dictionary with a list as the value to keep track off all walls to be triggered if self.map_of_level[a][b] == '8': wall = pygame.Rect(x, y, IMGSIZE, IMGSIZE) self.triggered_walls['8'].append(wall) if self.map_of_level[a][b] == 'L': self.exits.append(pygame.Rect(x, y, IMGSIZE, IMGSIZE)) if self.map_of_level[a][b] == 'V': lava = Object(os.path.join(IMGDIR, 'lava.bmp'), x, y) self.lava.append(lava) if self.map_of_level[a][b] == '=': pit = Object(os.path.join(IMGDIR, 'pit.bmp'), x, y) self.pits.append(pit) if self.map_of_level[a][b] == 'R': water = pygame.Rect(x, y, IMGSIZE, IMGSIZE) self.water.append(water) if self.map_of_level[a][b] == '/': tree_wall = Object(os.path.join(IMGDIR, 'tree.bmp'), x, y) self.breakable.append(tree_wall) # ----------------Player------------------------------------------------------------------------------------------ if self.map_of_level[a][b] == 'P': game.player.rect.top = y game.player.rect.left = x # -----------------MOBS------------------------------------------------------------------------------- if self.map_of_level[a][b] == '1': mob = Mob(os.path.join(IMGDIR, 'gnome.bmp'), x, y, 1, 'slow') self.mobs.append(mob) if self.map_of_level[a][b] == '2': mob = Mob(os.path.join(IMGDIR, 'elf_mummy.bmp'), x, y, 2, 'medium') self.mobs.append(mob) if self.map_of_level[a][b] == '3': mob = Mob(os.path.join(IMGDIR, 'ogre_lord.bmp'), x, y, 3, 'fast') self.mobs.append(mob) if self.map_of_level[a][b] == '4': mob = Mob(os.path.join(IMGDIR, 'umber_hulk.bmp'), x, y, 3, 'fast') self.mobs.append(mob) # ---------------Items----------------------------------------------------------------- if self.map_of_level[a][b] == '+': item = Object(os.path.join(IMGDIR, 'gem.bmp'), x, y, 'gem') self.items.append(item) if self.map_of_level[a][b] == 'W': item = Object(os.path.join(IMGDIR, 'whip.bmp'), x, y, 'whip') self.items.append(item) if self.map_of_level[a][b] == 'T': item = Object(os.path.join(IMGDIR, 'teleport.bmp'), x, y, 'teleport') self.items.append(item) if self.map_of_level[a][b] == 'K': item = Object(os.path.join(IMGDIR, 'key.bmp'), x, y, 'key') self.items.append(item) if self.map_of_level[a][b] == '*': item = Object(os.path.join(IMGDIR, 'gold.bmp'), x, y, 'gold') self.items.append(item) if self.map_of_level[a][b] == 'C': item = Object(os.path.join(IMGDIR, 'chest.bmp'), x, y, 'chest') self.items.append(item) if self.map_of_level[a][b] == 'Q': item = Object(os.path.join(IMGDIR, 'ring.bmp'), x, y, 'whip_ring') self.items.append(item) if self.map_of_level[a][b] == '?': item = Object(os.path.join(IMGDIR, 'sack.bmp'), x, y, 'gem_sack') self.items.append(item) if self.map_of_level[a][b] == 'B': item = Object(os.path.join(IMGDIR, 'bomb.bmp'), x, y, 'bomb') self.items.append(item) if self.map_of_level[a][b] == '!': item = Tablet(os.path.join(IMGDIR, 'tablet.bmp'), x, y, self.level) self.items.append(item) # ----------------SPELLS---------------------------------------------------------------------- if self.map_of_level[a][b] == 'I': item = Object(os.path.join(IMGDIR, 'invisibility.bmp'), x, y, 'invisibility') self.items.append(item) if self.map_of_level[a][b] == 'Z': item = Object(os.path.join(IMGDIR, 'freeze_monster.bmp'), x, y, 'freeze') self.items.append(item) if self.map_of_level[a][b] == 'S': item = Object(os.path.join(IMGDIR, 'slow_monster.bmp'), x, y, 'slow') self.items.append(item) if self.map_of_level[a][b] == 'F': item = Object(os.path.join(IMGDIR, 'fast_monster.bmp'), x, y, 'fast') self.items.append(item) if self.map_of_level[a][b] == ']': item = Object(os.path.join(IMGDIR, 'sack.bmp'), x, y, 'more_monsters') self.items.append(item) if self.map_of_level[a][b] == '%': item = Object(os.path.join(IMGDIR, 'zap_monster.bmp'), x, y, 'zap') self.items.append(item) if self.map_of_level[a][b] == '.': item = Object(os.path.join(IMGDIR, 'tele_trap.bmp'), x, y, 'tele_trap') self.items.append(item) # ---------------Map Triggers------------------------------------------------------------- if self.map_of_level[a][b] == 'H': trigger = Tile(x, y, False, 'gems') self.triggers.append(trigger) if self.map_of_level[a][b] == '`': trigger = Tile(x, y, False, 'walls1') # reveal hidden walls labeled as 7 on map self.triggers.append(trigger) if self.map_of_level[a][b] == ',': trigger = Tile(x, y, False, 'walls2') # reveal hidden walls labeled as 8 on map. self.triggers.append(trigger) if self.map_of_level[a][b] == '~': trigger = Tile(x, y, False, 'remove_walls') self.triggers.append(trigger) if self.map_of_level[a][b] == 'A': trigger = Tile(x, y, False, 'move_walls') self.triggers.append(trigger) if self.map_of_level[a][b] == '9': trigger = Tile(x, y, False, "lava_flow") self.triggers.append(trigger) if self.map_of_level[a][b] == 'N': trigger = Tile(x, y, False, 'invis_walls') self.triggers.append(trigger) if self.map_of_level[a][b] == 'E': trigger = Tile(x, y, False, 'earthquake') self.triggers.append(trigger) # ---------------KROZ Letters------------------------------------------------------------------------------------------ if self.map_of_level[a][b] == '<': item = Object(os.path.join(IMGDIR, 'k.bmp'), x, y, 'k') self.items.append(item) # self.triggers.append(item) if self.map_of_level[a][b] == '[': item = Object(os.path.join(IMGDIR, 'r.bmp'), x, y, 'r') self.items.append(item) # self.triggers.append(item) if self.map_of_level[a][b] == '|': item = Object(os.path.join(IMGDIR, 'o.bmp'), x, y, 'o') self.items.append(item) # self.triggers.append(item) if self.map_of_level[a][b] == '"': item = Object(os.path.join(IMGDIR, 'z.bmp'), x, y, 'z') self.items.append(item) # self.triggers.append(item) self.panel.messages.append('Press any key to start level')
def playgame(screen, gamestate): gamestate.next_level() opendoor_snd = pygame.mixer.Sound(data.filepath("open_door.wav")) pickup_key_snd = pygame.mixer.Sound(data.filepath("pickup_key.wav")) background = pygame.Surface(screen.get_size()) background = background.convert() background.fill(BG_COLOUR) timeupfont = pygame.font.SysFont("Arial", 30) tbuffer = TextBufferRenderer("Arial", 15) m = maze.Maze(22, 18) m.generate() maze_surface = pygame.Surface((m.width * 16, m.height * 16), pygame.constants.SRCALPHA, 32).convert_alpha() gamestate.maze = m #fixed positions player_start_node = m.get_node(0, 0) player_sprite = RailsThing(gamestate, player_start_node.pos_px) gamestate.player = player_sprite f = Fog(gamestate) lock_start_node = m._data[-1] lockspr = LockedDoor(gamestate, lock_start_node.pos_px) # ensure everything else is on its own square # but not too close to player availnodes = [ x for x in m._data if x.distance_from(player_start_node) > INIT_DISTANCE_FROM_PLAYER ] random.shuffle(availnodes) for x in xrange(gamestate.mobs_available): n = availnodes.pop() mob = Mob(gamestate, n.pos_px) if random.choice([True, False, False]): mob.toggle_mob_type() gamestate.mobs.append(mob) availkeynodes = [x for x in m._data if \ x.distance_from(player_start_node) > INIT_DISTANCE_FROM_PLAYER and \ x.distance_from(lock_start_node) > INIT_DISTANCE_FROM_PLAYER ] key_node = random.choice(availkeynodes) keyspr = Key(gamestate, key_node.pos_px) mutator_surface = pygame.Surface((64, 64), pygame.constants.SRCALPHA, 32).convert_alpha() mutator_surface.fill((255, 255, 255, 30)) charge_surface = surfutil.load_sprite_surface("chargebar.png") charge_surface = pygame.transform.scale( charge_surface, (charge_surface.get_width() * 2, charge_surface.get_height() * 2)) spark_surface = surfutil.load_sprite_surface("spark.png") # blank screen screen.blit(background, (0, 0)) pygame.display.flip() clock = pygame.time.Clock() start_time = pygame.time.get_ticks() MAZE_POS = (16, 16) death_count = 0 raw_click_pos = (0, 0) while True: # USER INPUT # ====================================== for event in pygame.event.get(): if event.type == pygame.QUIT: return 'quit' elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: return 'title' elif event.type == pygame.KEYDOWN and event.key == pygame.K_g: print 'No soup for you GruikInc!' # m.generate() # drawmaze(maze_surface, m) elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: raw_click_pos = pygame.mouse.get_pos() #print raw_click_pos click_pos = (raw_click_pos[0] - MAZE_POS[0], raw_click_pos[1] - MAZE_POS[1]) if gamestate.charge == MAX_CHARGE: f.mutate_snd.play() r = pygame.Rect(click_pos, mutator_surface.get_size()) selected = set(m.collides_nodes(r)) m.regenerate_selected(selected) gamestate.charge = 0 # UPDATE # ====================================== current_time = pygame.time.get_ticks() gamestate.time_left = max( int(gamestate.time - (current_time - start_time) / 1000), 0) if gamestate.time_left <= 0 and not player_sprite.is_dead: player_sprite.die(None) player_sprite.update() keyspr.update() lockspr.update() player_hitbox = player_sprite.hitbox for mob in gamestate.mobs: mob.update() for mob in gamestate.alive_mobs: if player_hitbox.colliderect(mob.hitbox): player_sprite.on_mob_hit(mob) if keyspr.follow_sprite is not player_sprite and player_hitbox.colliderect( keyspr.hitbox): pickup_key_snd.play() gamestate.score += 200 keyspr.follow(player_sprite) if keyspr.follow_sprite is player_sprite and lockspr.x == player_sprite.x and lockspr.y == player_sprite.y: opendoor_snd.play() gamestate.score += 200 gamestate.mobs_saved = len(player_sprite.mob_followers) gamestate.mobs_saved_total += gamestate.mobs_saved return 'win' f.update() if f.passed: f = Fog(gamestate) if player_sprite.is_dead: death_count += 1 if death_count > 100: return 'gameover' gamestate.charge = min(MAX_CHARGE, gamestate.charge + CHARGE_PER_FRAME) current_time = pygame.time.get_ticks() gamestate.sparks = [ x for x in gamestate.sparks if (current_time - x[0]) < SPARK_TIME_MS ] # RENDER # ====================================== screen.blit(background, (0, 0)) m.render_to_surface(maze_surface) lockspr.render(maze_surface) for mob in gamestate.mobs: mob.render(maze_surface) keyspr.render(maze_surface) # make sure we can always see your dude player_sprite.render(maze_surface) # fog f.render(maze_surface) #sparks for (t, p) in gamestate.sparks: maze_surface.blit(spark_surface, p) screen.blit(maze_surface, MAZE_POS) screen.blit(mutator_surface, pygame.mouse.get_pos()) tbuffer.clear() tbuffer.add("Level: %d" % gamestate.level) tbuffer.add("Score: %d" % gamestate.score) # print the status c = ega.BRIGHT_MAGENTA if gamestate.time_left < 15 and gamestate.time_left & 1: c = ega.BRIGHT_WHITE tbuffer.add("Time: %d" % gamestate.time_left, c) tbuffer.render_to_surface(screen, SCORE_POS) # print time up msg if needed if gamestate.time_left <= 0: timeupsurf = timeupfont.render("TIME UP!", True, ega.BRIGHT_MAGENTA) screen.blit(timeupsurf, (128, 100)) charge_width = int(charge_surface.get_width() * gamestate.charge / MAX_CHARGE) charge_area = pygame.Rect(0, 0, charge_width, 100) screen.blit(charge_surface, (380, 280), charge_area) pygame.display.flip() # TIMING # ====================================== clock.tick(30)
def game_screen(screen): clock = pygame.time.Clock() # Carrega o fundo do jogo background = pygame.image.load(path.join('Fundo4.jpg')).convert() background_rect = background.get_rect() x = 0 vx = 0 # Carrega os sons do jogo pygame.mixer.music.load(path.join(snd_dir, 'naruto.mp3')) pygame.mixer.music.set_volume(0.4) boom_sound = pygame.mixer.Sound(path.join(snd_dir, 'expl3.wav')) destroy_sound = pygame.mixer.Sound(path.join(snd_dir, 'expl6.wav')) pew_sound = pygame.mixer.Sound(path.join(snd_dir, 'pew.wav')) player = Player() # Cria um grupo só do inimigo monsters = pygame.sprite.Group() # Cria um grupo de todos os sprites e adiciona a nave. all_sprites = pygame.sprite.Group() all_sprites.add(player) bullets = pygame.sprite.Group() pygame.mixer.music.play(loops=-1) PLAYING = 0 state = PLAYING DONE = 2 while state != DONE: # Ajusta a velocidade do jogo. clock.tick(FPS) if random.randrange(1, 100) == 1: mob2 = Mob2() all_sprites.add(mob2) monsters.add(mob2) if random.randrange(1, 200) == 1: mob3 = Mob3() all_sprites.add(mob3) monsters.add(mob3) if random.randrange(1, 200) == 1: mob = Mob() # Cria um grupo só do inimigo all_sprites.add(mob) monsters.add(mob) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: vx = 8 player.imgs = [] n = 6 for i in range(n): player.imgs.append( pygame.image.load( path.join(img_dir, "Left{0}.png".format(i + 1))).convert()) player.frame = 0 player.step = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1, 1)) if event.key == pygame.K_RIGHT: vx = -8 player.imgs = [] n = 6 for i in range(n): player.imgs.append( pygame.image.load( path.join(img_dir, "Run{0}.png".format(i + 1))).convert()) player.frame = 0 player.step = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1, 1)) if event.key == pygame.K_UP: #pulo player.speedy = -15 g = 1 while player.rect.y < HEIGHT / 2 - 45.5: #gravidade player.speedy += g all_sprites.update() time.sleep(1e-2) screen.fill(BLACK) screen.blit(background, (x, 0)) all_sprites.draw(screen) pygame.display.flip() if event.key == pygame.K_UP and event.key == pygame.K_RIGHT: vx = -8 player.speedy = -1 g = 1.5 while player.rect.y < HEIGHT / 2 - 45.5: #gravidade x += vx player.speedy += g all_sprites.update() time.sleep(1e-2) screen.fill(BLACK) screen.blit(background, (x, 0)) all_sprites.draw(screen) pygame.display.flip() if event.key == pygame.K_DOWN: player.speedy = 10 if event.key == pygame.K_SPACE: player.imgs = [] n = 5 for i in range(n): player.imgs.append( pygame.image.load( path.join(img_dir, "Punch{0}.png".format(i + 1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step = 5 player.image = pygame.transform.scale(player.image, (1, 1)) bullet = Bullet(player.rect.centerx, player.rect.top) all_sprites.add(bullet) bullets.add(bullet) pew_sound.play() if event.key == pygame.K_m: player.imgs = [] n = 6 for i in range(n): player.imgs.append( pygame.image.load( path.join(img_dir, "R{0}.png".format(i + 1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.step = 5 player.image = pygame.transform.scale(player.image, (1, 1)) ras = Rasengan(player.rect.centerx, player.rect.top) all_sprites.add(ras) bullets.add(ras) pew_sound.play() ################################# # Verifica se soltou alguma tecla. if event.type == pygame.KEYUP: # Dependendo da tecla, altera a velocidade. if event.key == pygame.K_LEFT: vx = 0 player.imgs = [] n = 6 for i in range(n): player.imgs.append( pygame.image.load( path.join( img_dir, "Naruto{0}.png".format(i + 1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1, 1)) player.speedx = 0 if event.key == pygame.K_RIGHT: vx = 0 player.imgs = [] n = 6 for i in range(n): player.imgs.append( pygame.image.load( path.join( img_dir, "Naruto{0}.png".format(i + 1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1, 1)) player.speedx = 0 if event.key == pygame.K_UP: if event.key == pygame.K_RIGHT: vx = 0 player.imgs = [] n = 6 for i in range(n): player.imgs.append( pygame.image.load( path.join( img_dir, "Naruto{0}.png".format(i + 1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale( player.image, (1, 1)) player.speedx = 0 if event.key == pygame.K_DOWN: player.speedy = 0 if event.key == pygame.K_SPACE: player.imgs = [] n = 6 for i in range(n): player.imgs.append( pygame.image.load( path.join(img_dir, "Run{0}.png".format(i + 1))).convert()) player.frame = 0 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1, 1)) player.speedx = 0 player.step = 5 if event.key == pygame.K_m: player.imgs = [] player.steps = 5 n = 6 for i in range(n): player.imgs.append( pygame.image.load( path.join(img_dir, "Run{0}.png".format(i + 1))).convert()) player.frame = 0 player.steps = 5 player.image = player.imgs[player.frame] player.image = pygame.transform.scale(player.image, (1, 1)) player.speedx = 0 while player.rect.y < HEIGHT / 2 - 45.5: #gravidade player.speedy += g all_sprites.update() time.sleep(1e-2) screen.fill(BLACK) screen.blit(background, (x, 0)) all_sprites.draw(screen) pygame.display.flip() # Verifica se houve colisão entre tiro e inimigo hits = pygame.sprite.groupcollide(monsters, bullets, True, True) for hit in hits: # Pode haver mais de um # O meteoro e destruido e precisa ser recriado destroy_sound.play() #m = Mob() #all_sprites.add(m) #monsters.add(m) # Verifica se houve colisão entre personagem e inimigo hits = pygame.sprite.spritecollide(player, monsters, False, pygame.sprite.collide_circle) if hits: # Toca o som da colisão boom_sound.play() time.sleep(5) # Precisa esperar senão fecha running = False # Depois de processar os eventos. # Atualiza a acao de cada sprite. all_sprites.update() # A cada loop, redesenha o fundo e os sprites screen.fill(BLACK) rel_x = x % background.get_rect().width x += vx screen.blit(background, (rel_x - background.get_rect().width, 0)) if rel_x < WIDTH: screen.blit(background, (rel_x, 0)) all_sprites.draw(screen) # Depois de desenhar tudo, inverte o display. pygame.display.flip() return QUIT
def run(self, case): if case == 321: self._floor.set_floor(5, 8, Mob(5, 8, 'golden', self._floor)) golden = self._floor.get_floor(5, 8) messagebox.showinfo( 'golden', 'Haha, you made it here! Ger ready to die!') golden.fight(self._prot, True) golden.move_to(5, 8) messagebox.showinfo('golden', 'It seems like that I am not ready now. \ I will see you at floor 40 and beat your ass off!') golden.disappear() elif case == 401: messagebox.showinfo( 'golden', 'You dare come here! I have been waitting for ages!') messagebox.showinfo('golden', 'Go ghost soldiers!') for i, j in [(2, 3), (3, 3), (4, 3)]: ghost_soldier = self._floor.get_floor(i, j) ghost_soldier.move_to(5, 5) messagebox.showinfo('ghost soldier', 'Fight!!!') ghost_soldier.fight(self._prot, True) messagebox.showinfo('golden', 'Go soldiers!') for i, j in [(6, 3), (7, 3), (8, 3)]: soldier = self._floor.get_floor(i, j) soldier.move_to(5, 5) messagebox.showinfo('soldier', 'Fight!!!') soldier.fight(self._prot, True) messagebox.showinfo('golden', 'Go swords man!') for i, j in [(1, 1), (2, 1), (3, 1)]: swords_man = self._floor.get_floor(i, j) swords_man.move_to(5, 5) messagebox.showinfo('swords man', 'Fight!!!') swords_man.fight(self._prot, True) messagebox.showinfo('golden', 'Go knights! End him!') for i, j in [(7, 1), (8, 1), (9, 1)]: knight = self._floor.get_floor(i, j) knight.move_to(5, 5) messagebox.showinfo('knight', 'Fight!!!') knight.fight(self._prot, True) knight.disappear() messagebox.showinfo( 'golden', "Now you must be weak! Let me end you!") golden = self._floor.get_floor(5, 0) golden.move_to(5, 5) golden.fight(self._prot, True) messagebox.showinfo( 'golden', "I ... I'm not ready again ... I won't give you any chance next time!") golden.move_to(5, 3) messagebox.showinfo('golden', "You are a dead man walking!") self._floor.set_floor(5, 0, 'upstairs') golden.disappear() self.run(402) elif case == 421: messagebox.showinfo('golden', "You again??? I'm not ready today!") golden = self._floor.get_floor(5, 8) golden.move_to(5, 7) messagebox.showinfo('Lord', "COWARD!") self.run(422) messagebox.showinfo('Lord', "Kill this useless coward!") golden.disappear() messagebox.showinfo('Lord', "And I will see you later, Bravo!") self.run(423) elif isinstance(PLOT_LIB[case], tuple): if self.detect(PLOT_LIB[case][0]): for i, j in PLOT_LIB[case][1]: if self._floor.get_floor(i, j): self._floor.del_floor(i, j)
if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: player.shoot(all_sprites, bullets) if event.key == pygame.K_s: player.live(all_sprites, lifers) if event.key == pygame.K_q: running = False T2 = pygame.time.get_ticks() all_sprites.update() if c is 0: if T2 - T1 > 2000: m = Mob() c = 1 d = 0 all_sprites.add(m) mobs.add(m) if d is 0: if T2 - T1 > 8000: T1 = T2 c = 0 m.kill() else: if T2 - T1 > 13000: T1 = T2 c = 0 m.kill() fits = pygame.sprite.groupcollide(mobs, lifers, False, True)
import mcpi.minecraft as minecraft import mcpi.block as block import time # the code was getting hard to read, so we # move the mob class to another file. from mob import Mob # Run the code world = minecraft.Minecraft.create() time.sleep(5) coordinates = world.player.getPos() mob = Mob(world, coordinates, 3) time.sleep(5) mob.scan()
def checkCollision(self, game, old_position, new_position): position = old_position if new_position.collidelist( game.level_map.walls ) == -1: # check to see if colliding with walls -1 is False if new_position.collidelist( game.level_map.items ) == -1: # check to see if colliding with items pass else: for item in game.level_map.items: # iterate through items and remove them from the map and the list if item.rect == new_position: game.level_map.items.remove(item) if item.kind == 'gem' and self.gems < self.maxGems: self.gems += 1 self.score += 10 game.level_map.panel.messages.append( 'You pick up a gem. Points and Life!') if item.kind == 'whip': self.whips += 1 self.score = +10 game.level_map.panel.messages.append( 'You pick up a Whip.') if item.kind == 'gold': game.gold.play() self.score += 500 game.level_map.panel.messages.append( 'You pick up a pile of gold.') if item.kind == 'teleport': self.teleports += 1 self.score += 10 game.level_map.panel.messages.append( 'A teleport scroll.') if item.kind == 'key': self.keys += 1 self.score += 10 game.level_map.panel.messages.append('A key.') if item.kind == 'chest': gem = random.randint(0, 3) whip = random.randint(0, 3) game.level_map.panel.messages.append( 'You open a treasure chest and find {0} gems and {1} whips.' .format(gem, whip)) self.gems += gem self.whips += whip self.score += 50 if item.kind == 'whip_ring': self.weapon.power += 1 self.score += 1000 game.level_map.panel.messages.append( 'You find a ring of Whip Power!') if item.kind == 'gem_sack': self.gems += 25 self.score += 125 game.level_map.panel.messages.append( 'You found a pouch with 25 Gems') if item.kind == 'bomb': game.bomb.play() self.score += 500 center_x = item.rect.centerx center_y = item.rect.centery radius = IMGSIZE * 5 for wall in game.level_map.breakable: x = wall.rect.centerx y = wall.rect.centery if game.isInRange(center_x, center_y, radius, x, y): game.level_map.breakable.remove(wall) game.level_map.moveable_walls.remove(wall) if item.kind == 'k' or item.kind == 'r' or item.kind == 'o' or item.kind == 'z': game.level_map.kroz.append(item.kind) if len(game.level_map.kroz) == 4: if game.level_map.kroz[0] == 'k' and game.level_map.kroz[1] == 'r' and \ game.level_map.kroz[2] == 'o' and game.level_map.kroz[3] == 'z': game.player.score += 10000 # play a sound game.level_map.panel.messages.append( 'You get the KROZ 10,000 point bonus!') if item.kind == 'tele_trap': position = self.teleport(game) return position # ---SPELLS----------------------------------------- if item.kind == 'freeze': game.stopTimers() self.score += 10 game.changeTimer(check_things, ETERNITY) game.level_map.panel.messages.append( 'You trigger a freeze monster spell!') if item.kind == 'slow': game.slowTimers() self.score += 10 game.changeTimer(check_things, ETERNITY) game.level_map.panel.messages.append( 'You trigger a slow monster spell!') if item.kind == 'fast': game.speedTimers() self.score += 10 game.changeTimer(check_things, ETERNITY) game.level_map.panel.messages.append( 'You trigger a speed monster spell!') if item.kind == 'invisibility': game.player.invisible = True self.score += 100 game.changeTimer(check_things, ETERNITY) game.level_map.panel.messages.append( 'You trigger an invisibiltiy spell!') if item.kind == 'more_monsters': for a in range(20, 50): space = random.choice(game.level_map.floors) x = space.left y = space.top mob = Mob(os.path.join(IMGDIR, 'gnome.bmp'), x, y, 1, 'slow') game.level_map.mobs.append(mob) if item.kind == 'tablet': game.player.score += 10000 game.level_map.panel.messages.append(item.message) # TRIGGERS----------------------------------------------------------------------------------------------------------------------------------- if new_position.collidelistall( game.level_map.triggers ): # triggers that set of special events etc for trigger in game.level_map.triggers: if trigger.rect == new_position: trigger.trigger(game) if new_position.collidelistall( game.level_map.doors): # locked doors for item in game.level_map.doors: if item.rect == new_position: if self.keys > 0: self.keys -= 1 game.level_map.doors.remove(item) else: game.hit_wall.play() new_position = old_position if new_position.collidelistall( game.level_map.mobs): # collision with mobs for mob in game.level_map.mobs: if mob.rect == new_position: game.mob_hit_player.play() self.gems -= mob.damage self.score += 10 game.level_map.mobs.remove(mob) if new_position.collidelistall( game.level_map.breakable ): # breakable is a list of breakable walls, needed to seperate from regular walls for wall in game.level_map.breakable: if wall.rect == new_position: game.hit_wall.play() new_position = old_position if new_position.collidelistall( game.level_map.hidden_walls ): # this is the hidden walls, maybe only level 1? when bumped it appears for wall in game.level_map.hidden_walls: if wall == new_position: game.hit_wall.play() new_position = old_position game.level_map.walls.append(wall) if new_position.collidelistall( game.level_map.exits): # did they get to the level exit? for level_exit in game.level_map.exits: if level_exit == new_position: self.score += 50 game.level_map.level += 1 game.level_map.clearLevel() RLmap.renderAll(game) game.clock.tick(2) game.level_map.makeMap(game) game.level_map.panel.messages = [] RLmap.renderAll(game) '''while not pygame.event.wait().type in (QUIT, KEYDOWN): pass''' return if new_position.collidelistall(game.level_map.pits): anim.pitFall(game) if new_position.collidelistall( game.level_map.lava): # lava collision for lava in game.level_map.lava: if lava.rect == new_position: game.lava.play() self.gems -= 10 game.level_map.lava.remove(lava) game.level_map.floors.append(lava.rect) ''' THIS SHOULD TAKE points away if player hits mobtile, however it only works if hitting a space they used to be in. not working right obviosuly if new_position.collidelistall(game.level_map.moveable_walls): self.score -= 10 new_position = old_position return''' ''' take this out to try and return position instwead self.rect = new_position else: game.hit_wall.play() self.rect = old_position''' position = new_position else: game.hit_wall.play() position = old_position return position
pygame.mixer.music.play(loops=-1) running = True while running: # Ajusta a velocidade do jogo. clock.tick(FPS) if random.randrange(1,100) == 1: mob2 = Mob2() all_sprites.add(mob2) monsters.add(mob2) if random.randrange(1,200) == 1: mob3 = Mob3() all_sprites.add(mob3) monsters.add(mob3) if random.randrange(1,200) == 1: mob = Mob() # Cria um grupo só do inimigo all_sprites.add(mob) monsters.add(mob) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: vx = 8
def create(): """ Sets game objects at initial state and returns them. """ # Declare the player state["player"] = Player() # Declare the actions state["action"] = { "attack": Action(name="attack", grammar={ "d_obj_required": True, "preps_accepted": ("with", "using"), }, run=run["attack"]), "die": Action(name="die", grammar={ "d_obj_prohibited": True, "i_obj_prohibited": True, }, run=run["die"]), "drop": Action(name="drop", grammar={ "d_obj_required": True, "i_obj_prohibited": True, }, run=run["drop"]), "eat": Action(name="eat", grammar={ "d_obj_required": True, "i_obj_prohibited": True, }, run=run["eat"]), "get": Action(name="get", grammar={ "d_obj_required": True, "i_obj_prohibited": True, }, run=run["get"]), "go": Action(name="go", grammar={ "adv_required": True, }, run=run["go"]), "help": Action(name="help", grammar={ "d_obj_prohibited": True, "i_obj_prohibited": True, }, run=run["help"]), "inventory": Action(name="inventory", grammar={ "d_obj_prohibited": True, "i_obj_prohibited": True, }, run=run["inventory"]), "load": Action(name="load", grammar={ "d_obj_prohibited": True, "i_obj_prohibited": True, }, run=run["load"]), "look": Action(name="look", grammar={ "d_obj_prohibited": True, "preps_accepted": ( "at", "in", "into", "inside", "beneath", "underneath", "under", "below", ) }, run=run["look"]), "quit": Action(name="quit", grammar={ "d_obj_prohibited": True, "i_obj_prohibited": True, }, run=run["quit"]), "save": Action(name="save", grammar={ "d_obj_prohibited": True, "i_obj_prohibited": True, }, run=run["save"]), "talk": Action(name="talk", grammar={ "d_obj_prohibited": True, "i_obj_required": True, "preps_accepted": ( "to", "with", "at", ) }, run=run["talk"]), "use": Action(name="use", grammar={ "d_obj_required": True, "preps_accepted": ( "with", "on", ) }, run=run["use"]), "wait": Action(name="wait", grammar={}, run=run["wait"]), } # Declare the items state["item"] = { "fists": Weapon( slug="fists", name=text_style['item']("fists"), long_name=f"your {text_style['item']('fists')}", desc=None, stats={ "damage": 1, "accuracy": 0.9 }, attack_text= (f"You pretend you're a boxer and attempt a left hook with your {text_style['item']('fists')}.", f"You leap forward, putting your {text_style['item']('fists')} in front of you in the hope that they " f"do some damage.", f"You swing your {text_style['item']('fists')} around in your best imitation of a helicopter." ), tags=["obtainable"]), "knife": Weapon( slug="knife", name=text_style['item']("knife"), long_name=f"a {text_style['item']('knife')}", desc=text_style['desc'] ("It's a knife. Like for cutting your steak with, except designed for steak that is actively trying to " "kill you. "), weight=2, stats={ "damage": 2, "accuracy": 0.95 }, attack_text=( f"Gripping your {text_style['item']('knife')} in a {text_style['item']('knife')}-like manner, you " f"stab with the stabby part.", f"You slash forward with your {text_style['item']('knife')}, praying for a hit.", ), tags=["obtainable"]), "sword": Weapon( slug="sword", name=text_style['item']("sword"), long_name=f"a {text_style['item']('sword')}", desc=text_style['desc'] ("This sword has seen better days, but it's probably got one or two good swings left in it." ), weight=3, stats={ "damage": 3, "accuracy": 0.8 }, attack_text=( f"You swing wildly with your {text_style['item']('sword')}.", ), tags=["obtainable"]), "lantern": LightSource( slug="lantern", name=text_style['item']("lantern"), long_name=f"an extinguished {text_style['item']('lantern')}", desc=text_style['desc'] ("The lantern is unlit. It has fuel though; you imagine you could get it lit if you had some matches." ), weight=1, tags=["obtainable"]), "amulet_of_yendor": Item(slug="amulet_of_yendor", name=text_style['item']("Amulet of Yendor"), long_name=f"the {text_style['item']('Amulet of Yendor')}", desc=text_style['desc']( "This amulet is said to contain unimaginable power."), weight=0.5, tags=["obtainable"]), "cheese": Item(slug="cheese", name=text_style['item']("cheese"), long_name=f"a hunk of {text_style['item']('cheese')}", desc=text_style['desc']( "It is a hunk of cheese. Looks all right."), weight=0.25, tags=["obtainable", "food"]), "goblin_corpse": Item( slug="goblin_corpse", name=text_style['item']("goblin corpse"), long_name=f"a {text_style['item']('goblin corpse')}", desc=text_style['desc'] (f"It's a dead goblin. You turn it over, looking for valuables, but all you can find is " f"a\\crumpled {text_style['item_in_desc']('matchbook')}, which falls to the floor next to the corpse. " ), tags=["corpse"]), "lever": Item( slug="lever", name=text_style['item']("lever"), long_name= f"a {text_style['item']('lever')} jutting from the cliff side", desc=text_style['desc'] ("It looks close enough to reach. Your fingers twitch. You never could resist a good lever." )), "matchbook": Item( slug="matchbook", name=text_style['item']("matchbook"), long_name=f"a {text_style['item']('matchbook')}", desc=text_style['desc'] ("At first glance, the crumpled matchbook appears to be empty, but looking closer,\\you see it still " "has a few matches inside. "), weight=0.1, tags=["obtainable"]), "rope": Item(slug="rope", name=text_style['item']("rope"), long_name=f"some {text_style['item']('rope')}", desc=text_style['desc']("Good, sturdy rope, about 50 feet long."), weight=2, tags=["obtainable"]), } # Declare the rooms state["room"] = { "outside": Room( slug="outside", name="Outside Cave Entrance", desc=text_style['desc'] (f"{text_style['dir_in_desc']('North')} of you, the cave mouth beckons." ), no_mobs=True, ), "foyer": Room( slug="foyer", name="Foyer", desc=text_style['desc'] (f"Dim light filters in from the {text_style['dir_in_desc']('south')}. Dusty passages " f"run {text_style['dir_in_desc']('north')} and {text_style['dir_in_desc']('east')}." ), init_items=[state["item"]["sword"]], ), "overlook": Room( slug="overlook", name="Grand Overlook", desc=text_style['desc'] (f"A steep cliff appears before you, falling into the darkness. Ahead to the " f"{text_style['dir_in_desc']('north')}, a lightflickers in the distance, but there is no way across " f"the chasm. A passage leads {text_style['dir_in_desc']('south')},away from the cliff." ), init_items=[state["item"]["rope"]], ), "narrow": Room( slug="narrow", name="Narrow Passage", desc=text_style['desc'] (f"The narrow passage bends here from {text_style['dir_in_desc']('west')} to " f"{text_style['dir_in_desc']('north')}. The smell of gold permeates the air." ), ), "treasure": Room( slug="treasure", name="Treasure Chamber", desc=text_style['desc'] (f"You've found the long-lost treasure chamber! Sadly, it has already been completely emptied " f"byearlier adventurers. The only exit is to the {text_style['dir_in_desc']('south')}." ), init_items=[state["item"]["lantern"]], ), "chasm": Room( slug="chasm", name="Over The Edge", desc=text_style['desc'] (f"You find yourself suspended over a dark chasm, at the end of a rope that was clearly notlong " f"enough for this job. Glancing about, you see a {text_style['item_in_desc']('lever')} jutting out " f"from the wall, half hidden.The rope leads back {text_style['dir_in_desc']('up')}." ), dark=True, dark_desc=text_style['desc'] (f"You find yourself suspended over a dark chasm, at the end of a rope that was clearly notlong " f"enough for this job. It is dark. You can't see a thing. You are likely to be eaten by a grue.The " f"rope leads back {text_style['dir_in_desc']('up')}."), no_mobs=True, no_drop=True, init_items=[state["item"]["lever"]]), "final": Room( slug="final", name="Across the Chasm", desc=text_style['desc'] (f"You find a small, elaborately decorated room. Sunlight streams down a hole in the ceiling " f"highabove you, illuminating an altar upon which sits the fabled " f"{text_style['item_in_desc']('Amulet of Yendor')}.To the {text_style['dir_in_desc']('south')}, a " f"bridge leads back the way you came."), init_items=[state["item"]["amulet_of_yendor"]]), } # Declare the mobs mob_types = { "goblin": lambda mob_id: Mob(mob_id=mob_id, name=text_style['mob']("goblin"), long_name=f"a {text_style['mob']('goblin')}", desc=text_style['desc'] (f"The {text_style['mob_in_desc']('goblin')} is eyeing you warily and shuffling his weight from one " f"foot to the other.A crude knife dangles from his belt."), text={ "enter": (f"A {text_style['mob']('goblin')} shuffles into the room. At the sight of you, he gives a squeal " f"of surprise and bares his teeth.", ), "exit": (f"The {text_style['mob']('goblin')} skitters out of the room, heading ", ), "idle": ( f"The {text_style['mob']('goblin')} grumbles nervously about how crowded the cave has " f"gotten lately.", f"The {text_style['mob']('goblin')} pulls out a knife, then thinks better of it and puts " f"the knife back.", f"The {text_style['mob']('goblin')} is momentarily transfixed by a rash on his elbow.", ), "dodge_success": (f"The {text_style['mob']('goblin')} leaps back, emotionally scarred by your violent outburst " f"but physically unharmed.", ), "dodge_fail": (f"The {text_style['mob']('goblin')} staggers back, wounded physically (and emotionally).", ), "dead": (f"The {text_style['mob']('goblin')} cries out in shock as your attack connects. He gives you a " f"baleful glare that fades intoa look of weary resignation as he slumps to the ground, dead.", ), "attack_success": (f"The {text_style['mob']('goblin')} whips its knife out towards you in a desperate arc. It carves " f"into you.", ), "attack_fail": (f"The {text_style['mob']('goblin')} whips its knife out towards you in a desperate arc. You dodge " f"nimbly out of the way.", ), "kill_player": (f"The {text_style['mob']('goblin')} screams at you and flies forward, plunging its knife into " f"your chest. You final thought,improbably, is a silent prayer that the " f"{text_style['mob']('goblin')}'s filthy knife doesn't give you an infection.", ) }, stats={ "health": 10, "damage": 2, "accuracy": .75, "evasion": .15 }, init_loc=state["room"]["foyer"], init_att="neutral", items=([state["item"]["goblin_corpse"]])) } state["mobs"] = [mob_types["goblin"](1)] # Link rooms together state["room"]["outside"].n_to = (state["room"]["foyer"], "You step into the mouth of the cave.") state["room"]["foyer"].s_to = ( state["room"]["outside"], "You head south, and find yourself outside the cave.") state["room"]["foyer"].n_to = ( state["room"]["overlook"], "You make your way north, and the cave opens up suddenly, revealing a vast chasm before you." ) state["room"]["foyer"].e_to = ( state["room"]["narrow"], "You take the eastern passage. It grows narrower until you have a hard time standing straight." ) state["room"]["overlook"].s_to = ( state["room"]["foyer"], "You step back from the cliff's edge and head south.") state["room"]["overlook"].n_to = ( state["room"]["overlook"], "You take a step back, and get ready to jump over the gap. Then you realize that is " f"an incredibly stupid idea, and decide you would rather live.") state["room"]["narrow"].w_to = ( state["room"]["foyer"], "You move west through the cramped passage until it opens up a bit.") state["room"]["narrow"].n_to = (state["room"]["treasure"], "You follow your nose and head north.") state["room"]["treasure"].s_to = ( state["room"]["narrow"], "You head south into the narrow passage.") state["room"]["chasm"].u_to = ( state["room"]["overlook"], "You climb slowly back up the rope, and pull yourself back onto the overlook, panting." ) state["room"]["final"].s_to = ( state["room"]["overlook"], "You go back across the bridge, resisting the pull of the amulet.") # Set initial room state["player"].loc = state["room"]["outside"] # Add functionality to items state["item"]["sword"].use = use_sword state["item"]["rope"].use = use_rope state["item"]["lantern"].use = use_lantern state["item"]["matchbook"].use = use_matchbook state["item"]["goblin_corpse"].on_look = on_look_goblin_corpse state["item"]["lever"].use_from_env = use_from_env_lever return state
((450, 950), (550, 1100)), ((850, 950), (950, 1100))) gameDisplay = pygame.display.set_mode((DisplayWidth, DisplayHeight)) pygame.display.set_caption("stealthy") clock = pygame.time.Clock() walls = [] collisionMap = [] for coordinates in mapSegments: for i in createRectangleHitbox(coordinates): collisionMap.append(i) walls.append(createRectangleWall(coordinates, gameDisplay)) print collisionMap npc = Npc(pygame.image.load("npcSprite.png"), 700, 700, 0, gameDisplay, 10, 5, collisionMap) mob = Mob(pygame.image.load("playerSprite.png"), 1050, 350, 0, gameDisplay, 10, 5, collisionMap) world = [mob] finished = False counter = 0 xMove = 0 yMove = 0 rotation = 0 while not finished: for event in pygame.event.get(): if event.type == pygame.QUIT: finished = True break if event.type == pygame.KEYDOWN: #EXIT if (event.key == pygame.K_ESCAPE):
def populateLevel(self, game): # for randomly generated levels ''' grab self.level_map from MakeMap, find all the blank spaces, and fill them with junk based on level, and return map to Makemap need to randomly generate level content. different amounts based on level, mobs, breakable walls etc. must have: exit player start ''' for a in range(len(self.map_of_level)): for b in range(len(self.map_of_level[a])): y = a * IMGSIZE x = b * IMGSIZE if self.map_of_level[a][b] == ' ': self.floors.append(pygame.Rect(x, y, IMGSIZE, IMGSIZE)) # there are 1470 spaces available for random objects # add the exit space = random.randint(0, (len(self.floors) - 1)) self.exits.append(self.floors[space]) self.floors.pop(space) # add Player Start space = random.randint(0, (len(self.floors) - 1)) game.player.rect = self.floors[space] self.floors.pop(space) if self.level == 2: # 30% mobs 5% gems 5% whips 1 chest # add a chest space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top chest = Object(os.path.join(IMGDIR, 'chest.bmp'), x, y, 'chest') self.items.append(chest) self.floors.pop(space) # add a slow monsters # add a teleport for a in range(241): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top mob = Mob(os.path.join(IMGDIR, 'gnome.bmp'), x, y, 1, 'slow') self.mobs.append(mob) self.floors.pop(space) for b in range(73): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'gem.bmp'), x, y, 'gem') self.items.append(item) self.floors.pop(space) for c in range(73): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'whip.bmp'), x, y, 'whip') self.items.append(item) self.floors.pop(space) for d in range(14): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'gold.bmp'), x, y, 'gold') self.items.append(item) self.floors.pop(space) for e in range(14): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'tele_trap.bmp'), x, y, 'tele_trap') trigger = Tile(x, y, False, 'teleport') self.triggers.append(trigger) self.items.append(item) self.floors.pop(space) for f in range(140): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top breakable_wall = Object(os.path.join(IMGDIR, 'breakable.bmp'), x, y) self.breakable.append(breakable_wall) self.floors.pop(space) if self.level == 4: # 40% level 2 mobs some random items # add a chest space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top chest = Object(os.path.join(IMGDIR, 'chest.bmp'), x, y, 'chest') self.items.append(chest) self.floors.pop(space) # add a slow monsters # add a teleport for a in range(588): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top mob = Mob(os.path.join(IMGDIR, 'elf_mummy.bmp'), x, y, 2, 'medium') self.mobs.append(mob) self.floors.pop(space) for b in range(73): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'gem.bmp'), x, y, 'gem') self.items.append(item) self.floors.pop(space) for c in range(73): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'whip.bmp'), x, y, 'whip') self.items.append(item) self.floors.pop(space) for d in range(14): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'gold.bmp'), x, y, 'gold') self.items.append(item) self.floors.pop(space) for e in range(14): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'tele_trap.bmp'), x, y, 'tele_trap') trigger = Tile(x, y, False, 'teleport') self.triggers.append(trigger) self.items.append(item) self.floors.pop(space) for f in range(140): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top breakable_wall = Object(os.path.join(IMGDIR, 'breakable.bmp'), x, y) self.breakable.append(breakable_wall) self.floors.pop(space) if self.level == 6: # 80% breakable walls, whips gems, whip ring # add a chest space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top chest = Object(os.path.join(IMGDIR, 'chest.bmp'), x, y, 'chest') self.items.append(chest) self.floors.pop(space) # add a whip ring space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top ring = Object(os.path.join(IMGDIR, 'ring.bmp'), x, y, 'whip_ring') self.items.append(ring) self.floors.pop(space) for b in range(73): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'gem.bmp'), x, y, 'gem') self.items.append(item) self.floors.pop(space) for c in range(73): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'whip.bmp'), x, y, 'whip') self.items.append(item) self.floors.pop(space) for d in range(14): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'gold.bmp'), x, y, 'gold') self.items.append(item) self.floors.pop(space) for f in range(1000): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top breakable_wall = Object(os.path.join(IMGDIR, 'breakable.bmp'), x, y) self.breakable.append(breakable_wall) self.floors.pop(space) if self.level == 8: # add a chest space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top chest = Object(os.path.join(IMGDIR, 'chest.bmp'), x, y, 'chest') self.items.append(chest) self.floors.pop(space) # add a slow monsters # add a teleport for a in range(1000): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top mob = Mob(os.path.join(IMGDIR, 'gnome.bmp'), x, y, 1, 'slow') self.mobs.append(mob) self.floors.pop(space) for b in range(73): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'gem.bmp'), x, y, 'gem') self.items.append(item) self.floors.pop(space) for c in range(73): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'whip.bmp'), x, y, 'whip') self.items.append(item) self.floors.pop(space) if self.level == 10: # add a chest space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top chest = Object(os.path.join(IMGDIR, 'chest.bmp'), x, y, 'chest') self.items.append(chest) self.floors.pop(space) # add a slow monsters # add a teleport for a in range(241): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top mob = Mob(os.path.join(IMGDIR, 'gnome.bmp'), x, y, 1, 'slow') self.mobs.append(mob) self.floors.pop(space) for a in range(241): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top mob = Mob(os.path.join(IMGDIR, 'elf_mummy.bmp'), x, y, 2, 'medium') self.mobs.append(mob) self.floors.pop(space) for a in range(241): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top mob = Mob(os.path.join(IMGDIR, 'ogre_lord.bmp'), x, y, 3, 'fast') self.mobs.append(mob) self.floors.pop(space) for b in range(73): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'gem.bmp'), x, y, 'gem') self.items.append(item) self.floors.pop(space) for c in range(73): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'whip.bmp'), x, y, 'whip') self.items.append(item) self.floors.pop(space) for d in range(140): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top breakable_wall = Object(os.path.join(IMGDIR, 'breakable.bmp'), x, y) self.breakable.append(breakable_wall) self.floors.pop(space) if self.level == 12: # add a chest space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top chest = Object(os.path.join(IMGDIR, 'chest.bmp'), x, y, 'chest') self.items.append(chest) self.floors.pop(space) # add a slow monsters # add a teleport for a in range(1000): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top mob = Mob(os.path.join(IMGDIR, 'elf_mummy.bmp'), x, y, 2, 'medium') self.mobs.append(mob) self.floors.pop(space) for b in range(73): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'gem.bmp'), x, y, 'gem') self.items.append(item) self.floors.pop(space) for c in range(73): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'whip.bmp'), x, y, 'whip') self.items.append(item) self.floors.pop(space) if self.level == 14: for a in range(300): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'tele_trap.bmp'), x, y, 'tele_trap') trigger = Tile(x, y, False, 'teleport') self.triggers.append(trigger) self.items.append(item) self.floors.pop(space) for b in range(300): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top breakable_wall = Object(os.path.join(IMGDIR, 'breakable.bmp'), x, y) self.breakable.append(breakable_wall) self.floors.pop(space) for c in range(300): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'invisibility.bmp'), x, y, 'invisibility') self.items.append(item) self.floors.pop(space) for d in range(150): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top mob = Mob(os.path.join(IMGDIR, 'ogre_lord.bmp'), x, y, 3, 'fast') self.mobs.append(mob) self.floors.pop(space) if self.level == 16: for a in range(300): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top pit = Object(os.path.join(IMGDIR, 'pit.bmp'), x, y) self.pits.append(pit) self.floors.pop(space) for b in range(400): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top breakable_wall = Object(os.path.join(IMGDIR, 'breakable.bmp'), x, y) self.breakable.append(breakable_wall) self.floors.pop(space) for c in range(241): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top mob = Mob(os.path.join(IMGDIR, 'gnome.bmp'), x, y, 1, 'slow') self.mobs.append(mob) self.floors.pop(space) for d in range(140): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'gold.bmp'), x, y, 'gold') self.items.append(item) self.floors.pop(space) if self.level == 18: for a in range(1000): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top breakable_wall = Object(os.path.join(IMGDIR, 'breakable.bmp'), x, y) self.breakable.append(breakable_wall) self.floors.pop(space) for b in range(200): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'sack.bmp'), x, y, 'more_monsters') self.items.append(item) self.floors.pop(space) for c in range(10): space = random.randint(0, (len(self.floors) - 1)) x = self.floors[space].left y = self.floors[space].top item = Object(os.path.join(IMGDIR, 'sack.bmp'), x, y, 'gem_sack') self.items.append(item) self.floors.pop(space)