Ejemplo n.º 1
0
def fight(Player):
    # spawn a new enemy, relative to the player's stats
    enemy = characters.Enemy(Player)
    # clear screen so it does not become cluttered
    clearScreen()

    # print to the console what we have
    print('A level ' + str(enemy.level) + ' ' + enemy.name + ' appears with ' +
          str(enemy.hp) + 'HP!')
    pprint(vars(enemy))

    if (randint(0, 1) == 1):
        playerDamage = damage(Player)
        clearScreen()
        characters.statsBar(Player)
        characters.statsBar(enemy)
        print("\nYou strike first! You deal " + str(playerDamage) + " to " +
              enemy.name + ". Enemy HP: " + str(enemy.hp))
        fightLoop('enemy', Player, enemy)
    else:
        enemyDamage = damage(enemy)
        clearScreen()
        characters.statsBar(Player)
        characters.statsBar(enemy)
        print("\n" + enemy.name + " strikes first! You get dealt " +
              str(enemyDamage) + " damage!" + " Your HP: " + str(enemy.hp))
        fightLoop('player', Player, enemy)

    # calc if player has leveled up
    characters.playerLevel(Player)
    print("Fight Over! Press enter to return to main menu... ")
    input()
Ejemplo n.º 2
0
 def getEnemy(self):
     """Create an enemy and return it"""
     minimum = round(self.z_dr * .75)
     maximum = round(self.z_dr * 1.25)
     random_value = random.randint(minimum, maximum)
     stats = self.z_enemy_list[weighted_choice_sub(
         [x[1] for x in self.z_enemy_list])]
     return characters.Enemy(stats[0], stats[2], random_value)
Ejemplo n.º 3
0
 def __init__(self, start, dlvl, book, item, skillcount):
     self.xsize = 50
     self.ysize = 25
     self.start = start
     self.corridor = randwalk(start)
     r = rp()
     while self.corridor[r] == start:
         r = rp()
     self.end = self.corridor[r]
     numvirus = random.randint(1, 5)
     numstudent = random.randint(1, 5)
     numinternets = random.randint(1, 5)
     self.enemylist = []
     for i in range(numvirus):
         r = rp()
         while self.corridor[r] == self.end:
             r = rp()
         self.enemylist.append(
             ch.Enemy(self.getx(r), self.gety(r), 'v', 'Virus'))
     if dlvl >= 2:
         for i in range(numstudent):
             r = rp()
             while (self.getx(r), self.gety(r)) == self.end:
                 r = rp()
             self.enemylist.append(
                 ch.Enemy(self.getx(r), self.gety(r), 's', 'Student'))
     if dlvl >= 5:
         for i in range(numinternets):
             r = rp()
             while self.corridor[r] == self.end:
                 r = rp()
             self.enemylist.append(
                 ch.Enemy(self.getx(r), self.gety(r), 'I',
                          'Internet Monster'))
     if dlvl >= 8:
         if random.random() <= 0.3:
             r = rp()
             self.enemylist.append(
                 ch.Enemy(self.getx(r), self.gety(r), 'c',
                          'Committee Member'))
     self.skillcount = skillcount
     r = rp()
     self.book = bk.Book(book, self.getx(r), self.gety(r))
     r = rp()
     self.item = itm.Item(item, self.getx(r), self.gety(r))
