示例#1
0
    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()
示例#2
0
 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()
示例#3
0
	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)
示例#4
0
    def __init__(self, game):
        self.name = "ice_blob"
        self.block_id = "ice_blob"
        self.has_idle = False
        Mob.__init__(self, game, self.name)

        Ice_Blob(self)
        self.direction = self.DIR.RIGHT
        self.image = self.frames[str(self.DIR.RIGHT)][0]

        self.aggro_dist = 120
        self.speed = 2
        self.accel = .25
示例#5
0
    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)
示例#6
0
    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'])
示例#7
0
    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
示例#8
0
 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()
示例#9
0
    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()
示例#10
0
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
示例#11
0
    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)
示例#12
0
    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()
示例#13
0
 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()
示例#14
0
    def add_mob(self,
                mob: Mob,
                x: float,
                y: float,
                mass: float = 100,
                friction: float = 1.):
        """Adds a mob to the game world centred at the position ('x', 'y')

        Parameters:
            mob (Mob): The mob to add to the game world

            - See add_thing for other parameters
        """

        self.add_thing(mob,
                       x,
                       y,
                       mob.get_size(),
                       collision_type=self._collision_types['mob'],
                       categories=self._thing_categories["mob"],
                       mass=mass,
                       friction=friction)
示例#15
0
    def _handle_player_collide_mob(self, player: Player, mob: Mob, data,
                                   arbiter: pymunk.Arbiter):
        """Callback to handle collision between the player and a mob. If the player meet a bee,
        the player will get 1 hit.

        Parameters:
            player (Player): The player that was involved in the collision
            mob (Mob): The mob that the player collided with
            data (dict): data that was added with this collision handler (see data parameter in
                         World.add_collision_handler)
            arbiter (pymunk.Arbiter): Data about a collision
                                      (see http://www.pymunk.org/en/latest/pymunk.html#pymunk.Arbiter)
                                      NOTE: you probably won't need this
        Return:
             bool: False (always ignore this type of collision)
                   (more generally, collision callbacks return True iff the collision should be considered valid; i.e.
                   returning False makes the world ignore the collision)
        """
        if mob.get_id() == "foe_bee":
            print(f"{self._player} touch a bee,get 1 damage")
            self._player.change_health(-1)
            if self._player.get_health() <= 0:
                self._restart()
示例#16
0
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)
示例#17
0
class Gamepage(object):

	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 click(self, win, mouse_pos):
		'''
	    Desc: Responds to click location and reacts accordingly
	    Args: self, win, mouse_pos
	    Return: response
	    '''
		response = self.game.click(win, mouse_pos)
		if(response == "wrong"):
			self.mob.negative()
		elif(response == "right"):
			self.mob.positive()
		if(response == "pass"):
			return self.hanged.click(mouse_pos)

		return response

	def draw(self, win):
		'''
	    Desc: Draws the on-screen features
	    Args: self, win
	    Return: N/A
	    '''
		win.blit(self.bg, (0, 0))
		self.mob.draw(win)
		self.hanged.draw(win)
		self.game.draw(win)
示例#18
0
文件: RLmap.py 项目: dealien/PyKroz
    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')
示例#19
0
文件: mob_test.py 项目: taishan90/mud
 def setUp(self):
     self.mob = Mob(57)
     pass
示例#20
0
 def new_mob(self):
     mob = Mob(self.settings, self.graphics_provider)
     self.all_sprites.add(mob)
     self.mobs.add(mob)
示例#21
0
# We know have the block looking for us 
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()

示例#22
0
    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()
示例#23
0
# 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)
示例#24
0
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)
示例#25
0
    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()
示例#26
0
    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)
示例#27
0
#!/usr/bin/python

import pickle
import StringIO

from mob import Mob

s = StringIO.StringIO()

p = pickle.Pickler(s)


M = Mob(57)
M.add_cmd("HI!!!")

p.dump(M)

print( s.getvalue() )
s.close()

示例#28
0
 def setUp(self):
     self.mob = Mob( 57 )
     pass
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()

示例#30
0
文件: player.py 项目: dealien/PyKroz
    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
示例#31
0
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 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
    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 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
        
示例#35
0
文件: mob_test.py 项目: taishan90/mud
class TestMob(unittest.TestCase):
    def setUp(self):
        self.mob = Mob(57)
        pass

    def testid_works(self):
        self.assert_(self.mob.ID == 57)

    def testno_prompt_yields_epsilon(self):
        self.assert_(self.mob.prompt() == "")

    def testpush_prompt_works(self):
        self.mob.push_prompt(lambda mob: ":D")
        self.assert_(self.mob.prompt() == ":D")

    def testpop_prompt_works(self):
        self.mob.push_prompt(lambda mob: ":D")
        self.mob.push_prompt(lambda mob: ":|")
        self.mob.pop_prompt()
        pr = self.mob.prompt()
        print "prompt: %s", pr
        self.assert_(self.mob.prompt() == ":D")
        self.mob.push_prompt(lambda mob: "a")
        self.mob.push_prompt(lambda mob: "b")
        self.mob.push_prompt(lambda mob: "c")
        self.mob.pop_prompt(2)
        self.assert_(self.mob.prompt() == "a")
        self.mob.pop_prompt(500)

    def testpop_prompt_neg_asserts(self):
        self.assertRaises(AssertionError, self.mob.pop_prompt, -1)

    def testadd_cmd_works(self):
        self.assert_(len(self.mob.cmds) == 0)
        self.mob.add_cmd("castfireball!!")
        self.assert_(len(self.mob.cmds) == 1)

    def testflush_cmds_works(self):
        self.mob.add_cmd("castfireball!!")
        self.mob.flush_cmds()
        self.assert_(len(self.mob.cmds) == 0)
示例#36
0
文件: RLmap.py 项目: dealien/PyKroz
    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)
示例#37
0
class TestMob(unittest.TestCase):


    def setUp(self):
        self.mob = Mob( 57 )
        pass

    def testid_works(self):
        self.assert_(self.mob.ID == 57)

    def testno_prompt_yields_epsilon(self):
        self.assert_(self.mob.prompt() == "")

    def testpush_prompt_works(self):
        self.mob.push_prompt( lambda mob: ":D" )
        self.assert_(self.mob.prompt() == ":D")

    def testpop_prompt_works(self):
         self.mob.push_prompt( lambda mob: ":D" )
         self.mob.push_prompt( lambda mob: ":|" )
         self.mob.pop_prompt()
         pr = self.mob.prompt()
         print "prompt: %s", pr
         self.assert_(self.mob.prompt() == ":D")
         self.mob.push_prompt( lambda mob: "a" )
         self.mob.push_prompt( lambda mob: "b" )
         self.mob.push_prompt( lambda mob: "c" )
         self.mob.pop_prompt(2)
         self.assert_(self.mob.prompt() == "a")
         self.mob.pop_prompt(500)
       
    def testpop_prompt_neg_asserts(self):
        self.assertRaises(AssertionError, self.mob.pop_prompt, -1)

    def testadd_cmd_works(self):
        self.assert_(len(self.mob.cmds) == 0)
        self.mob.add_cmd("castfireball!!")
        self.assert_(len(self.mob.cmds) == 1)

    def testflush_cmds_works(self):
        self.mob.add_cmd("castfireball!!")
        self.mob.flush_cmds()
        self.assert_(len(self.mob.cmds) == 0)
示例#38
0
def newMob():
    m = Mob(ui_settings)
    all_sprites.add(m)
    mobs.add(m)