ವಿಷಯಕ್ಕೆ ತೆರಳಿ

ಪ್ರಾಜೆಕ್ಟ್ 14: ಟೆಕ್ಸ್ಟ್-ಆಧಾರಿತ ಸಾಹಸ ಆಟ (Text-Based Adventure Game)

ಈ ಪ್ರಾಜೆಕ್ಟ್‌ನಲ್ಲಿ, ನಾವು ಒಂದು ಸರಳ, ಟೆಕ್ಸ್ಟ್-ಆಧಾರಿತ ಸಾಹಸ ಆಟವನ್ನು ನಿರ್ಮಿಸುತ್ತೇವೆ. ಆಟಗಾರರು ಒಂದು ಕಾಲ್ಪನಿಕ ಜಗತ್ತಿನಲ್ಲಿರುತ್ತಾರೆ ಮತ್ತು go north, get key ನಂತಹ ಸರಳ ಕಮಾಂಡ್‌ಗಳನ್ನು ಟೈಪ್ ಮಾಡುವ ಮೂಲಕ ಆಟವಾಡುತ್ತಾರೆ. ಆಟದ ಜಗತ್ತನ್ನು ( ಕೋಣೆಗಳು, ವಸ್ತುಗಳು, ಮತ್ತು ಸಂಪರ್ಕಗಳು) ಡಿಕ್ಷನರಿಗಳನ್ನು ಬಳಸಿ ರಚಿಸಲಾಗುತ್ತದೆ.

ಕಲಿಕೆಯ ಪರಿಕಲ್ಪನೆಗಳು

  • ನೆಸ್ಟೆಡ್ ಡಿಕ್ಷನರಿಗಳನ್ನು ಬಳಸಿ ಸಂಕೀರ್ಣ ಡೇಟಾ ರಚನೆಗಳನ್ನು (ಆಟದ ಜಗತ್ತು) ನಿರ್ಮಿಸುವುದು.
  • while ಲೂಪ್ - ಮುಖ್ಯ ಆಟದ ಲೂಪ್‌ಗಾಗಿ.
  • ಬಳಕೆದಾರರ ಇನ್‌ಪುಟ್ ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡುವುದು (split()).
  • ಆಟದ ಸ್ಥಿತಿಯನ್ನು (state) ನಿರ್ವಹಿಸುವುದು (ಉದಾ: ಪ್ರಸ್ತುತ ಕೋಣೆ, ಇನ್ವೆಂಟರಿ).
  • ಫಂಕ್ಷನ್‌ಗಳನ್ನು ಬಳಸಿ ಆಟದ ಲಾಜಿಕ್ ಅನ್ನು ವಿಭಜಿಸುವುದು.

ಕೋಡ್

def show_status(current_room, game_map, inventory):
    """ಆಟಗಾರನ ಪ್ರಸ್ತುತ ಸ್ಥಿತಿಯನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ."""
    print("\n---------------------------------")
    # ಪ್ರಸ್ತುತ ಕೋಣೆಯ ವಿವರಣೆ
    print(f"ನೀವು ಈಗ '{game_map[current_room]['name']}' ನಲ್ಲಿದ್ದೀರಿ.")
    print(game_map[current_room]['description'])

    # ಕೋಣೆಯಲ್ಲಿರುವ ವಸ್ತುಗಳನ್ನು ತೋರಿಸುವುದು
    if 'item' in game_map[current_room]:
        print(f"ಇಲ್ಲಿ ಒಂದು '{game_map[current_room]['item']}' ಇದೆ.")

    # ನಿಮ್ಮ ಇನ್ವೆಂಟರಿ ತೋರಿಸುವುದು
    print(f"ನಿಮ್ಮ ಇನ್ವೆಂಟರಿ: {inventory if inventory else 'ಖಾಲಿಯಾಗಿದೆ'}")
    print("---------------------------------")

