Game won't Save

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • pythonnoob83
    New Member
    • Aug 2010
    • 2

    Game won't Save

    I got my game to work but I when I run it and answer the first question it says Could not save.
    Why is my game not saving.
    It does create the save game file but it is always empty.
    Please Help!!!



    Code:
    # questor.py 
    
    # define some constants for future use
    
    kQuestion = 'question'
    kGuess = 'guess'
    
    # define a function for asking yes/no questions
    def yesno(prompt):
        ans = raw_input(prompt)
        return (ans[0]=='y' or ans[0]=='Y')
    
    # define a node in the question tree (either question or guess)
    class Qnode:
    
    # initialization method
        def __init__(self,guess):
            self.nodetype = kGuess
            self.desc = guess
    
    # get the question to ask 
        def query(self):
            if (self.nodetype == kQuestion):
                return self.desc + " "
            elif (self.nodetype == kGuess):
                return "Is it a " + self.desc + "? "
            else:
                return "Error: invalid node type!"
    
    # return new node, given a boolean response
        def nextnode(self,answer):
            return self.nodes[answer]
    
    # turn a guess node into a question node and add new item
    # give a question, the new item, and the answer for that item
        def makeQuest( self, question, newitem, newanswer ):
    
    # create new nodes for the new answer and old answer
            newAnsNode = Qnode(newitem)
            oldAnsNode = Qnode(self.desc)
    
    # turn this node into a question node
            self.nodetype = kQuestion
            self.desc = question
    
    # assign the yes and no nodes appropriately
            self.nodes = {newanswer:newAnsNode, not newanswer:oldAnsNode}
    
    
    def traverse(fromNode):
    # ask the question
        yes = yesno( fromNode.query() )
    
    # if this is a guess node, then did we get it right?
        if (fromNode.nodetype == kGuess):
            if (yes):
                print "I'm a genius!!!"
                return
    # if we didn't get it right, return the node
            return fromNode
    
    # if it's a question node, then ask another question
        return traverse( fromNode.nextnode(yes) )
    
    def run():
    # start with a single guess node
        try:
            f = file('questor.dat', 'r')
            topNode = pickle.load(f)
            f.close()
        except:
            topNode = Qnode('python')
    
        done = 0
        while not done:
             try:
                f = file('questor.dat', 'w')
                pickle.dump(topNode, f)
                f.close()
             except:
                print "Could not save!"
    # ask questions till we get to the end
             result = traverse( topNode )
    
    # if result is a node, we need to add a question
             if (result):
                item = raw_input("OK, what were you thinking of? ")
                print "Enter a question that distinguishes a",
                print item, "from a", result.desc + ":"
                q = raw_input()
                ans = yesno("What is the answer for " + item + "? ")
                result.makeQuest( q, item, ans )
                print "Got it."
    
    # repeat until done
                print
                done = not yesno("Do another? ")
                #print
    
    # immediate-mode commands, for drag-and-drop or execfile() execution
    if __name__ == '__main__':
        run()
        print
        raw_input("press Return>")
    else:
        print "Module questor imported."
        print "To run, type: questor.run()"
        print "To reload after changes to the source, type: reload(questor)"
    
    # end of questor.py
  • dwblas
    Recognized Expert Contributor
    • May 2008
    • 626

    #2
    You can only pickle a class instance. Start herefor a class tutorial.

    Comment

    • sheldor
      New Member
      • Sep 2011
      • 1

      #3
      Wrong

      Originally posted by dwblas
      You can only pickle a class instance. Start herefor a class tutorial.


      The pickle module implements a fundamental, but powerful algorithm for serializing and de-serializing a Python object structure.
      Source code: Lib/pickle.py The pickle module implements binary protocols for serializing and de-serializing a Python object structure. “Pickling” is the process whereby a Python object hierarchy is...




      also I ran your code you need to import pickle or cpickle and it will work

      Comment

      Working...