예제 #1
0
    def generate_sea_test(self):
        # implementing Generation.py
        gen = Generation.Generation()
        gen.make()
        while not gen.isComplete():
            del gen
            print("Generation failed, remaking...")
            gen = Generation.Generation()
            gen.make()
        gen.printRooms()

        # island is at (3, 3)
        test = Island(pygame.math.Vector2(3, 3), "Test")
        self.islands[str(test.pos)] = test

        #
        # Test island generation
        #
        x, y = 0, 0
        shop_exists = False
        # Loop for each room on Generated island
        for row in gen.rows:
            for room in row:
                if room.iter_num is 6 and not shop_exists:
                    room_shop = GameBase.Room(test, pygame.math.Vector2(y, x))
                    room_shop.neighbors = room.neighbors
                    room_shop.gen_Object = room
                    shop_exists = True
                    # print ("shop at " + str(y) + ", " + str(x))
                elif room.iter_num is 1:
                    room_pickups = GameBase.Room(test,
                                                 pygame.math.Vector2(y, x))
                    room_pickups.neighbors = room.neighbors
                    room_pickups.gen_Object = room
                    # print ("start at " + str(y) + ", " + str(x))
                elif room.iter_num is 2:
                    room_creation = GameBase.Room(test,
                                                  pygame.math.Vector2(y, x))
                    room_creation.neighbors = room.neighbors
                    room_creation.gen_Object = room
                elif room.iter_num is 3:
                    room_enemies = GameBase.Room(test,
                                                 pygame.math.Vector2(y, x))
                    room_enemies.neighbors = room.neighbors
                    room_enemies.gen_Object = room
                elif room.iter_num is 4:
                    room_boss = GameBase.Room(test, pygame.math.Vector2(y, x))
                    room_boss.neighbors = room.neighbors
                    room_boss.gen_Object = room
                else:
                    empty_room = GameBase.Room(test, pygame.math.Vector2(y, x))
                    empty_room.neighbors = room.neighbors
                    empty_room.gen_Object = room
                    # print ("empty at " + str(y) + ", " + str(x))
                    test.rooms.append(empty_room)
                y += 1
            x += 1
            y = 0

        # pickups room
        # places stuff in room_pickups
        ship = Entities.ExitShip(room_pickups)
        ship.pos = pygame.math.Vector2(
            Constants.TILE_SIZE * Constants.ROOM_SIZE / 2,
            Constants.TILE_SIZE * Constants.ROOM_SIZE / 2)
        room_pickups.entities.append(ship)
        room_pickups.type = GameBase.RoomType.EXIT

        for i in range(1, 5):
            heart = Entities.HealthPickup(room_pickups, i)
            heart.pos = pygame.math.Vector2(64 + 48 * i,
                                            96)  # location of hearts on screen
            room_pickups.entities.append(heart)

        for i in range(1, 7):
            enemie = Characters.SnakeEnemy(room_enemies)
            enemie.pos = pygame.math.Vector2(
                64 + 48 * i, 112)  # places the location of the enemie
            room_enemies.entities.append(enemie)

        for i in range(1, 4):
            enemie = Characters.HornetEnemy(room_enemies)
            enemie.pos = pygame.math.Vector2(
                80 + 120 * i, 112)  # places the location of the enemie
            room_enemies.entities.append(enemie)

        for i in range(0, 10):
            g = pow(2, i)
            gold = Entities.GoldPickup(room_pickups, g)
            gold.pos = pygame.math.Vector2(
                Constants.ROOM_SIZE * Constants.TILE_SIZE - 96,
                64 + 48 * i)  # location of gold on screen
            room_pickups.entities.append(gold)

        item = Entities.ItemPickup(room_pickups,
                                   Items.BasicMeleeItem("sword", 2))
        item.pos = pygame.math.Vector2(100, 200)
        room_pickups.entities.append(item)
        item3 = Entities.ItemPickup(room_pickups,
                                    Items.BasicMeleeItem("cutlass", 3))
        item3.pos = pygame.math.Vector2(300, 200)
        room_pickups.entities.append(item3)
        item2 = Entities.ItemPickup(room_pickups, Items.BowItem())
        item2.pos = pygame.math.Vector2(200, 200)
        room_pickups.entities.append(item2)

        test.rooms.append(room_enemies)

        test.rooms.append(room_pickups)
        test.start_room = room_pickups

        # boss room
        b = Characters.WizardEnemy(room_boss)
        b.teleport()
        room_boss.entities.append(b)
        test.rooms.append(room_boss)
        room_boss.type = GameBase.RoomType.BOSS

        # shop room
        # places stuff in room_shop
        room_shop.type = GameBase.RoomType.SHOP

        shopkeeper = Characters.Shopkeeper(room_shop)
        shopkeeper.pos = pygame.math.Vector2(100, 300)
        room_shop.entities.append(shopkeeper)

        pedestal = Entities.ShopPedestal(
            room_shop, Entities.ItemPickup(room_shop, Items.DummyItem()), 30)
        pedestal.pos = pygame.math.Vector2(108, 375)
        room_shop.entities.append(pedestal)

        test.rooms.append(room_shop)

        test.rooms.append(room_creation)

        for room in test.rooms:
            keys = list(room.neighbors.keys())
            factor = 64
            # if North exit
            if 1 in keys:
                thingy = Entities.HealthPickup(room, 1)
                # thingy.pos = pygame.math.Vector2(factor * 4, factor * 2)
                # room.entities.append(thingy)
            else:
                if (room.pos.y != 0):
                    for i in range(9):
                        wall = Entities.Terrain(room)
                        wall.pos = pygame.math.Vector2(factor * i, 0)
                        room.entities.append(wall)
            # if East exit
            if 2 in keys:
                thingy = Entities.HealthPickup(room, 2)
                # thingy.pos = pygame.math.Vector2(factor * 7, factor * 4)
                # room.entities.append(thingy)
            else:
                if (room.pos.x != 2):
                    for i in range(9):
                        wall = Entities.Terrain(room)
                        wall.pos = pygame.math.Vector2(factor * 8, factor * i)
                        room.entities.append(wall)
            # if South exit
            if 3 in keys:
                thingy = Entities.HealthPickup(room, 3)
                # thingy.pos = pygame.math.Vector2(factor * 4, factor * 7)
                # room.entities.append(thingy)
            else:
                if (room.pos.y != 2):
                    for i in range(9):
                        wall = Entities.Terrain(room)
                        wall.pos = pygame.math.Vector2(factor * i, factor * 8)
                        room.entities.append(wall)
            # if West exit
            if 4 in keys:
                thingy = Entities.HealthPickup(room, 4)
                # thingy.pos = pygame.math.Vector2(factor * i, factor * 4)
                # room.entities.append(thingy)
            else:
                if (room.pos.x != 0):
                    for i in range(9):
                        wall = Entities.Terrain(room)
                        wall.pos = pygame.math.Vector2(0, factor * i)
                        room.entities.append(wall)
