def interact(g, settings, keyRead): # Actualiser les nouvelles touches du fichier settings: keyM = g["keyManager"] for keyName in keyM: for k in settings: if keyName == k: keyM[keyName] = settings[k] player = Dungeon.getPlayer(g["dungeon"]) playerSpeedValue = 15 if keyM["Up"] == keyRead: Entity.setSpeed(player, 0, -playerSpeedValue) elif keyM["Down"] == keyRead: Entity.setSpeed(player, 0, playerSpeedValue) elif keyM["Left"] == keyRead: Entity.setSpeed(player, -playerSpeedValue*2, 0) elif keyM["Right"] == keyRead: Entity.setSpeed(player, playerSpeedValue*2, 0) elif keyM["Shoot"] == keyRead: Dungeon.launchArrow(g["dungeon"], player) elif keyM["Chest"] == keyRead: Dungeon.openChest(g["dungeon"])
def interact(g, settings, keyRead): # Actualiser les nouvelles touches du fichier settings: keyM = g["keyManager"] for keyName in keyM: for k in settings: if keyName == k: keyM[keyName] = settings[k] player = Dungeon.getPlayer(g["dungeon"]) playerSpeedValue = 15 if keyM["Up"] == keyRead: Entity.setSpeed(player, 0, -playerSpeedValue) elif keyM["Down"] == keyRead: Entity.setSpeed(player, 0, playerSpeedValue) elif keyM["Left"] == keyRead: Entity.setSpeed(player, -playerSpeedValue * 2, 0) elif keyM["Right"] == keyRead: Entity.setSpeed(player, playerSpeedValue * 2, 0) elif keyM["Shoot"] == keyRead: Dungeon.launchArrow(g["dungeon"], player) elif keyM["Chest"] == keyRead: Dungeon.openChest(g["dungeon"])
def generate(self, width, height): """ Generates the dungeon according to the following steps, similar to A* algorithm: * Determine entrance. * Determine exit. * Start at the entrance. * Calculate weighting function for every adjacent tile. * Make tile with lowest weighting value walkable. * Calculate weighting function for adjacent tiles of newly added tile. * Repeat last two steps until exit is reached. Returns Dungeon map """ self.width = width self.height = height self.start_x = width-5 self.start_y = height-5 self.exit_x = 5 self.exit_y = 5 # generate the heightmap and weights self.generate_heightmap() self.calculate_weights() # make tiles walkable where the player should be able to move walkable_area = self.generate_walkable() # create an empty dungeon map and pave walkable area dungeon_map = Dungeon(width, height, 16,16) dungeon_map.make_walkable(walkable_area) # return map return dungeon_map
def test_when_spawning_the_hero_is_unsuccessful_then_resturn_false(self): h = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2) d = Dungeon('test_maps/empty.txt', h, 2) self.assertFalse(d.spawn())
def test_moving_the_hero_to_an_obstacle_then_return_false(self): h = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2) d = Dungeon('test_maps/test.txt', h, 2) d.spawn() self.assertFalse(d.move_hero('down'))
def run(g, dt): if Dungeon.run(g["dungeon"], dt) == "win": return "win" player = Dungeon.getPlayer(g["dungeon"]) if Entity.getHealth(player) <= 0: return "lose" return "run"
def main(): # parser = argparse.ArgumentParser(description='CPSC 481 Project') # parser.add_argument('-s', '--size', type=int ,default = 64, help = "Usage:-f <filename>.csv\nThis will write the results to the file specified.") # parser.add_argument('-d', '--difficulty', type=str,default = 'normal', help = "Usage:-f <filename>.csv\nThis will write the results to the file specified.") # parser.add_argument('-n', '--number', type =int, default = 1, help= "The number of adversary AI you want to spawn") # parser.add_argument('-r', '--rooms', type =int, default = 4, help= "The number of \'rooms\' you want to spawn") pygame.init() # COLORS black = (0, 0, 0) white = (255, 255, 255) # WINDOW screen = pygame.display.set_mode((0,0)) screen = pygame.display.set_mode((screen.get_height()-160,screen.get_height()-160)) pygame.display.set_caption("Minotaur Maze") #GAME LOOP: Plays game until user exit gameLoop = True # MAN PROGRAM LOOP dungeon = Dungeon.Generator(30, 30, 5, 3 ,4,2 ) dungeon.gen_level() dungeon.gen_tiles_level() dungeon.gen_enemies(1) dungeon.update_ai() levels_completed =0 #pygame.key.set_repeat(0,1500) #dungeon.update_ai() #dungeon.play_game() while gameLoop: for event in pygame.event.get(): if event.type == pygame.QUIT: gameLoop = False if event.type == pygame.KEYDOWN: dungeon.play_game() dungeon.ai_walk(0.2,4) dungeon.render(screen, 0, 10) state = dungeon.check_state() if(state == "lose"): gameLoop = False print("You Lost!") elif(state == "win"): play_again = input("On to the next level? Y/n:") if(play_again == "Y"): dungeon = Dungeon.Generator(30, 30, 5, 3,4, 2) dungeon.gen_level() dungeon.gen_tiles_level() dungeon.gen_enemies(2) dungeon.update_ai() dungeon.render(screen, 250, 10) else: gameLoop = False #print("You completed "+ to_string(levels_completed)+ " levels!") pygame.display.update()
def test_moving_the_hero_out_of_boundaries_of_the_map_then_return_false_and_print_message( self): h = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2) d = Dungeon('test_maps/test.txt', h, 2) d.spawn() self.assertFalse(d.move_hero('left'))
def test_when_spawning_the_hero_then_change_S_to_H(self): h = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2) d = Dungeon('test_maps/test.txt', h, 2) d.spawn() letter_on_the_map = d.tmp_map[d.hero_position_X][d.hero_position_Y] self.assertEqual('H', letter_on_the_map)
def test_moving_the_hero_down_when_there_are_no_obstacles_then_return_true( self): h = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2) d = Dungeon('test_maps/no_obstacles.txt', h, 2) d.spawn() self.assertTrue(d.move_hero('down'))
def test_getting_the_spawning_coordinates_of_the_hero_on_the_S_location_on_map( self): h = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2) d = Dungeon('test_maps/test.txt', h, 2) d.spawn() result = [d.hero_position_X, d.hero_position_Y] expected = [1, 0] self.assertEqual(result, expected)
def main(): # create dungeon with a single NxN level N = 3 # must be >= 2 testDungeon = Dungeon.Dungeon() testLevel = Dungeon.DungeonLevel() testLevel.make_grid(N, N) testDungeon.add_level(testLevel) assert (len(testDungeon.dLevels) == 1) assert (testLevel.tile_at(testLevel.maxX, testLevel.maxY)) assert (not testLevel.tile_at(N, 0)) assert (testLevel.tile_at(0, 0) == testLevel.get_neighbor( testLevel.tile_at(1, 1), 'nw')) try: testLevel.get_neighbor(testLevel.tile_at(0, 0), 'n') # should fail assert (False) except Dungeon.DungeonLevelError: # failed as expected, so continue pass print 'Dungeon creation passed' # create hero and place at (1, 1) testHero = Mob.Hero('tester', 'female', 'archeologist', 'dwarf', 'chaotic') testHero.set_dungeon_level(testLevel) testHero.set_location(testLevel.tile_at(1, 1)) assert (testHero.get_location().x == 1 and testHero.get_location().y == 1) print 'Hero creation passed' # place food ration at (1, 0) and have hero pick up testComestible = Item.FoodRation() testLevel.tile_at(1, 0).add_item(testComestible) assert (len(testLevel.tile_at(1, 0).items) == 1) testHero.move('n') assert (testHero.get_location() == testLevel.tile_at(1, 0)) assert (len(testLevel.tile_at(1, 1).mobs) == 0) assert (testLevel.tile_at(1, 0).mobs[0] == testHero) testHero.pick_up(testComestible) assert (len(testLevel.tile_at(1, 0).items) == 0) assert (testHero.inventory[0] == testComestible) assert (testHero.get_weight_carried() == testComestible.get_weight()) print 'Hero movement and pickup passed' # have hero eat food ration heroNutritionBefore = testHero.get_nutrition() testHero.eat(testComestible) heroNutritionAfter = testHero.get_nutrition() assert (len(testHero.inventory) == 0) assert (heroNutritionAfter - heroNutritionBefore == testComestible.get_nutrition_value()) assert (testHero.get_weight_carried() == 0) print 'Hero eating passed' return testDungeon
def create(): game = dict() game["dungeon"] = Dungeon.create("forest") settings = Settings.create() game["keyManager"] = settings #for keyName in settings: #dataKey = dict() #dataKey.update({"key": settings[keyName]}) #game["keyManager"].update({keyName: dataKey}) Dungeon.generate(game["dungeon"]) return game
def handleCollisions(globs): room = globs.dungeon[globs.player.pos.roomnum] checkItems(globs, room) rt = False if globs.trap == 1: globs.floor += 1 rt = True elif globs.trap == 2: globs.floor -= 1 rt = True if rt: globs.dungeon = Dungeon.genDungeon() globs.player.pos = Position.Position(0, 2, 1) globs.trap = 0 Enemy.genEnemies(globs) return room = checkDoors(globs, room) if globs.player.pos.x < 1: globs.player.pos.x += 1 elif globs.player.pos.x > room.width - 2: globs.player.pos.x -= 1 elif globs.player.pos.y < 1: globs.player.pos.y += 1 elif globs.player.pos.y > room.height: globs.player.pos.y -= 1
def store(self,saveName): fileName = saveName+GameState.SAVE_FILE_EXT saveFile = open(fileName,"a") saveFile.write(GameState.SAVE_FILE_VERSION) Dungeon.StoreState(saveFile) saveFile.write(GameState.CURRENT_ROOM_LEADER+getAdventurersCurrent().getName()) saveFile.close()
def main(): name = input("Enter your characters name: ") hero = chooseClass(name) dungeon = Dungeon.Dungeon() dungeon.enterDungeon(hero)
def test_dungeon_initialization_when_empty_map(self): h = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2) d = Dungeon('test_maps/empty.txt', h, 2) self.assertEqual(d.tmp_map, [])
def test_dungeon_initialization_when_map_is_correct(self): h = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2) d = Dungeon('test_maps/test.txt', h, 2) expected_map = [['.', '.', '#'], ['S', 'T', '.'], ['#', '.', 'G']] self.assertEqual(d.tmp_map, expected_map)
def test_getting_the_dimentions_of_the_current_map(self): h = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2) d = Dungeon('test_maps/test.txt', h, 2) expected = (3, 3) self.assertEqual((d.X, d.Y), expected)
def new_filled_dungeon(self): monsters = [] temp_deck = copy.deepcopy(self.deck_init) temp_deck.shuffle() for monster in self.known_monsters: if monster == None: monsters.append(temp_deck.draw()) else: monsters.append(monster) return Dungeon.Dungeon(monsters)
def test_getting_the_end_point_of_the_map_then_return_its_coordinates( self): h = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2) d = Dungeon('test_maps/test.txt', h, 2) result = d.endpoint expected = (2, 2) self.assertEqual(result, expected)
def show(g): Dungeon.show(g["dungeon"]) # -- Interface du joueur -- player = Dungeon.getPlayer(g["dungeon"]) offsetX = 84 offsetY = 2 # Clear for i in range(1, 41): Utils.goto(offsetX, i + 1) Utils.write(29 * " " + "\n") # Link Utils.goto(offsetX + 1, offsetY + 1) Utils.write("Link", "green") # Health health = Entity.getHealth(player) maxHealth = Entity.getMaxHealth(player) Utils.goto(offsetX + 1, offsetY + 3) Utils.write("Health : " + str(health) + " / " + str(maxHealth)) Utils.goto(offsetX + 1, offsetY + 4) healthBar = int(round((health / maxHealth) * 10)) * "♥ " Utils.write(healthBar.decode("utf-8"), "red") # Strength strength = Entity.getStrength(player) Utils.goto(offsetX + 1, offsetY + 6) Utils.write("Strength : + " + str(int((strength - 1) * 100)) + "%") # Resistance resistance = Entity.getResistance(player) Utils.goto(offsetX + 1, offsetY + 8) Utils.write("Resistance : + " + str(int((resistance - 1) * 100)) + "%") # Damage damage = Entity.getDamage(player) Utils.goto(offsetX + 1, offsetY + 10) Utils.write("Damage : " + str(damage))
def show(g): Dungeon.show(g["dungeon"]) # -- Interface du joueur -- player = Dungeon.getPlayer(g["dungeon"]) offsetX = 84 offsetY = 2 # Clear for i in range(1, 41): Utils.goto(offsetX, i+1) Utils.write(29*" "+"\n") # Link Utils.goto(offsetX+1, offsetY+1) Utils.write("Link", "green") # Health health = Entity.getHealth(player) maxHealth = Entity.getMaxHealth(player) Utils.goto(offsetX+1, offsetY+3) Utils.write("Health : " + str(health) + " / " + str(maxHealth)) Utils.goto(offsetX+1, offsetY+4) healthBar = int(round((health/maxHealth)*10))*"♥ " Utils.write(healthBar.decode("utf-8"), "red") # Strength strength = Entity.getStrength(player) Utils.goto(offsetX+1, offsetY+6) Utils.write("Strength : + " + str(int((strength-1)*100)) + "%") # Resistance resistance = Entity.getResistance(player) Utils.goto(offsetX+1, offsetY+8) Utils.write("Resistance : + " + str(int((resistance-1)*100)) + "%") # Damage damage = Entity.getDamage(player) Utils.goto(offsetX+1, offsetY+10) Utils.write("Damage : " + str(damage))
def init(): global globs os.system("mode 200,60") os.system("color 5E") globs.dungeon = Dungeon.genDungeon() globs.player = Player.Player() globs.audio = Audio.Audio() globs.event( "You have entered pony dungeon in the quest for the sword of awesomeness!" ) globs.event("Press h at anytime to view a help menu.") globs.event("Press q at anytime to quit the game.")
def plan(self, globs): dim = len(globs.dungeon) self.paths = Dungeon.adjMatrix(globs.dungeon) dists = deepcopy(self.paths) for i in range(len(dists)): for j in range(len(dists)): if dists[i][j] == 0: dists[i][j] = 1E1000 self.paths[i][j] = None for i in range(dim): for j in range(dim): for k in range(dim): edgeNum = dists[j][i] + dists[i][k] if dists[j][k] > edgeNum: dists[j][k] = edgeNum self.paths[j][k] = self.paths[j][i]
def test_moving_the_hero_down_when_there_are_no_obstacles_then_compare_the_updated_coordinates( self): h = Hero(name="Bron", title="Dragonslayer", health=100, mana=100, mana_regeneration_rate=2) d = Dungeon('test_maps/no_obstacles.txt', h, 2) d.spawn() old_coordinates_after_update = (d.hero_position_X + 1, d.hero_position_Y) d.move_hero('down') new_coordinates = (d.hero_position_X, d.hero_position_Y) self.assertEqual(old_coordinates_after_update, new_coordinates)
def __init__(self): self.mode = MODE_COMMANDS # Other is MODE_USERPLAY where you are in control of the hero if CURSES: # Initialize curses cbreak() noecho() # Initialize the Kernel Kernel() # Set's up the socket NethackSock() # Socket observers SocketLogger( ) # This should be before other stuff for easier debugging FramebufferParser() DGLParser() # Stuff Console() Cursor() Dungeon() Hero() MonsterSpoiler() ItemDB() Inventory() # AI Personality() Senses() Pathing() # Brains curBrain = TestBrain() Kernel.instance.Personality.setBrain(curBrain) # Default brain
elif userInput == "toSmith": os.system('cls' if os.name == 'nt' else 'clear') # It clear the cmd screen Smith.equipmentImprovement(player, language) elif userInput == "leave": break else: # ============================================================== # Dungeon 1 to 50 # if userInput == "toDungeon 1": Dungeon.enemyDungeon(player, language, language[97], 10, 8, 10, 0, 2, 1, 1) elif userInput == "toDungeon 2": Dungeon.enemyDungeon(player, language, language[98], int(20 * difficultModeNumber), int(15 * difficultModeNumber), int(15 * difficultModeNumber), int(8 * difficultModeNumber), 4, 2, 2) elif userInput == "toDungeon 3": Dungeon.enemyDungeon(player, language, language[99], int(50 * difficultModeNumber), int(30 * difficultModeNumber), int(20 * difficultModeNumber), int(25 * difficultModeNumber), 8, 5, 5) elif userInput == "toDungeon 4": Dungeon.enemyDungeon(player, language, language[100], int(80 * difficultModeNumber), int(50 * difficultModeNumber), int(35 * difficultModeNumber), int(35 * difficultModeNumber), 10, 8, 8)
def restart(g): player = Dungeon.getPlayer(g["dungeon"]) Entity.setHealth(player, Entity.getMaxHealth(player)) Dungeon.generate(g["dungeon"], player)
#Set Colors - Colors in pyGame are in RGB format. This is out of convenience. BLACK = (0, 0, 0) WHITE = (255, 255, 255) RED = (255, 0, 0) GREEN = (0, 255, 0) BLUE = (0, 0, 255) #Here we initialize the pygame surface and create the Displaysurface which will hold our main screen, passing along the board size variables*32 for actual pixel size. pygame.init() DISPLAYSURF = pygame.display.set_mode((boardWidth*32,boardHeight*32+160), 0, 32) pygame.display.set_caption('Dev') #Window Title DISPLAYSURF.fill(WHITE) #Fill the screen area with white. #Create LevelHandler to keep track of dungeons and current floor #Create new dungeon with the width and height specified. dungeon = Dungeon(boardWidth, boardHeight) #All elements in the object list will be printed when drawObjects are called. #dungeon.objectlist = [] #Code to generate a monster a random location dungeon.room_Generation(boardWidth,boardHeight) #Append some items to the dungeon.objectlist healer= NPC(64,0,200,1,'healer', Rarity_Database, database) shopkeeper= NPC(0,64,200,1,'shopkeeper', Rarity_Database, database) player = Player(32,32,'images/player.png',"Name",5000,50) dungeon.objectlist.append(player) dungeon.objectlist.append(healer)
def initialize(self, dungeon): self.dungeon = dungeon self.test = True adventurersCurretRoom = Dungeon.getEntry()
def message(text,color=(255,255,255)): global message_text, message_color message_text = text message_color = color #define ASCII codes used for dungeon TILE_EMPTY = 177 TILE_ROOM = 31 TILE_HALL = 31 #main program begins game_init() game_over = False last_time = 0 dungeon = Dungeon(30, 30) dungeon.generate(TILE_EMPTY,TILE_ROOM,TILE_HALL) player = Player(dungeon, 1, "Player") player.x = dungeon.entrance_x+1 player.y = dungeon.entrance_y+1 level = 1 message_text = "Welcome, brave adventurer!" message_color = 0,200,50 draw_radius = False #used to estimate attack damage att = list(0 for n in range(0,5)) attlow=90 atthigh=0 #main loop
def message(text, color=(255, 255, 255)): global message_text, message_color message_text = text message_color = color #define ASCII codes used for dungeon TILE_EMPTY = 177 TILE_ROOM = 31 TILE_HALL = 31 #main program begins game_init() game_over = False last_time = 0 dungeon = Dungeon(30, 30) dungeon.generate(TILE_EMPTY, TILE_ROOM, TILE_HALL) player = Player(dungeon, 1, "Player") player.x = dungeon.entrance_x + 1 player.y = dungeon.entrance_y + 1 level = 1 message_text = "Welcome, brave adventurer!" message_color = 0, 200, 50 draw_radius = False #used to estimate attack damage att = list(0 for n in range(0, 5)) attlow = 90 atthigh = 0 #main loop
import Dungeon d = Dungeon.genDungeon() room = d[0] print(room.show()) room = d[room.doors[0]] print(room.show())