def main():
    """ಆಟದ ಮುಖ್ಯ ಫಂಕ್ಷನ್."""

    # ಆಟದ ಜಗತ್ತನ್ನು ಡಿಕ್ಷನರಿ ಬಳಸಿ ಡಿಫೈನ್ ಮಾಡುವುದು
    game_map = {
        'start': {
            'name': 'ಪ್ರಾರಂಭದ ಕೋಣೆ',
            'description': 'ನೀವು ಒಂದು ಮಂದಬೆಳಕಿನ ಕೋಣೆಯಲ್ಲಿದ್ದೀರಿ. ಉತ್ತರಕ್ಕೆ ಒಂದು ಬಾಗಿಲಿದೆ.',
            'exits': {'north': 'hallway'}
        },
        'hallway': {
            'name': 'ಕಾರಿಡಾರ್',
            'description': 'ಇದು ಒಂದು ಉದ್ದನೆಯ ��ಾರಿಡಾರ್. ದಕ್ಷಿಣಕ್ಕೆ ಪ್ರಾರಂಭದ ಕೋಣೆ ಮತ್ತು ಪೂರ್ವಕ್ಕೆ ಒಂದು ಬಾಗಿಲಿದೆ. ನೆಲದ ಮೇಲೆ ಒಂದು ಕೀಲಿ ಇದೆ.',
            'exits': {'south': 'start', 'east': 'treasure_room'},
            'item': 'key'
        },
        'treasure_room': {
            'name': 'ನಿಧಿ ಕೋಣೆ',
            'description': 'ಇದು ನಿಧಿಯಿಂದ ತುಂಬಿದ ಕೋಣೆ! ಆದರೆ ಬಾಗಿಲು ಲಾಕ್ ಆಗಿದೆ.',
            'exits': {'west': 'hallway'},
            'locked': True
        }
    }

    current_room = 'start'
    inventory = []

    print("ಸಾಹಸ ಆಟಕ್ಕೆ ಸ್ವಾಗತ!")
    print("ಕಮಾಂಡ್‌ಗಳು: go [direction], get [item], quit")

    while True:
        show_status(current_room, game_map, inventory)

        # ಬಳಕೆದಾರರ ಇನ್‌ಪುಟ್ ಪಡೆಯುವುದು
        command = input("> ").lower().split()

        if not command:
            continue

        action = command[0]

        # ಆಟದಿಂದ ನಿರ್ಗಮಿಸುವುದು
        if action == 'quit':
            print("ಆಟವಾಡಿದ್ದಕ್ಕಾಗಿ ಧನ್ಯವಾದಗಳು!")
            break

        # ಚಲನೆಯ ಕಮಾಂಡ್
        elif action == 'go':
            if len(command) > 1:
                direction = command[1]
                if direction in game_map[current_room]['exits']:
                    next_room = game_map[current_room]['exits'][direction]

                    # ಕೋಣೆ ಲಾಕ್ ಆಗಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುವುದು
                    if game_map.get(next_room, {}).get('locked', False):
                        if 'key' in inventory:
                            print("ನೀವು ಕೀಲಿ ಬಳಸಿ ಬಾಗಿಲನ್ನು ತೆರೆದಿದ್ದೀರಿ!")
                            game_map[next_room]['locked'] = False
                            current_room = next_room
                        else:
                            print("ಬಾಗಿಲು ಲಾಕ್ ಆಗಿದೆ! ನಿಮಗೆ ಕೀಲಿ ಬೇಕು.")
                    else:
                        current_room = next_room
                else:
                    print(f"'{direction}' ದಿಕ್ಕಿನಲ್ಲಿ ಹೋಗಲು ��ಾಧ್ಯವಿಲ್ಲ.")
            else:
                print("ಎಲ್ಲಿಗೆ ಹೋಗಬೇಕು? (ಉದಾ: go north)")

        # ವಸ್ತುವನ್ನು ಪಡೆಯುವ ಕಮಾಂಡ್
        elif action == 'get':
            if len(command) > 1:
                item_to_get = command[1]
                if 'item' in game_map[current_room] and game_map[current_room]['item'] == item_to_get:
                    print(f"ನೀವು '{item_to_get}' ಅನ್ನು ತೆಗೆದುಕೊಂಡಿದ್ದೀರಿ.")
                    inventory.append(item_to_get)
                    del game_map[current_room]['item'] # ಕೋಣೆಯಿಂದ ವಸ್ತುವನ್ನು ತೆಗೆದುಹಾಕುವುದು
                else:
                    print(f"'{item_to_get}' ಇಲ್ಲಿಲ್ಲ.")
            else:
                print("ಏನನ್ನು ತೆಗೆದುಕೊಳ್ಳಬೇಕು? (ಉದಾ: get key)")

        else:
            print("ಅಮಾನ್ಯ ಕಮಾಂಡ್.")

        # ಗೆಲುವಿನ ಷರತ್ತು
        if current_room == 'treasure_room' and not game_map['treasure_room']['locked']:
            print("\nಅಭಿನಂದನೆಗಳು! ನೀವು ��ಿಧಿ ಕೋಣೆಯನ್ನು ತಲುಪಿದ್ದೀರಿ ಮತ್ತು ಆಟವನ್ನು ಗೆದ್ದಿದ್ದೀರಿ!")
            break

