Le Tuesday 24 June 2008 17:37:00 nathan virgil, vous avez écrit : > I'm very new to Python, and (to a slightly lesser extent) programming in > general. I'd like to get some experience by practicing > simple-yet-functional programs, with a bit of an emphasis on games. The > first game I'd like to attempt would be a simple, non-linear story, similar > to those > choose-your-adventure books. I don't want to start with anything too > complicated, like having mapped-out directions, or interactive objects, > although I do eventually want to get into stuff like that. > > > Python seems to me like it would be a good language for this sort of stuff. > I figure I just need to use a lot of print, if/elif/else, raw_input(), and > a ton and a half of variables. My problem at the moment is that I don't > know how to get from one section of the story to the next. I vaguely > remember reading about some language using a "goto" command for something > like this, but I'm not sure how that would be handled in Python. > > A rough idea of what I'm trying to do (in a presumably hypothetical > language) would be something like this: > > 0100 print "Ahead of you, you see a chasm. > 0200 jump = raw_input("Do you wish to try jumping over it? Y/N") > 0300 if jump = Y: > 0400 goto 1700 > 0500 if jump = N: > 0600 goto 2100
hmm, back to the 80's :) Hard-coding all your story would be a very bad method and a nightmare to maintain. Ideally, such a game would be written in two parts: an 'engine' which contains all the logic, and a set of datas, containing the story itself in some special form understood by the engine. One of the multiple advantages of this approach is that you will be able to easily write new stories by reusing the engine with different datas (this is what we call a 'mod' in modern games) > Does this make any sense? Is there some way I could do this in Python? Any > and all help is definitely appreciated! Python is a good choice to learn programing. Below is a simple example. It might look complicated to a beginner, but if you take the time to read the python tutorial you should be able to understand it. Of course feel free to ask for more help about it. # ------------------------------------------------------------------ # --- GAME ENGINE --- # A global map of the nodes NODES = {} # Print one node's text and ask the user for a choice. # Return the next node or None if the game is over. # def process_node (node) : tag = node[0] text = node[1] options = node[2] # print the title print print tag print '-' * len(tag) print # print the node's text print text print # if there are no options, the game is over if not options : print 'GAME OVER' return None # print the various options index = 1 for opt in options : opt_text = opt[0] opt_tag = opt[1] print 'If you want to', opt_text, 'then press', index index = index + 1 # read the user's choice print choice = int(raw_input("Your choice: ")) opt = options[choice-1] # -1 because an array starts at 0 return NODES[opt[1]] # Start the story. # def run () : # global initialisation for node in NODES_LIST : tag = node[0] NODES[tag] = node # find the starting node node = NODES["start"] # let's play now while node : node = process_node(node) print "See you for a new exciting adventure!" # --- GAME DATAS --- # All your story goes here. A 'node' is a paragraph of the story and is made # of three things: # # * a 'tag' identifying the node and used to jump from one to another # (all tags must be unique) # # * the text of the paragraph # # * a list of user choices, each option being itself a list a two items: # - a text to display # - the name (tag) of the destination node # NODES_LIST =[ [ "start", "You're in front of a door.", [["open the door", "open_door"], ["go back", "go_back"]] ], [ "open_door", "Cool, you found the Holy Graal - YOU WON!", [] ], [ "go_back", "A troll is in the way", [["fight it", "fight_troll"], ["run away", "start"]] ], [ "fight_troll", "Sorry, it's stronger than you and you die - YOU LOST!", [] ] ] # start the game run() # ------------------------------------------------------------------ -- Cédric Lucantis _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor