示例#1
0
 def create_room(self):
     """Creates room and returns it's id"""
     new_room = Room()
     new_room.id = self.room_id_manager.get_id()
     self.rooms[new_room.id] = new_room
     new_room.subscribe(self)
     return new_room.id
示例#2
0
    def create_simulation(self, user_input, input_kwargs):

        Room.create_room()

        new_holo = Holodeck(self, scenarios['test']['room_count'],
                            scenarios['test']['room_list'])

        holodecks[new_holo.uuid_id] = new_holo
示例#3
0
    def enter_holo(self, user_input, input_kwargs):

        holo_template = "6942edc5-1f21-4164-86e7-b10f7a3d0b6a"

        new_holo = Room(
            **{
                "uuid_id": uuid.uuid4(),  # uuid
                "entity_type": rooms[holo_template].entity_type,  # base_type
                "ship_id": rooms[holo_template].ship_id,  # ship_id
                "coordinates": rooms[holo_template].coordinates,  # coordinates
                "name": rooms[holo_template].name,  # name
                "description": rooms[holo_template].description,  # description
                "exits": {
                    "out": self.location
                },  # exits
                "region": rooms[holo_template].region,  # region
                "zone": rooms[holo_template].zone,  # zone
                "elevation": rooms[holo_template].elevation,  # elevation
                "effects": rooms[holo_template].effects,  # effects
                "player_inv": rooms[holo_template].player_inv,  # player_inv
                "item_inv": rooms[holo_template].item_inv,  # item_inv
                "npc_inv": rooms[holo_template].npc_inv,  # npc_inv
                "mob_inv": rooms[holo_template].mob_inv,  # mob_inv
                "owner": rooms[holo_template].owner
            })  # owner

        rooms[new_holo.uuid_id] = new_holo

        rooms[self.location].player_inv.remove(self)
        print("before holo:", self.location)
        self.location = new_holo.uuid_id
        print("after holo:", self.location)
        rooms[self.location].player_inv.append(self)
        Room.display_room(self)

        Lex.pub_print(self=self,
                      target=None,
                      send_kwargs={
                          'type': 'text',
                          'spacing': 1
                      },
                      first_person="",
                      target_person="",
                      third_person="{} just arrived.".format(self.name))
示例#4
0
    def create_room(self):

        # choose random room from appropriate region template,
        # create a room, and add it to the instance list

        template = self.region

        for i in room_regions:
            if template == room_regions[i]['name']:
                template = room_regions[i]['template']
            else:
                template = None
                print(
                    "PROCGEN | Create Room | Error: Can't find the template.")

        if template != None:

            choice = random.choice(template)

            # room_uuid_id = uuid.uuid4()
            # print("create_room test:", room_uuid_id)

            created_room = Room(uuid_id=str(uuid.uuid4()),
                                entity_type=choice['entity_type'],
                                ship_id=choice['ship_id'],
                                coordinates={
                                    'x': None,
                                    'y': None
                                },
                                name=choice['name'],
                                description=choice['description'],
                                exits={},
                                region=self.region,
                                zone=self.zone,
                                elevation=choice['elevation'],
                                effects=choice['effects'],
                                player_inv=[],
                                item_inv=[],
                                npc_inv=[],
                                mob_inv=[],
                                owner=choice['owner'])

            # add the room to the global room list
            rooms[created_room.uuid_id] = created_room

            return created_room