Ejemplo n.º 4
0
    def __init__(self, cleared, hero, hold):
        super().__init__()
        #make surface for background image
        self.image = pygame.Surface((11 * constants.blockSize + 200, 110))
        self.rect = self.image.get_rect()
        self.rect.topleft = constants.mainDunPos
        baseTile = pygame.image.load(levelDesigns[cleared % 3]).convert_alpha()
        pygame.mixer.music.load(levelMusic[cleared % 3])
        pygame.mixer.music.play(-1)
        self.hold = hold
        self.objects = pygame.sprite.LayeredUpdates()
        self.enemies = []  #keeps enemies in an easily accesible list
        self.target = None  #sees who hero is fighting

        #health bar
        self.healthBar = pygame.Rect(0, 0, 100, 15)
        self.penalty = 0  #how much hero's stats go down

        #stuff for shifting the world
        self.worldShift = 0
        self.maxShift = 900 + 40 * cleared

        if self.maxShift > 2000:
            self.maxShift = 2000  #don't get bigger than 2000
        monsterNo = 5 + math.floor(cleared / 3)  #extra enemy every 3 levels
        if monsterNo > 13:
            monsterNo = 13

        #stores the background
        width = 0
        while width < self.maxShift + 550:  #add the base width of the screen to the width
            background = box(baseTile)
            background.rect.topleft = (width, 0)
            self.objects.add(background)
            self.objects.change_layer(background, -2)
            width += background.rect.width
        self.hero = hero
        self.objects.add(self.hero)

        #place a door at the end of the level
        door = box(pygame.image.load("sprites/door.png").convert())
        door.image.set_colorkey(constants.BLACK)
        door.rect.right = self.maxShift + self.rect.width - 10
        door.rect.y = 110 - door.rect.height - 5
        self.objects.add(door)
        self.objects.change_layer(door, -1)

        #enemy creation
        for i in range(monsterNo):
            x = 0
            while x == 0:
                x = random.randint(100, self.maxShift + 250)
                for enemy in self.enemies:
                    if abs(
                            x - enemy.rect.centerx
                    ) < 60:  #if within 60 pixels of another enemy's centre
                        x = 0  #find new x

            foe = characters.Enemy(cleared, hero)
            #position enemy
            foe.rect.centerx = x
            #foe.rect.bottom = self.rect.bottom - 20
            self.enemies.append(foe)
            self.objects.add(foe)
Ejemplo n.º 5
0
    def __init__(self):

        # -- INITIALIZATION --
        pygame.init()

        # -- COLORS --
        self.black = (0, 0, 0)
        self.green = (0, 255, 0)

        # -- TIME --
        self.g_clock = pygame.time.Clock()
        self.delta_time = 0

        # -- DISPLAY --
        # screen
        self.scr_w = 1024
        self.scr_h = 768
        self.screen = pygame.display.set_mode((self.scr_w, self.scr_h))
        pygame.display.set_caption("Smol Game / Lab 5 / ETGG1802 / Prof: Jason / Team: Lane - Tanim - Evan | FPS: "
                                   + str(int(self.g_clock.get_fps())))
        img1 = pygame.image.load("Sprites\\BATS.png")
        img2 = pygame.image.load("Sprites\\Asteroid Brown.png")
        # background
        self.background = pygame.Surface(self.screen.get_size())
        self.background.fill(self.black)
        self.background.convert()

        # -- IMAGES / SPRITES --

        # -- TEXT FONTS --
        self.font_type = pygame.font.get_default_font()

        # -- CLASS INSTANCES --
        # camera class instance
        self.camera = Camera(self.scr_w, self.scr_h, self)
        # player class instance
        self.player = characters.Player(300, 300, ((self.scr_w / 2) - 32), ((self.scr_h / 2) - 32), 50, 32, img1, self.camera.x, self.camera.y, 1, 0)
        # enemy class instance
        self.enemy = characters.Enemy(800, 800, 0, 0, 10, 160, img2, self.camera.x, self.camera.y, 0, 0)
        # map class instance
        self.map = Map("smol_map1.tmx")


        # -- GAME LOOP --
        self.run = True
        while self.run:

            # - UPDATES
            # Time in seconds since the last update
            self.delta_time = self.g_clock.tick(100) / 1000
            self.enemy.update(self.delta_time)
            self.player.update(self.delta_time)
            self.enemy.hit_detection(self.player.x, self.player.y, self.player.sprite, self.delta_time)

            # - USER INPUT
            # event handling
            self.evt = pygame.event.poll()
            if self.evt.type == pygame.QUIT:
                self.run = False
            elif self.evt.type == pygame.KEYDOWN:
                if self.evt.key == pygame.K_ESCAPE:
                    self.run = False

            # - DRAW
            self.player.draw(self.background, self.map.getMapSize()[0], self.map.getMapSize()[1], self.camera.x, self.camera.y)
            self.enemy.draw(self.background, self.map.getMapSize()[0], self.map.getMapSize()[1], self.camera.x, self.camera.y)
            # screen
            self.screen.blit(self.background, (0, 0))
            self.map.render(self.background, (self.camera.x,self.camera.y), self.scr_w, self.scr_h)
            # game objects

            # text

            # camera

            self.camera.update(self.player, self.player.sprite, self.player.sprite)




            # - UPDATE DISPLAY
            pygame.display.flip()

        # -- EXIT GAME --
        pygame.quit()
