Помощь для приключенческой игры Python [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Помощь для приключенческой игры Python [закрыто]

Сообщение Гость »


Для своего университетского проекта я создаю обучающую игру на Python. Моя проблема в том, что я не могу запустить игру с помощью функции start.game(), но она запускается в середине игры. Игрок помещается в стартовую позицию 1.1, и я указал на карте, что в позиции 1.1 нельзя размещать препятствия. Затем я указал, что когда игрок находится на версии 1.1, вызывается функция start.game(). Я написал функцию test.game(), которая должна сначала вызывать start.game(). Однако, что бы я ни делал, игра начинается в середине боя с монстром. Кто-нибудь знает, где ошибка?
Чатгпт мне уже помог, но он тоже не может найти ошибку.

Код: Выделить всё

import sys
import argparse
import random
from tkinter.tix import Tree

try:
from msvcrt import getch  # für Windows
except ImportError:
def getch():
import sys
import tty
import termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(fd)
return sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)

def main(pruefungsleistung_wert, self=None, player=None):

# Erstelle eine Karte
game_map = {'player_map': [['_' for _ in range(25)] for _ in range(25)],
'hidden_map': [['_' for _ in range(25)] for _ in range(25)],
'position': {}
}
map_size = len(game_map['hidden_map'])

# Setze die festen Positionen für die Waldhütte, das Stadttor, das Schloss und das Orakel auf beiden Karten
festen_positionen = {'W': (22, 4), 'T': (5, 12), 'S': (15, 20), 'O': (0, 0)}

position: tuple[int, int]
for objekt, position in festen_positionen.items():
game_map['player_map'][position[1]][position[0]] = objekt
game_map['hidden_map'][position[1]][position[0]] = objekt
game_map['position'][position] = objekt

# Platziere Büsche (b), Bäume (t) und Monster (m) großzügig auf der Karte
for _ in range(10):
x, y = random.randint(0, 24), random.randint(0, 24)
if game_map['hidden_map'][y][x] == '_' and (x, y) != (1, 1):
game_map['hidden_map'][y][x] = 'b'

for _ in range(7):
x, y = random.randint(0, 24), random.randint(0, 24)
if game_map['hidden_map'][y][x] == '_' and (x, y) != (1, 1):
game_map['hidden_map'][y][x] = 't'

for _ in range(5):
x, y = random.randint(0, 24), random.randint(0, 24)
if game_map['hidden_map'][y][x] == '_' and (x, y) != (1, 1):
game_map['hidden_map'][y][x] = 'm'

class GameObject:
def __init__(self, name, position=None):
self.name = name
self.position = None if position is None else Position(*position)

def get_name(self):
return self.name

def get_location(self):
return self.position

class Player(GameObject):
def __init__(self, name, health, max_inventory_size, healing_potions):
super().__init__(name)
self.health = health
self.inventory = {}
self.healing_potions = healing_potions
self.position = (1, 1)  # Startposition auf (1, 1) setzen
self.name = name
self.max_inventory_size = max_inventory_size
self.healing_points = self.healing_potions
self.inventory = {'Sword': 1, 'Axe': 1, 'Healing Potion': 0, 'Key':  0}
self.map = game_map

class Combat:
def __init__(self, player):
self.bush_combat = None
self.tree_combat = None
self.monster_combat = None
self.player = player
self.inventory = None
self.game_map = game_map

def update_healing_points(self, points):
self.player.increase_healing_points(points)

def defeat_enemy(player, enemy, Bush, Tree, Monster):
print(f"Du hast einen {enemy.name} besiegt!")
if isinstance(enemy, Bush):
player.inventory.add_item('Healing Potion', 5)
print("Du erhältst 5 Heiltränke als Belohnung.")
elif isinstance(enemy, Tree):
player.inventory.add_item('Healing Potion', 7)
print("Du erhältst 7 Heiltränke als Belohnung.")
elif isinstance(enemy, Monster):
player.inventory.add_item('Healing Potion', 10)
print("Du erhältst 10 Heiltränke als Belohnung.")

class Bush(GameObject):
def __init__(self, name, question, choices, correct_choice, player):
super().__init__(name)
self.question = question
self.choices = choices
self.correct_choice = correct_choice
self.player = player
self.inventory = None
self.game_map = game_map

def initiate_bush_combat(self, player, bush=None):
print(f"Ein {self.name} ist im Weg.")
player.inventory.show_inventory()

print("Wähle:")
print("1) Schwert")
print("2) Axt")
print("3) Heiltrank")
print("4) Schlüssel")
selected_item = input("Gib die Nummer des Items ein, das du wählen möchtest: ")

if selected_item == '1':
print(f"Das Schwert kann nicht gegen {self.name} eingesetzt werden.")
elif selected_item == '2':
print(f"Du setzt die {self.name} gegen den Busch ein.")
bush_questions = [
("Frage 1?", ["Antwort 1", "Antwort 2", "Antwort 3", "Antwort 4"], "Antwort 2"),
("Frage 2?", ["Antwort 1", "Antwort 2", "Antwort 3", "Antwort 4"], "Antwort 3"),
# ...  Weitere Fragen hinzufügen
]

question, choices, correct_choice = random.choice(bush_questions)
print(question)
print("Wähle die richtige Antwort:")
for i, choice in enumerate(choices, start=1):
print(f"{i}) {choice}")

player_answer = input("Gib die Nummer der Antwort ein: ")

