0

私は、 Phillip JohnsonMake Your Own Python Text Adventureという本を使用しています。第12章までは、ほとんど問題がありませんでした。いくつかのエラー メッセージが表示されましたが、自分で修正することができました。今、私はエラーメッセージを受け取っています:

SyntaxError: 解析中に予期しない EOF が発生しました

どこに問題があるのか​​ わかりません。私もそれが何を意味するのか100%確信が持てません。私はプログラミングに比較的慣れておらず、Python を使い始めたばかりです。私は現在、コミュニティ カレッジでプログラミング入門コースを受講しています。とにかく、いくつかの異なるモジュールからゲーム コードを投稿し、チェックしてもらいます! 誰かが問題の場所と解決方法を教えてもらえますか? ありがとうございました!

ゲーム.py

# this program is a text based rpg

# import the player module
from player import Player
# import the world module
import world

# prompt the user for a direction
def get_player_command():
    return input("Action, (Type a letter): ")

def main():
    # display Yradellian name examples
    print("Some examples of female Yradellian names include Nelsi, Drew, Casey, Ilya, etc.")
    print("Some examples of male Yradellian names include Toreth, Daren, Attel, Mayes, etc.")

    # get the character name from the user
    yesName = False
    while yesName == False:
        charName = input("What can I call you? ")
        nameInput = input("Your name is, " + charName + "? Type Yes or No: ")
        if nameInput == "Yes":
            yesName = True
        else:
            print("Sorry...")

    # create a player object
    player = Player()

    # display the welcome message
    print()
    player.say_hello(charName)

    # display current inventory
    print()
    print("Here's your starting game Inventory:")
    player.print_inventory()

    while True:
        # display the intro text for each tile
        print()
        room = world.tile_at(player.x, player.y)
        print(room.intro_text())

        # modify the player depending on the tile type
        room.modify_player(player)

        # get the action input from the user
        print()
        print("Choose what to do...")

        action_input = get_player_command()

        # display the chosen action
        if action_input in ["n", "N"]:
            print()
            print("Go North!")
            player.move_north()
        elif action_input in ["e", "E"]:
            print()
            print("Go East!")
            player.move_east()
        elif action_input in ["s", "S"]:
            print()
            print("Go South!")
            player.move_south()
        elif action_input in ["w", "W"]:
            print()
            print("Go West!")
            player.move_west()
        elif action_input in ["i", "I"]:
            print()
            player.print_inventory()
        elif action_input in ["a", "A"]:
            player.attack()
        elif action_input in ["h", "H"]:
            player.heal()
        else:
            print("That is invalid input.")
            print()

# call the main function
main()

敵.py

# create an Enemy class
class Enemy:
    def __init__(self):
        raise NotImplementedError("Do not create raw Enemy objects.")

    def __str__(self):
        return self.name

    def is_alive(self):
        return self.hp > 0

# create two Enemies
class Wolf(Enemy):
    def __init__(self):
        self.name = "Wolf"
        self.hp = 50
        self.damage = 15

class Goblin(Enemy):
    def __init__(self):
        self.name = "Goblin"
        self.hp = 75
        self.damage = 20

アイテム.py

# make a parent class Weapon for the weapons classes
class Weapon:
    def __init__(self):
        raise NotImplementedError("Do not create raw Weapon objects.")
    def __str__(self):
        return self.name

# create classes for three different types of weapons
class Dagger(Weapon):
    def __init__(self):
        self.name = "Dagger"
        self.description = "A small bladed weapon used for stabbing the enemy."
        self.damage = 10
class DaggerSword(Weapon):
    def __init__(self):
        self.name = "Dagger Sword"
        self.description = "A bladed weapon bigger than a dagger but smaller than a sword."
        self.damage = 15
class Sword(Weapon):
    def __init__(self):
        self.name = "Sword"
        self.description = "A bladed weapon meant for striking down the enemy."
        self.damage = 20

# make a parent class Consumable for the consumables classes
class Consumable:
    def __init__(self):
        raise NotImplementedError("Do not create raw Consumable objects.")
    def __str__(self):
        return "{} (+{} HP)".format(self.name, self.healing_value)
# create classes for different types of consumables
class BreadRoll(Consumable):
    def __init__(self):
        self.name = "Bread Roll"
        self.healing_value = 20
class FancyChocolate(Consumable):
    def __init__(self):
        self.name = "Fancy Chocolate"
        self.healing_value = 25
class Potion(Consumable):
    def __init__(self):
        self.name = "Potion"
        self.healing_value = 50

player.py

# import the items module
import items
# import the world module
import world