Ejemplo n.º 6
0
def main():

    newGame = False
    pygame.event.set_allowed(None)
    pygame.event.set_allowed([pygame.QUIT, pygame.KEYDOWN])

    # Start the pregame (choose class, etc)

    startclass = pregame.pregameLoop(win)

    # Initialize some values

    messageList = []
    bookList = ['Harry Potter', 'Lord of the Rings', 'Infinite Jest',
                'Game of Thrones', 'Wheel of Time', 'Quantum Mechanics',
                'Biochemistry', 'A Brief History of Time', 'Pharmacology',
                'The Elements of Style']
    itemList = ['coffee', 'tea', 'ramen noodles',
                'laptop', 'beer', 'glasses', 'moleskin']
    dlvl = 0
    hero = ch.Character(random.randint(21, 69), random.randint(11, 34), '@', startclass)
    lvlList = []
    r = random.randint(0, len(itemList) - 1)
    lvlList.append(Level(hero.getpos(), dlvl, 'none', itemList[r], 3))
    lvl = lvlList[0]
    moveUp = moveDown = moveLeft = moveRight = False
    T = random.randint(1, 3000)
    thesis = 0
    XP = 0
    rival = ch.Enemy(0, 0, 'R', 'Rival')

    # Start the game loop

    t = 0
    while True:

        e = pygame.event.wait()
        pressed = e.key
        attemptPos = (0, 0)

        # Move with vi keybinding or arrow keys

        if pressed == 8:
            newGame = True
        elif pressed == 27:
            pygame.quit()
            sys.exit()
        elif (pressed == 273 or pressed == 107):
            attemptPos = (hero.posx, hero.posy - 1)
            if lvl.legalspace(hero.posx, hero.posy - 1):
                hero.posy -= 1
        elif (pressed == 274 or pressed == 106):
            attemptPos = (hero.posx, hero.posy + 1)
            if lvl.legalspace(hero.posx, hero.posy + 1):
                hero.posy += 1
        elif (pressed == 276 or pressed == 104):
            attemptPos = (hero.posx - 1, hero.posy)
            if lvl.legalspace(hero.posx - 1, hero.posy):
                hero.posx -= 1
        elif (pressed == 275 or pressed == 108):
            attemptPos = (hero.posx + 1, hero.posy)
            if lvl.legalspace(hero.posx + 1, hero.posy):
                hero.posx += 1
        elif pressed == 117:
            attemptPos = (hero.posx + 1, hero.posy - 1)
            if lvl.legalspace(hero.posx + 1, hero.posy - 1):
                hero.posx += 1
                hero.posy -= 1
        elif pressed == 121:
            attemptPos = (hero.posx - 1, hero.posy - 1)
            if lvl.legalspace(hero.posx - 1, hero.posy - 1):
                hero.posx -= 1
                hero.posy -= 1
        elif pressed == 110:
            attemptPos = (hero.posx + 1, hero.posy + 1)
            if lvl.legalspace(hero.posx + 1, hero.posy + 1):
                hero.posx += 1
                hero.posy += 1
        elif pressed == 98:
            attemptPos = (hero.posx - 1, hero.posy + 1)
            if lvl.legalspace(hero.posx - 1, hero.posy + 1):
                hero.posx -= 1
                hero.posy += 1

        # Test for special skills

        if pressed == 48 and lvl.skillcount > 0:
            hero.useskill(0, lvl)
            lvl.skillcount -= 1
            if hero.skills[0] == 'Banach-Tarski':
                io.new_message("Banach-Tarski doubles the enemies!", messageList)
            elif hero.skills[0] == 'Post-Modern':
                io.new_message("Post-Modern analysis.", messageList)
                io.new_message("Nothing is what it seems.", messageList)
                lvlList[dlvl] = level.makenewlevel(
                    hero, dlvl, bookList, itemList, lvlList, messageList,
                    lvl.skillcount)
            elif hero.skills[0] == 'Sing':
                io.new_message("You sing.", messageList)
                io.new_message("Your song entrances the monsters.", messageList)
                for enemy in lvl.enemylist:
                    ch.movetohero(enemy, hero, lvl)

        if pressed == 49 and hero.lvl >= 3 and lvl.skillcount > 0:
            hero.useskill(1, lvl)
            lvl.skillcount -= 1
            if hero.skills[1] == 'Cryptography':
                io.new_message("You encrypt your thesis to gain 8 time.", messageList)
            elif hero.skills[1] == 'Epic Poem':
                io.new_message("You read an epic poem.", messageList)
                io.new_message("The monsters are entranced by it.", messageList)
                for enemy in lvl.enemylist:
                    ch.movetohero(enemy, hero, lvl)
            elif hero.skills[1] == 'Post-Tonal':
                io.new_message("Your post-tonal piece repels the monsters.", messageList)
                for enemy in lvl.enemylist:
                    ch.movefromhero(enemy, hero, lvl)

        if pressed == 50 and hero.lvl >= 7 and lvl.skillcount > 0:
            hero.useskill(2, lvl)
            lvl.skillcount -= 1
            if hero.skills[2] == 'Non-Euclidean':
                io.new_message("World is now Non-Euclidean.", messageList)
                io.new_message("Distance is unpredictable.", messageList)
            elif hero.skills[2] == 'Deconstruction':
                io.new_message("You deconstruct with differance.", messageList)
                for enemy in lvl.enemylist:
                    enemy.health -= hero.strength
            elif hero.skills[2] == 'Neo-Riemannian':
                io.new_message("Neo-Riemannian transformation applied.", messageList)
                lvlList[dlvl] = level.makenewlevel(
                    hero, dlvl, bookList, itemList, lvlList, messageList,
                    lvl.skillcount)

        # Check for stairs to new lvl

        if pressed == 46 and hero.getpos() == lvl.end:
            if dlvl < 9:
                dlvl += 1
            else:
                io.new_message("You've reached the top floor.", messageList)
            if len(lvlList) == dlvl:
                if "tea" in hero.items:
                    skillcount = 5
                else:
                    skillcount = 3
                lvlList.append(level.makenewlevel(
                    hero, dlvl, bookList, itemList, lvlList, messageList,
                    skillcount))
            hero.posx = lvlList[dlvl].startx()
            hero.posy = lvlList[dlvl].starty()
        if pressed == 46 and hero.getpos() == lvl.start:
            if dlvl > 0:
                dlvl -= 1
                hero.posx = lvlList[dlvl].endx()
                hero.posy = lvlList[dlvl].endy()
            else:
                io.new_message("Cannot descend anymore.", messageList)

        lvl = lvlList[dlvl]

        # Check for books and items

        if pressed == 46 and hero.getpos() == lvl.book.getpos():
            XP += book.usebook(lvl.book.name, messageList, hero, lvl, t)
            if lvl.book.name != 'none':
                bookList.remove(lvl.book.name)
            lvl.book.name = 'none'

        if pressed == 46 and hero.getpos() == lvl.item.getpos():
            i = copy.copy(lvl.item)
            hero.items.append(i.name)
            XP += item.useitem(i.name, messageList, hero, lvl, t)
            if i.name != 'none':
                itemList.remove(i.name)
            lvl.item.name = 'none'

        # Display items and books

        if dlvl == 9:
            if pressed == 46 and hero.getpos() == (lvl.getx(T), lvl.gety(T)):
                io.new_message("You've got your thesis back!", messageList)
                thesis = 1

        if hero.getpos() == lvl.start:
            if lvl.item.name != 'none':
                io.new_message('You see ' + lvl.item.name, messageList)
            if 'glasses' in hero.items:
                if lvl.book.name != 'none':
                    io.new_message('You see ' + lvl.book.name, messageList)

        # Update enemy status

        for enemy in lvl.enemylist:
            if attemptPos == enemy.getpos():
                attack(hero, enemy, messageList)
            ch.ai(enemy, hero, lvl)
            if enemy.health <= 0:
                lvl.enemylist.remove(enemy)
                if enemy.name == 'Virus':
                    XP += 5
                    io.new_message('Enemy destroyed. Virus stalls rival by '
                                   + str(hero.v) + '.', messageList)
                    hero.time += hero.v
                if enemy.name == 'Student':
                    XP += 10
                    io.new_message('Student leaves you alone.', messageList)
                if enemy.c == 'I':
                    XP += 20
                    io.new_message('You send cat videos to your rival.', messageList)
                    hero.time += 10
                if enemy.c == 'c':
                    XP += 30
                    io.new_message('Committee member goes to a meeting.', messageList)
                    hero.time += 15
                if enemy.c == 'R':
                    XP += 50
                    io.new_message('You get your thesis back!', messageList)
                    thesis = 1

        hero.leveluploop(XP)
        XP = 0

        # Rival information

        if thesis == 1 and rival not in lvl.enemylist:
            if random.random() < 0.05:
                r = random.randint(1, 3000)
                rival = ch.Enemy(lvl.getx(r), lvl.gety(r), 'R', 'Rival')
                lvl.enemylist.append(rival)
        if thesis == 1 and rival in lvl.enemylist:
            if ch.nextto(rival, hero):
                thesis = 0

        io.drawscreen(win, lvl, messageList, hero, thesis, dlvl, t, T)
        win.update()
        pygame.display.update()
        t += 1
        if t < hero.speedterminate:
            if (t % hero.speed) == 0:
                hero.time -= 1
        # ne stands for non-euclidean
        elif hero.ne == 1:
            hero.time -= nedist()
        elif thesis == 0:
            hero.time -= 1

        if newGame:
            main()

        # Win/Lose

        if dlvl == 0 and pressed == 46 and hero.getpos() == lvl.start and thesis == 1:
            endgame.winloop(win)
            main()
        if hero.time < 0:
            endgame.loseloop(win)
            main()