示例#5
0
def game_state1(window, control):  # NORMAL
    joy_ctrl = read_all_controls()
    can_move = True
    score_font = pygame.font.SysFont("calibri", 35, True)
    score = 0
    snake = objects.Snake()
    food = objects.Food(randint(0, 39) * GRID, randint(0, 29) * GRID)
    MOVE = pygame.USEREVENT + 1
    pygame.time.set_timer(MOVE, 42)
    game = Room()

    while game.run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                control["state"] = switch_state(game, states.QUIT)
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT and not snake.dirs[
                        "left"] and can_move:
                    snake.dir = Vector(snake.vel, 0, 0)
                    snake.change_direction("right")
                    can_move = False
                elif event.key == pygame.K_LEFT and not snake.dirs[
                        "right"] and can_move:
                    snake.dir = Vector(-snake.vel, 0, 0)
                    snake.change_direction("left")
                    can_move = False
                elif event.key == pygame.K_DOWN and not snake.dirs[
                        "up"] and can_move:
                    snake.dir = Vector(0, snake.vel, 0)
                    snake.change_direction("down")
                    can_move = False
                elif event.key == pygame.K_UP and not snake.dirs[
                        "down"] and can_move:
                    snake.dir = Vector(0, -snake.vel, 0)
                    snake.change_direction("up")
                    can_move = False
                elif event.key == pygame.K_ESCAPE:
                    switch_state(game, pause_st.pause_state, window, control)
                elif event.key == pygame.K_b:
                    snake.grow()
            elif event.type == MOVE:
                snake.move1()
                can_move = True
                if snake.collide():
                    control["state"] = switch_state(game, states.GAME_OVER)

        if not no_joystick:
            if joy.get_button(joy_ctrl["pause"]):
                switch_state(game, pause_st.pause_state, window, control)
            if str(
                    joy.get_hat(0)
            ) == joy_ctrl["left"] and not snake.dirs["right"] and can_move:
                snake.dir = Vector(-snake.vel, 0, 0)
                snake.change_direction("left")
                can_move = False
            elif str(
                    joy.get_hat(0)
            ) == joy_ctrl["right"] and not snake.dirs["left"] and can_move:
                snake.dir = Vector(snake.vel, 0, 0)
                snake.change_direction("right")
                can_move = False
            elif str(
                    joy.get_hat(0)
            ) == joy_ctrl["up"] and not snake.dirs["down"] and can_move:
                snake.dir = Vector(0, -snake.vel, 0)
                snake.change_direction("up")
                can_move = False
            elif str(
                    joy.get_hat(0)
            ) == joy_ctrl["down"] and not snake.dirs["up"] and can_move:
                snake.dir = Vector(0, snake.vel, 0)
                snake.change_direction("down")
                can_move = False

        window.fill((16, 16, 16))
        if snake.eat(food):
            snake.grow()
            score += 1
            food = food.respawn(39, 29, snake)
        snake.show(window)
        food.show(window)
        window.blit(
            score_font.render("SCORE: " + str(score), True, (255, 255, 255)),
            (WIDTH // 2 - 72, 38))
        show_fps(window)
        pygame.display.flip()
        clock.tick(60)

    save_best_score(score)
    if score >= 40:
        unlock_game(2)
示例#6
0
def game_over_state(window, control):
    flag = True
    joy_ctrl = read_all_controls()
    background = pygame.Surface((WIDTH // 2, HEIGHT // 2))
    button_font = pygame.font.SysFont("calibri", 45, True)
    title_text = pygame.font.SysFont("calibri", 60,
                                     True).render("Game Over", True,
                                                  (240, 240, 240))
    colors = ((0, 0, 0), (255, 255, 255))
    button1 = Button(WIDTH // 2, HEIGHT // 2 - 20, (16, 16, 255), button_font,
                     "RESTART", colors, True).set_offset_pos().set_selected()
    button2 = Button(WIDTH // 2, HEIGHT // 2 + 35, (16, 16, 255), button_font,
                     "EXIT", colors, True).set_offset_pos()
    button3 = Button(WIDTH // 2, HEIGHT // 2 + 90, (16, 16, 255), button_font,
                     "QUIT", colors, True).set_offset_pos()
    buttons = (button1, button2, button3)
    game_over = Room(buttons, button_sound)
    if control["game_mode"] == "easy":
        game_mode = states.GAME_2
    elif control["game_mode"] == "hard":
        game_mode = states.GAME_3
    else:
        game_mode = states.GAME_1

    while game_over.run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                control["state"] = switch_state(game_over, states.QUIT)
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    game_over.update_button("up")
                elif event.key == pygame.K_DOWN:
                    game_over.update_button("down")
                if game_over.button_pressed() == 0:
                    control["state"] = switch_state(game_over, game_mode)
                elif game_over.button_pressed() == 1:
                    control["state"] = switch_state(game_over, states.MENU)
                elif game_over.button_pressed() == 2:
                    control["state"] = switch_state(game_over, states.QUIT)

        if not no_joystick:
            if str(joy.get_hat(0)) == joy_ctrl["up"] and flag:
                game_over.update_button("up")
                flag = False
            elif str(joy.get_hat(0)) == joy_ctrl["down"] and flag:
                game_over.update_button("down")
                flag = False
            elif joy.get_hat(0) == (0, 0):
                flag = True
            if joy.get_button(joy_ctrl["accept"]):
                if game_over.button_pressed(True) == 0:
                    control["state"] = switch_state(game_over, game_mode)
                elif game_over.button_pressed(True) == 1:
                    control["state"] = switch_state(game_over, states.MENU)
                elif game_over.button_pressed(True) == 2:
                    control["state"] = switch_state(game_over, states.QUIT)

        window.blit(background, (WIDTH // 4, HEIGHT // 4))
        background.fill((16, 16, 216))
        window.blit(title_text, (WIDTH // 2 - 140, HEIGHT // 2 - 110))
        game_over.show(window, 0, 0)
        pygame.display.flip()
        clock.tick(48)
示例#7
0
def pause_state(window, control) -> int:
    flag = True
    joy_ctrl = read_all_controls()
    background = pygame.Surface((WIDTH // 2, HEIGHT // 2))
    button_font = pygame.font.SysFont("calibri", 50, True)
    colors = ((0, 0, 0), (255, 255, 255))
    button1 = Button(WIDTH // 2, HEIGHT // 2 - 110, (16, 16, 255), button_font,
                     "RESUME", colors, True).set_offset_pos().set_selected()
    button2 = Button(WIDTH // 2, HEIGHT // 2 - 50, (16, 16, 255), button_font,
                     "RESTART", colors, True).set_offset_pos()
    button3 = Button(WIDTH // 2, HEIGHT // 2 + 10, (16, 16, 255), button_font,
                     "EXIT", colors, True).set_offset_pos()
    button4 = Button(WIDTH // 2, HEIGHT // 2 + 70, (16, 16, 255), button_font,
                     "QUIT", colors, True).set_offset_pos()
    buttons = (button1, button2, button3, button4)
    pause = Room(buttons, button_sound)
    q = 0
    if control["game_mode"] == "easy":
        game_mode = states.GAME_2
    elif control["game_mode"] == "hard":
        game_mode = states.GAME_3
    else:
        game_mode = states.GAME_1

    while pause.run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                control["state"] = switch_state(pause, states.QUIT)
                q = 1
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    pause.update_button("up")
                elif event.key == pygame.K_DOWN:
                    pause.update_button("down")
                if pause.button_pressed() == 0:
                    pause.exit()
                elif pause.button_pressed() == 1:
                    control["state"] = switch_state(pause, game_mode)
                    q = 1
                elif pause.button_pressed() == 2:
                    control["state"] = switch_state(pause, states.MENU)
                    q = 1
                elif pause.button_pressed() == 3:
                    control["state"] = switch_state(pause, states.QUIT)
                    q = 1

        if not no_joystick:
            if str(joy.get_hat(0)) == joy_ctrl["up"] and flag:
                pause.update_button("up")
                flag = False
            elif str(joy.get_hat(0)) == joy_ctrl["down"] and flag:
                pause.update_button("down")
                flag = False
            if joy.get_hat(0) == (0, 0):
                flag = True
            if joy.get_button(joy_ctrl["accept"]):
                if pause.button_pressed(True) == 0:
                    pause.exit()
                elif pause.button_pressed(True) == 1:
                    control["state"] = switch_state(pause, game_mode)
                    q = 1
                elif pause.button_pressed(True) == 2:
                    control["state"] = switch_state(pause, states.MENU)
                    q = 1
                elif pause.button_pressed(True) == 3:
                    control["state"] = switch_state(pause, states.QUIT)
                    q = 1

        window.blit(background, (WIDTH // 4, HEIGHT // 4))
        background.fill((16, 16, 216))
        pause.show(window, 0, 0)
        pygame.display.flip()
        clock.tick(48)

    return q
示例#8
0
 def setUp(self):
     self.room = Room()
     self.room.id = 0
     self.id_manager = IdManager()
示例#9
0
class GeneralTestCase(unittest.TestCase):

    def setUp(self):
        self.room = Room()
        self.room.id = 0
        self.id_manager = IdManager()

    def test_remove_from_empty_room(self):
        self.assertFalse(self.room.remove_user(3))

    def test_add_user(self):
        user_a = User()
        user_a.id = self.id_manager.get_id()
        user_a.name = 'user_a'

        self.assertTrue(self.room.add_user(user_a))
        self.assertEqual(user_a, self.room.users[0])

    def test_add_too_much_users(self):
        user_a = User()
        user_b = User()
        user_c = User()
        user_d = User()
        user_e = User()
        should_be = [user_a, user_b, user_c, user_d]

        self.assertTrue(self.room.add_user(user_a))
        self.assertTrue(self.room.add_user(user_b))
        self.assertTrue(self.room.add_user(user_c))
        self.assertTrue(self.room.add_user(user_d))
        self.assertFalse(self.room.add_user(user_e))
        self.assertNotIn(user_e, self.room.users)
        self.assertEqual(self.room.users, should_be)

    def test_serialization(self):
        user_a = User()
        user_a.id = self.id_manager.get_id()
        user_a.name = 'user_a'

        user_b = User()
        user_b.id = self.id_manager.get_id()
        user_b.name = 'user_b'

        user_names = ['user_a', 'user_b']

        self.assertTrue(self.room.add_user(user_a))
        self.assertTrue(self.room.add_user(user_b))

        serialized = self.room.serialize(only_usernames=True)

        self.assertEqual(serialized['users'], user_names)
        self.assertEqual(serialized['id'], 0)
        self.assertFalse(serialized['inGame'])

        serialized = self.room.serialize(only_usernames=False)

        self.assertEqual('user_a', serialized['users'][0]['name'])
        self.assertEqual(0, serialized['users'][0]['id'])

        self.assertEqual('user_b', serialized['users'][1]['name'])
        self.assertEqual(1, serialized['users'][1]['id'])
示例#10
0
def start():

    # load global command list
    load_global_command_list()
    # print(global_command_list)

    #load players
    print("Loading players...")
    load_all_players(players)
    print("Converting players to objects...")
    for player in players:
        players[player] = Player(**players[player])

    # for i in players:
    #     print(i, pprint(vars(players[i])))

    # load rooms
    print("")
    print("Loading rooms...")
    load_all_rooms(rooms)
    print("Converting rooms to objects...")
    for room in rooms:
        rooms[room] = Room(**rooms[room])
    # for i in rooms:
    #     pprint(vars(rooms[i]))

    # load items
    print("")
    print("Loading items...")
    load_all_items(items)
    print("Converting items to objects...")

    class_dict = {
        "Item": Item,
        "TacSuit": TacSuit,
        "Ship": Ship,
        "Gun": Gun,
        "Pistol": Pistol,
        "Pistol_9mm": Pistol_9mm,
        "Assault_Rifle": Assault_Rifle,
        "Assault_Rifle_Energy": Assault_Rifle_Energy
    }

    for i in items:
        instance_class = class_dict[items[i]['join_table']['class']]
        items[i] = instance_class(**items[i])

    # load npcs
    print("")
    print("Loading npcs...")
    load_all_npcs(npcs)
    # print("items before:", items)
    print("Converting npcs to objects...")
    for npc in npcs:
        npcs[npc] = Npc(**npcs[npc])

    print("")
    print("Putting items in rooms and other items...")
    if items:

        print("Items...")
        for i in items:
            # pprint(items[i])
            for x in items:
                # pprint(vars(items[x]))
                if items[i].location == items[x].uuid_id:
                    print(" Putting item:", items[i].name, "in item:",
                          items[items[i].location].name)
                    items[items[i].location].item_inv.append(items[i])

        print("Rooms...")
        for i in items:
            # pprint(vars(items[i]))
            for y in rooms:
                if items[i].location == rooms[y].uuid_id:
                    print(" Putting item:", items[i].name, "in room:",
                          rooms[items[i].location].name)
                    rooms[items[i].location].item_inv.append(items[i])

        print("Players...")
        for i in items:
            for z in players:
                if items[i].location == players[z].uuid_id:
                    print(" Putting item:", items[i].name, "in player:",
                          players[items[i].location].name)
                    # print(players[z])
                    # print(items[i])
                    players[z].inventory[items[i].location_body['location']][
                        'contents'] = items[i]

        print("NPCs...")
        for i in items:
            for a in npcs:
                if items[i].location == npcs[a].uuid_id:
                    print(" Putting item:", items[i].name, "in npc:",
                          npcs[items[i].location].name)
                    npcs[a].inventory['r_hand']['contents'] = items[i]

    if npcs:
        print("Adding NPCs to rooms...")
        for i in npcs:
            # pprint(vars(npcs[i]))
            for a in rooms:
                if npcs[i].location == rooms[a].uuid_id:
                    print(" Putting npc:", npcs[i].name, "in room:",
                          rooms[npcs[i].location].name)
                    rooms[a].npc_inv.append(npcs[i])

    print("Done.")

    MainLoop.main_loop_all()
示例#11
0
def ask_clear_state(window, control) -> int:
    flag = True
    flag2 = False
    joy_ctrl = read_all_controls()
    dark = pygame.Surface((WIDTH, HEIGHT), pygame.SRCALPHA)
    dark.fill((0, 0, 0, 96))
    window.blit(dark, (0, 0))
    background = pygame.Surface((WIDTH // 2 - 150, HEIGHT // 2 - 150))
    button_font = pygame.font.SysFont("calibri", 41, True)
    colors = ((0, 0, 0), (255, 255, 255))
    button1 = Button(WIDTH // 2, HEIGHT // 2 - 40, (16, 16, 255), button_font, "COMMIT", colors, True).set_offset_pos().set_selected()
    button2 = Button(WIDTH // 2, HEIGHT // 2 + 10, (16, 16, 255), button_font, "CANCEL", colors, True).set_offset_pos()
    buttons = (button1, button2)
    ask_clear = Room(buttons, button_sound)
    q = 0

    while ask_clear.run:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                control["state"] = switch_state(ask_clear, states.QUIT)
                q = 1
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    ask_clear.update_button("up")
                elif event.key == pygame.K_DOWN:
                    ask_clear.update_button("down")
                if ask_clear.button_pressed() == 0:
                    clear_data()
                    ask_clear.exit()
                elif ask_clear.button_pressed() == 1:
                    ask_clear.exit()

        if not no_joystick:
            if str(joy.get_hat(0)) == joy_ctrl["up"] and flag:
                ask_clear.update_button("up")
                flag = False
            elif str(joy.get_hat(0)) == joy_ctrl["down"] and flag:
                ask_clear.update_button("down")
                flag = False
            if joy.get_hat(0) == (0, 0):
                flag = True
            if joy.get_button(joy_ctrl["accept"]) and flag2:
                flag2 = False
                if ask_clear.button_pressed(True) == 0:
                    clear_data()
                    ask_clear.exit()
                elif ask_clear.button_pressed(True) == 1:
                    ask_clear.exit()
            elif not joy.get_button(joy_ctrl["accept"]):
                flag2 = True

        window.blit(background, (WIDTH // 4 + 75, HEIGHT // 4 + 75))
        background.fill((16, 16, 216))
        ask_clear.show(window, 0, 0)
        pygame.display.flip()
        clock.tick(48)

    return q
示例#12
0
import logging
import random

from engine import dice
from engine.event import Event as _Event
from engine.globals import G
from engine.room import Room as _Room
from engine import say

# TODO: Devise a way to load rooms (and maybe events?) from a config file.
# TODO: Create "locations" within each room to find items in, for enemies to
# hang out in, etc.
_CathedralPews = _Room.create_room_type(
    "CathedralPews",
    "You are in the pews of a maddening cathedral. The benches stretch on "
    "all sides and seem to creep up the walls. A murmuring sound suggests "
    "either wind or the prayers of an unseen petitioner.",
    themes=["cathedral"],
)
_CathedralCatacombs = _Room.create_room_type(
    "CathedralCatacombs",
    "You descend slick stairs into catacombs. Time-smooth placards adorn "
    "niches. The thick air smells of stone and moisture.",
    themes=["cathedral"],
)
_CathedralLibrary = _Room.create_room_type(
    "CathedralLibrary",
    "A crumbling library. Tomes of thick vellum stand open on tables. The "
    "chairs are askew. Distant laughter can be heard.",
    themes=["cathedral"],
)