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()
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)
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))
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)
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()
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()
def test_init_enemy(self): for _ in range(50): enemy = characters.Enemy() self.assertIn(enemy.potions, [0, 1, 2])
def setUp(self): self.enemy = characters.Enemy()
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
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,