예제 #2
0
def generation(island):
    width = random.randint(3, 7)
    length = random.randint(3, 7)
    # implementing Generation.py
    gen = Generation.Generation(width, length)
    gen.make()
    while not gen.isComplete():
        del gen
        print("Generation failed, remaking...")
        gen = Generation.Generation(width, length)
        gen.make()
    gen.printRooms()

    island.width = width
    island.length = length

    # Start creation
    x, y = 0, 0
    shop_exists = False
    # Loop for each room on Generated island
    for row in gen.rows:
        for room in row:
            if room.iter_num is 6 and not shop_exists:
                room_shop = GameBase.Room(island, pygame.math.Vector2(y, x))
                room_shop.neighbors = room.neighbors
                room_shop.gen_Object = room
                shop_exists = True
                # print ("shop at " + str(y) + ", " + str(x))
            elif room.iter_num is 1:
                room_pickups = GameBase.Room(island, pygame.math.Vector2(y, x))
                room_pickups.neighbors = room.neighbors
                room_pickups.gen_Object = room
                # print ("start at " + str(y) + ", " + str(x))
            else:
                empty_room = GameBase.Room(island, pygame.math.Vector2(y, x))
                empty_room.neighbors = room.neighbors
                empty_room.gen_Object = room
                # print ("empty at " + str(y) + ", " + str(x))
                island.rooms.append(empty_room)
            y += 1
        x += 1
        y = 0

    # boss room
    b = Characters.WizardEnemy(island.rooms[(len(island.rooms) - 1)])
    b.teleport()
    island.rooms[(len(island.rooms) - 1)].entities.append(b)
    island.rooms[(len(island.rooms) - 1)].type = GameBase.RoomType.BOSS

    # starting room
    island.start_room = island.rooms[0]
    ship = Entities.ExitShip(island.start_room)
    ship.pos = pygame.math.Vector2(64 * 5, 64 * 5)
    island.start_room.entities.append(ship)
    island.start_room.type = GameBase.RoomType.EXIT

    # pickups room
    # places stuff in room_pickups
    # for i in range(1, 5):
    #     heart = Entities.HealthPickup(room_pickups, i)
    #     heart.pos = pygame.math.Vector2(64 + 48 * i, 96) # location of hearts on screen
    #     room_pickups.entities.append(heart)

    # for i in range(0, 10):
    #     g = pow(2, i)
    #     gold = Entities.GoldPickup(room_pickups, g)
    #     gold.pos = pygame.math.Vector2(Constants.ROOM_SIZE * Constants.TILE_SIZE - 96, 64 + 48 * i) # location of gold on screen
    #     room_pickups.entities.append(gold)

    item = Entities.ItemPickup(room_pickups, Items.DummyItem())
    item.pos = pygame.math.Vector2(100, 200)
    room_pickups.entities.append(item)

    island.rooms.append(room_pickups)

    # shop room
    # places stuff in room_shop
    room_shop.type = GameBase.RoomType.SHOP

    shopkeeper = Characters.Shopkeeper(room_shop)
    shopkeeper.pos = pygame.math.Vector2(
        Constants.ROOM_SIZE * Constants.TILE_SIZE / 2 - 16,
        Constants.ROOM_SIZE * Constants.TILE_SIZE / 2 - 96)
    room_shop.entities.append(shopkeeper)

    pedestal_count = random.randint(1, 4)
    for i in range(pedestal_count):
        x = Constants.ROOM_SIZE * Constants.TILE_SIZE / (pedestal_count +
                                                         1) * (i + 1)
        y = shopkeeper.pos.y + 160
        make_store_pedestal(room_shop, pygame.math.Vector2(x, y))

    island.rooms.append(room_shop)

    # island.rooms.append(room_creation)

    # Wall placement
    for room in island.rooms:
        keys = list(room.neighbors.keys())
        factor = 64  # rooms are (9 * 64) x (9 * 64) pixels

        # if no North exit
        if 1 not in keys:
            # if not Northernmost row
            if (room.pos.y != 0):
                # if Westernmost column
                if (room.pos.x == 0):
                    for i in range(1, 9):
                        addWall(room, factor * i, 0)
                # if Easternmost column
                elif (room.pos.x == (width - 1)):
                    for i in range(8):
                        addWall(room, factor * i, 0)
                # make as usual
                else:
                    for i in range(9):
                        addWall(room, factor * i, 0)
            else:
                for i in range(9):
                    addBound(room, factor * i, 0)
        else:
            # if not Northernmost row
            if (room.pos.y != 0):
                # if not Westernmost column
                if (room.pos.x != 0):
                    addWall(room, 0, 0)
                # if not Easternmost column
                if (room.pos.x != (length - 1)):
                    addWall(room, factor * 8, 0)

        # if no East exit
        if 2 not in keys:
            # if not Easternmost column
            if (room.pos.x != (length - 1)):
                # if Northernmost row
                if (room.pos.y == 0):
                    for i in range(1, 9):
                        addWall(room, factor * 8, factor * i)
                # if Southernmost row
                elif (room.pos.y == (width - 1)):
                    for i in range(8):
                        addWall(room, factor * 8, factor * i)
                # make as usual
                else:
                    for i in range(9):
                        addWall(room, factor * 8, factor * i)
            else:
                for i in range(9):
                    addBound(room, factor * 8, factor * i)
        else:
            # if not Easternmost column
            if (room.pos.x != (length - 1)):
                # if not Northernmost row
                if (room.pos.y != 0):
                    addWall(room, factor * 8, 0)
                # if not Southernmost row
                if (room.pos.y != (width - 1)):
                    addWall(room, factor * 8, factor * 8)

        # if no South exit
        if 3 not in keys:
            # if not Southernmost row
            if (room.pos.y != (width - 1)):
                # if Easternmost column
                if (room.pos.x == 0):
                    for i in range(1, 9):
                        addWall(room, factor * i, factor * 8)
                # if Westernmost column
                elif (room.pos.x == (length - 1)):
                    for i in range(8):
                        addWall(room, factor * i, factor * 8)
                # draw wall as usual
                else:
                    for i in range(9):
                        addWall(room, factor * i, factor * 8)
            else:
                for i in range(9):
                    addBound(room, factor * i, factor * 8)
        else:
            # if not Southernmost row
            if (room.pos.y != (width - 1)):
                # if not Easternmost column
                if (room.pos.x != 0):
                    addWall(room, 0, factor * 8)
                # if not Westernmost column
                if (room.pos.x != (length - 1)):
                    addWall(room, factor * 8, factor * 8)

        # if West exit
        if 4 not in keys:
            # if not Westernmost room
            if (room.pos.x != 0):
                # if Northernmost room
                if (room.pos.y == 0):
                    for i in range(1, 9):
                        addWall(room, 0, factor * i)
                # if Southernmost room
                elif (room.pos.y == (width - 1)):
                    for i in range(8):
                        addWall(room, 0, factor * i)
                # draw wall as usual
                else:
                    for i in range(9):
                        addWall(room, 0, factor * i)
            else:
                for i in range(9):
                    addBound(room, 0, factor * i)
        else:
            # if not Westernmost column
            if (room.pos.x != 0):
                # if not Northernmost row
                if (room.pos.y != 0):
                    addWall(room, 0, 0)
                # if not Southernmost row
                if (room.pos.y != (width - 1)):
                    addWall(room, 0, factor * 8)