if player_answer == str(choices.index(correct_choice) + 1):
print(f"Richtig! Du hast den Busch besiegt.")
self.defeat_enemy(player, self, bush, None, None)
player.update_healing_points(5)  # Aufruf der defeat_enemy Funktion
else:
print("Falsch! Der Busch bleibt stehen.")
elif selected_item == '3':
print(f"Der Heiltrank kann nicht gegen {self.name} eingesetzt werden.")
elif selected_item == '4':
print(f"Der Schlüssel kann nicht gegen {self.name} eingesetzt werden.")

def defeat_enemy(self, player, self1, Bush, param, param1):
pass

class Tree(GameObject):
def __init__(self, name, question, correct_answer, player, ):
super().__init__(name)
self.question = question
self.correct_answer = correct_answer
self.player = player
self.inventory = None
self.game_map = game_map

def initiate_tree_combat(self, player, tree, defeat_enemy=None, Bush=None, Monster=None):
def similar(a, b):
# Funktion, um die Ähnlichkeit zwischen zwei Strings zu berechnen
from difflib import SequenceMatcher
return SequenceMatcher(None, a.lower(), b.lower()).ratio()

print(f"Ein {self.name} ist im Weg!")
player.inventory.show_inventory()

print("Wähle:")
print("1) Schwert")
print("2) Axt")
print("3) Heiltrank")
print("4) Schlüssel")
selected_item = input("Gib die Nummer des Items ein, das du wählen möchtest: ")

if selected_item == '1':
print(f"Das Schwert kann nicht gegen {self.name} eingesetzt werden.")
elif selected_item == '3':
print(f"Die healing_potion kann nicht gegen {self.name} eingesetzt werden.")
elif selected_item == '4':
print(f"Der Schlüssel kann nicht gegen {self.name} eingesetzt werden.")
elif selected_item == '2':
print(f"Du setzt die {self.name} gegen den Baum ein.")

tree_questions = [
("Frage 1?", "Antwort 1"),
("Frage 2?", "Antwort 2"),
# ...  Weitere Fragen hinzufügen
]

# erstelle 7 Bäume und ordnest jedem eine Frage zu
trees = []
for i in range(7):
question, correct_answer = tree_questions[i % len(
tree_questions)]  # Modulo, um sicherzustellen, dass die Fragen zyklisch wiederholt werden
tree = Tree(name=f"Tree {i + 1}", question=question, correct_answer=correct_answer)
trees.append(tree)

# Annahme: Du führst den Kampf für jeden Baum durch
for tree in trees:
player_answer = input(f"{tree.question}: ").capitalize()
if similar(player_answer, tree.correct_answer):
print(f"Richtig! Du hast den {tree.name} besiegt.")
# Hier wird die defeat_enemy Funktion aufgerufen, wenn der Baum besiegt wurde
defeat_enemy(player, tree, Bush, Tree, Monster)
player.update_healing_points(7)
else:
print(f"Falsch! Der {tree.name} bleibt stehen.")

class Monster(GameObject):
def __init__(self, name, damage, questions_and_answers):
super().__init__(name)
self.damage = damage
self.questions_and_answers = questions_and_answers

def initiate_monster_combat(self, player):
print(f"Ein {self.name} ist im Weg!")
print("Wähle:")
print("1) Sword")
print("2) Axe")
print("3) Healing Potion")
print("4) Key")
selected_item = input(
"Gib die Nummer des Items ein, das du wählen möchtest ").capitalize()

if selected_item == '2':
print(f"Die Axt kann nicht gegen {self.name} eingesetzt werden.")
elif selected_item == '3':
print(f"Die healing_potion kann nicht gegen {self.name} eingesetzt werden.")
elif selected_item == '4':
print(f"Der Schlüssel kann nicht gegen {self.name} eingesetzt werden.")
elif selected_item == '1':
print(f"Du setzt die {self.name} gegen den Monster ein")

# Spieler beantwortet die Fragen
for question, correct_answer in self.questions_and_answers:
player_answer = input(f"{question}: ").strip()
if player_answer.lower() == correct_answer.lower():
print(f"Richtig! Du hast den {self.name} besiegt.")
player.inventory.add_item('Healing Potion', 10)
player.update_healing_points(10)
else:
print(f"Falsch! Du verlierst 10 Heilungspunkte.")
player.decrease_healing_points(10)
if player.healing_points  0:
current_y -= 1
elif direction == 'a' and current_x > 0:
current_x -= 1
elif direction == 's' and current_y < self.map_size - 1:
current_y += 1
elif direction == 'd' and current_x < self.map_size - 1:
current_x += 1

return Position(current_x, current_y)

@staticmethod
def end_game():
exit()

def is_game_over(self):
user_input = getch().lower()
if user_input == 'q':
print("Das Spiel wird beendet.")
self.end_game()
return True

player_position = self.player.get_position()
position_name = self.game_map['locations'][player_position[1]][player_position[0]]['name']

if position_name == 'Schloss':
print("Herzlichen Glückwunsch! Du hast das Schloss erreicht und das Spiel gewonnen.")
self.end_game()
return True

return False

def update_hidden_map(self):
player_position = self.player.position
self.game_map['hidden_map'][player_position.y][player_position.x] = 'P'

def check_player_collision(self, new_position):
x, y = new_position.x, new_position.y
print(f"Debug: Checking collision at position ({x}, {y})")

if not (0 

Источник: [url]https://stackoverflow.com/questions/78155241/hilfe-f%c3%bcr-python-adventure-game[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»