Ejemplo n.º 7
0
 def test_init_enemy(self):
     for _ in range(50):
         enemy = characters.Enemy()
         self.assertIn(enemy.potions, [0, 1, 2])
Ejemplo n.º 8
0
 def setUp(self):
     self.enemy = characters.Enemy()
Ejemplo n.º 9
0
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('Carsave')

intro_screen=pygame.image.load('images/title.png').convert()
gameover=pygame.image.load('images/gameover.png').convert()
youwin=pygame.image.load('images/youwin.png').convert()
clock = pygame.time.Clock()
FPS = 60

ADDENEMY = pygame.USEREVENT + 1
pygame.time.set_timer(ADDENEMY, 1000)

player=characters.Player()
enemy=characters.Enemy()

enemies = pygame.sprite.Group()
enemies.add(enemy)
everyone=pygame.sprite.Group()
everyone.add(player)
everyone.add(enemy)


#---------------------------------------------------------------------------------
run=True
while run:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_b:
                run=False
Ejemplo n.º 10
0
    items.Potion("Hot Chocolate", 10),
    items.Potion("Sustenance Bar", 30),
    items.Potion("Green Syringe", 50)
]

# --- Collection of all items

castle_items = weapons
castle_items.extend(armour)
castle_items.extend(potions)

# -- Enemies

# Dracula
dracula = characters.Enemy("COUNT DRACULA", 1000, 100,
                           items.Weapon("DRACULA'S STAFF", 30, 50),
                           items.Armour("DRACULA'S SHIELD", 20))

# Other enemies that can be found in the castle
castle_enemies = [
    characters.Enemy("The Goose", 2, 40, items.Weapon("HONK", 10, 15),
                     items.Armour("Goose Feathers", 10)),
    characters.Enemy(
        "Thousands of Bees", 1, 100, items.Weapon("Sting", 1, 3),
        items.Armour("Exoskeleton", 1),
        [items.Weapon("Bee Sting Sword", 20, 30),
         items.Potion("Honey", 20)]),
    characters.Enemy("John", 32, 20, items.Weapon("Steak Knife", 5, 10),
                     items.Armour("Torn Jeans", 3),
                     [items.Potion("Homebrew", 10)]),
    characters.Enemy("SyntaxError", 1, 5, items.Weapon("Inconvenience", 1,