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