# create a class for Player
class Player:
    # define the inventory
    def __init__(self):
        self.inventory = [items.Dagger(), "Gold(100)", BreadRoll(), Potion()]
        self.x = 1
        self.y = 2
        self.hp = 100
    # print the inventory and the best weapon
    def print_inventory(self):
        print("Inventory:")
        for item in self.inventory:
            print("* " + str(item))
        best_weapon = self.most_powerful_weapon()
        print("Your best weapon is your {}".format(best_weapon))
    # create a function to heal the player
    def heal(self):
        consumables = [item for item in self.inventory if isinstance(item.Consumable)]
        if not consumables:
            print("You don't have any items to heal you!")
            return
        for i, item in enumerate(consumables, 1):
            print("Choose an item to use to heal: ")
            print("{}. {}".format(i, item))
        valid = False
        while not valid:
            choice = input("")
            try:
                to_eat = consumables[int(choice) - 1]
                self.hp = min(100, self.hp + to_eat.healing_value)
                self.inventory.remove(to_eat)
                print("Current HP: {}".format(self.hp))
                valid = True
            except (ValueError, IndexError):
                print("Invalid choice, try again.")
    # welcome the user to the game
    def say_hello(self, name):
        print("Hello, " + name, ", welcome to the world of Yradel.")
    # create a function to determine the best weapon
    def most_powerful_weapon(self):
        max_damage = 0
        best_weapon = None
        for item in self.inventory:
            try:
                if item.damage > max_damage:
                    best_weapon = item
                    max_damage = item.damage
            except AttributeError:
                pass
        return best_weapon
    # create functions to let the player move
    def move(self, dx, dy):
        self.x += dx
        self.y += dy
    def move_north(self):
        self.move(dx = 0, dy = -1)
    def move_east(self):
        self.move(dx = 1, dy = 0)
    def move_south(self):
        self.move(dx = 0, dy = 1)
    def move_west(self):
        self.move(dx = -1, dy = 0)
    # create a function to attack the enemy
    def attack(self):
        best_weapon = self.most_powerful_weapon()
        room = world.tile_at(self.x, self.y)
        enemy = room.enemy
        print("You use {} against the {}!".format(best_weapon.name, enemy.name))
        enemy.hp -= best_weapon.damage
        if not enemy.is_alive():
            print("You killed {}!".format(enemy.name))
        else:
            print("{} HP is {}.".format(enemy.name, enemy.hp)

world.py

# import the enemies module
import enemies
# import the random module
import random

# create a parent class for the map tiles
class MapTile:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def intro_text(self):
        raise NotImplementedError("Create a subclass instead!")
    def modify_player(self, player):
        pass

# create the tile subclasses
class StartTile(MapTile):
    def intro_text(self):
        return """You find yourself in a forest, sunlight trickling through the leaves overhead. Your feet crunch over the underbrush. You can see four paths through the trees.\n"""

class BoringTile(MapTile):
    def intro_text(self):
        return """The trees all look the same here...\n"""

class CityTile(MapTile):
    def intro_text(self):
        return """You made it out of the forest into a small town known as Burenburg. The people greet you warmly and you are filled with a sense of accomplishment.\n"""

class EnemyTile(MapTile):
    # have enemies randomly appear
    def __init__(self, x, y):
        r = random.random()
        if r < 0.50:
            self.enemy = enemies.Wolf()
            self.alive_text = "A lone Wolf approaches you baring its fangs."
            self.dead_text = "The Wolf keels over, dead before you."
        else:
            self.enemy = enemies.Goblin()
            self.alive_text = "A Goblin tries to steal your gold, you must defend yourself against his blade."
            self.dead_text = "The Goblin sticks its tongue out at you as it falls over dead."
        super().__init__(x, y)
    # display their alive/dead message
    def intro_text(self):
        text = self.alive_text if self.enemy.is_alive() else self.dead_text
        return text
    # have enemies attack the player
    def modify_player(self, player):
        if self.enemy.is_alive():
            player.hp = player.hp - self.enemy.damage
            print("Enemy does {} damage. You have {} HP remaining.".format(self.enemy.damage, player.hp))
# create the basic world map
world_map = [
    [None, CityTile(1,0), None],
    [None, EnemyTile(1,1), None],
    [BoringTile(0,2), StartTile(1,2), BoringTile(2,2)],
    [None, EnemyTile(1,3), None]
    ]

# create a function that locates the tile at a specific coordinate
def tile_at(x, y):
    if x < 0 or y < 0:
        return None
    try:
        return world_map[y][x]
    except IndexError:
        return None
4

1 に答える 1

0

player.py の最後に ) がないようです

else:
print("{} HP is {}.".format(enemy.name, enemy.hp)) <-- Missing
于 2020-04-15T05:23:08.400 に答える