我正在用python制作文字冒险游戏。我具有大多数基本项目设置,例如链接位置和保存功能。 (我在设置保存功能方面有些困难,因此,如果有更好的方法,请告诉我。)
现在我要制作物品。具体来说,我希望该物品位于某个位置(也许以其他位置彼此链接的相同方式链接到它),并且当玩家与他们互动时(例如捡起它),他们拥有该物品的位置就会更新。我希望用户必须键入命令并认识到他们需要该物品,并且一旦进入某个区域就不必被动地拾取该物品。 (这家商店也无法正常运作,如果您能给我一些指导,告诉我如何最好地做+维护玩家的库存,那将是很好的选择)
我知道这将包括很多东西,例如一个新类,以及一些专门规定哪些命令将起作用的新函数。我已对此进行了拍摄,但很快就碰到了墙。如果你们中的任何一个可以帮助我,那将很棒。 (另外,有一种更好/更快的方法来做某事,指出来,我将考虑添加它)。
代码如下:
import pickle
import time
# Constants/Valid Commands
# This is a mess, ignore it unless it causes a problem.
invalidChars = '\"\'()*&^%$#@!~`-=_+{}[]\|:;<,>.?/'
validLogin = 'log in', 'log', 'saved', 'in', 'load', 'logging in', 'load game', 'load'
validNewGame = 'new', 'new game', 'new save'
directions = ['north', 'south', 'east', 'west']
possibleGenders = ['boy', 'girl']
examineCommands = ['examine yourself', 'look at yourself', 'my stats', 'my statistics', 'stats', 'statistics', 'examine statistics', 'examine stats']
invalidExamine = ['examine', 'look at' ]
stop = ['stop', 'exit', 'cancel']
# FUNCTIONS
def start():
print("Welcome to XXXXX, created by Ironflame007") #XXXX is the name placeholder. I haven't decided what it will be yet
while True:
command = input("Are you making a new game, or logging in?\n> ")
if command in validNewGame:
clear()
newGame()
break
elif command in validLogin:
clear()
login()
break
else:
clear()
print("Thats not a valid command. If you wish to exit, type exit\n")
def newGame():
while True:
username = input('Type in your username. If you wish to exit, type exit\n> ')
if username[0] in invalidChars:
clear()
print('Your username can\'t start with a space or any other type of misc. character. Just letters please')
elif username in stop:
clear()
start()
else:
break
password = input('Type in your password\n> ')
playerName = input("What is your character's name?\n> ")
while True:
playerGender = input("Is your character a boy or a girl?\n> ".lower())
if playerGender not in possibleGenders:
print("That's not a valid gender...")
else:
clear()
break
inventory = []
health = 100
player = Player(playerName, playerGender, 0, 1, inventory, health, password)
file = username + '.pickle'
pickle_out = open(file, 'wb')
pickle.dump(player.player_stats, pickle_out)
pickle_out.close()
print("You wake up. You get off of the ground... dirt. You didn't fall asleep on dirt. You look around an observe your surroundings\n(If you need help, use the command help)") # hasn't been made yet
game('default', username, player.player_stats)
def examine(string, dictionary):
if string in examineCommands:
print(dictionary)
elif string in invalidExamine:
print('There is nothing to {0}'.format(string))
else:
print('Thats an invalid command')
def clear():
print('\n' * 50)
def game(startLoc, username, dictionary):
if startLoc == 'default':
currentLoc = locations['woods']
else:
currentLoc = dictionary['location']
while True:
print(currentLoc.description)
for linkDirection,linkedLocation in currentLoc.linkedLocations.items():
print(linkDirection + ': ' + locations[linkedLocation].name)
command = input("> ").lower()
if command in directions:
if command not in currentLoc.linkedLocations:
clear()
print("You cannot go this way")
else:
newLocID = currentLoc.linkedLocations[command]
currentLoc = locations[newLocID]
clear()
else:
clear()
if command in examineCommands:
examine(command, dictionary)
elif command in invalidExamine:
examine(command, dictionary)
elif command == 'log out':
logout(username, dictionary, currentLoc)
break
else:
print('That\'s an invalid command.')
print("Try one of these directions: {0}\n If you are trying to log out, use the command log out.".format(directions))
def login():
while True:
while True:
print('If you wish to exit, type exit or cancel')
username = input("What is your username\n> ")
if username in stop:
clear()
start()
break
else:
break
inputPass = input("What is your password\n> ")
try:
filename = username + '.pickle'
pickle_in = open(filename, 'rb')
loaded_stats = pickle.load(pickle_in, )
if loaded_stats['password'] == inputPass:
clear()
print("Your game was succesfully loaded")
game('location', username, loaded_stats)
break
else:
clear()
print("That's an invalid username or password.")
except:
clear()
print("Thats an invalid username or password.")
def logout(username, dictionary, currentLoc):
print("Please don't close the window, the programming is saving.")
dictionary.update({'location': currentLoc})
file = username + '.pickle'
pickle_out = open(file, 'wb')
pickle.dump(dictionary, pickle_out)
pickle_out.close()
time.sleep(3)
print("Your game has been saved. You may close the window now")
class Location:
def __init__(self, name, description):
self.name = name
self.description = description
self.linkedLocations = {} # stores linked locations in this dictionary
def addLink(self, direction, destination):
# adds link to the linked locations dictionary (assuming the direction and destination are valid)
if direction not in directions:
raise ValueError("Invalid Direction")
elif destination not in locations:
raise ValueError("Invalid Destination")
else:
self.linkedLocations[direction] = destination
class Player:
def __init__(self, name, gender, gold, lvl, inventory, health, password):
self.name = name
self.gender = gender
self.gold = gold
self.lvl = lvl
self.inventory = inventory
self.health = health
self.player_stats = {'name': name, 'gender': gender, 'gold': gold, 'lvl': lvl, 'inventory': inventory, 'health': health, 'password': password, 'location': 'default'}
# ACTUALLY WHERE THE PROGRAM STARTS
locations = {'woods': Location("The Woods", "You are surrounded by trees. You realize you are in the woods."),
'lake': Location("The Lake", "You go north and are at the lake. It is very watery."),
'town': Location("The Town", "You go north, and find yourself in town."),
'shop': Location("The Shop", "You go east, and walk into the shop. The shop owner asks what you want")
}
locations['woods'].addLink('north', 'lake')
locations['lake'].addLink('south', 'woods')
locations['lake'].addLink('north', 'town')
locations['town'].addLink('south', 'lake')
locations['town'].addLink('east', 'shop')
locations['shop'].addLink('west', 'town')
start()
答案 0 :(得分:0)
关于拾起物品,您可以在播放器类中有一个方法,将物品追加到播放器的清单中。如果希望项目位于特定位置,则可以在可以通过检查功能访问的位置提供项目列表。
因此,您可以在Class Location:
中添加
上课地点:
def __init__(self, name, description):
self.name = name
self.description = description
self.linkedLocations = {} # stores linked locations in this dictionary
self.items = items # List of items on location
您可以在Class Player:
中添加
Class Player:
def PickUp(self, Location, item):
Location.items.remove(item)
self.inventory.append(item)
您不必像实施位置那样实施项目,因为项目不会有任何邻居。
我希望用户必须键入命令并认识到他们需要该物品,并且一旦进入某个区域就不要被动地拾取该物品。
我想这应该在您的检查功能中。除了在某个位置调用的检查功能以外,还应该产生该特定位置的项目列表。也许通过制作较小版本的游戏来了解冒险游戏(您的最爱之一)的工作方式可能会帮助您了解冒险游戏之间的抽象交互方式。我想添加一个特定的示例可以引发有关交互的讨论。祝您游戏顺利!
欢呼