if __name__ == "__main__":
    main()

ವಿವರಣೆ

  1. game_map ಡಿಕ್ಷನರಿ:
    • ಇದು ಆಟದ ಸಂಪೂರ್ಣ ಜಗತ್ತನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ.
    • ಪ್ರತಿಯೊಂದು ಕೀ (ಉದಾ: 'start') ಒಂದು ಕೋಣೆಯನ್ನು ಸೂಚಿಸುತ್ತದೆ.
    • ಪ್ರತಿ ಕೋಣೆಯ ವ್ಯಾಲ್ಯೂ ಇನ್ನೊಂದು ಡಿಕ್ಷನರಿಯಾಗಿದ್ದು, ಅದು ಆ ಕೋಣೆಯ ಹೆಸರು, ವಿವರಣೆ, ನಿರ್ಗಮನಗಳು (exits), ಮತ್ತು ಐಚ್ಛಿಕವಾಗಿ ವಸ್ತು (item) ಅಥವಾ ಲಾಕ್ ಸ್ಥಿತಿ (locked) ಯನ್ನು ಹೊಂದಿರುತ್ತದೆ.
  2. ಆಟದ ಸ್ಥಿತಿ (Game State):
    • current_room: ಆಟಗಾರ ಪ್ರಸ್ತುತ ಯಾವ ಕೋಣೆಯಲ್ಲಿದ್ದಾರೆ ಎಂಬುದನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುತ್ತದೆ.
    • inventory: ಆಟಗಾರರು ಸಂಗ್ರಹಿಸಿದ ವಸ್ತುಗ�� ಲಿಸ್ಟ್.
  3. ಮುಖ್ಯ ಲೂಪ್ (while True):
    • show_status(): ಪ್ರತಿ ಸುತ್ತಿನಲ್ಲೂ, ಆಟಗಾರನ ಪ್ರಸ್ತುತ ಸ್ಥಳ ಮತ್ತು ಇನ್ವೆಂಟರಿಯನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ.
    • input("> ").lower().split(): ಬಳಕೆದಾರರ ಕಮಾಂಡ್ ಅನ್ನು ಪಡೆಯುತ್ತದೆ, ಅದನ್ನು ಚಿಕ್ಕಕ್ಷರಗಳಿಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ, ಮತ್ತು ಪದಗಳ ಲಿಸ್ಟ್ ಆಗಿ ವಿಭಜಿಸುತ್ತದೆ (ಉದಾ: "go north" -> ['go', 'north']).
  4. ಕಮಾಂಡ್ ಪಾರ್ಸಿಂಗ್:
    • action = command[0]: ಕಮಾಂಡ್‌ನ ಮೊದಲ ಪದವನ್ನು (ಕ್ರಿಯೆ) ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ.
    • if action == 'go': ಚಲನೆಯನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಇದು ದಿಕ್ಕು ಮಾನ್ಯವಾಗಿದೆಯೇ ಮತ್ತು ಮುಂದಿನ ಕೋಣೆ ಲಾಕ್ ಆಗಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುತ್ತದೆ.
    • if action == 'get': ವಸ್ತುಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುವ���ದನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಕೋಣೆಯಲ್ಲಿ ಆ ವ��್ತು ಇದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ, ಇದ್ದರೆ ಅದನ್ನು ಇನ್ವೆಂಟರಿಗೆ ಸೇರಿಸುತ್ತದೆ ಮತ್ತು ಕೋಣೆಯಿಂದ ತೆಗೆದುಹಾಕುತ್ತದೆ.
  5. ಗೆಲುವಿನ ಷರತ್ತು: ಆಟಗಾರನು ಲಾಕ್ ಆಗಿಲ್ಲದ ನಿಧಿ ಕೋಣೆಯನ್ನು ತಲುಪಿದಾಗ, ಗೆಲುವಿನ ಸಂದೇಶವನ್ನು ಪ್ರದರ್ಶಿಸಿ ಆಟವನ್ನು ಕೊನೆಗೊಳಿಸಲಾಗುತ್ತದೆ.