Question

I'm creating a text adventure in Python, and during character creation, once all entries are complete the game is supposed to write the entry to state() and save the game. All it's doing is continuing the character creation loop, after saying what is visible in the game_loop() function.

Code:

# -*- coding: iso-8859-1 -*-
# Codename Spacefaerer
import time
import random
import sys
import os
import jsonpickle

savegame_file = 'savegame.json'
game_state = dict()

# Standard Settings
settings_display = []
on = 314159265
off = 562951413
mainmenu = on

# Functions
def game_instructions(args):
    print "In Spacefaerer there is an amalgamation of commands to execute either at your command station or while on land.\n"
    print "Move: A command to move from block to block along a landscape. You will be told what directions you can move.\n"
    print "This applies to North, South, East, West, North-East, North-West, South-East, and South-West.\n"
    print "Use: A command to use an object either within your block, or within your inventory.\n"
    print "Attack: A command to attack an enemy or friendly AI.\n"
    print "Look: A command to look at an object or direction along a landscape. The same directions used in Move are applicable.\n"
    print "Combine: A command to combine objects that could potentially go together. This is only possible at a workbench.\n"
    print "Take: A command to take an object within your block.\n"
    print "\n=== Layout of Commands ==="
    print "Move: move n,s,e,w,ne,nw,se,sw\n"
    print "Use: use item, use item on object\n"
    print "Attack: attack object\n"
    print "Look: look n,s,e,w,ne,nw,se,sw\n"
    print "Combine: combine object object\n"
    print "Take: take object\n"

def print_slowly(text):
    for c in text:
        print c,
        sys.stdout.flush()
        time.sleep(0.5)

def credits_slow(text):
    for c in text:
        print c,
        time.sleep(0.1)

def roll_credits(args):
    credits_slow("CODENAME: SPACEFAE†RER")
    time.sleep(1)
    credits_slow("\nA Text Adventure")
    time.sleep(1)
    print "\nDesigned and Developed by Angus Gardner"
    time.sleep(1)
    print "\nPowered by Python 2.7.3"

def save_game():
    """ Save the current game state to a predefined location """
    global game_state
    with open(savegame_file, 'w') as savegame:
        savegame.write(jsonpickle.encode(game_state))

def load_game():
    """ Load a saved game state out of a predefined location """
    with open(savegame_file, 'r') as savegame:
        state = jsonpickle.decode(savegame.read())
    return state

def pickup_item(text):
    pinventory.append(text)

def drop_item(text):
    pinventory.remove(text)

def die(text):
    print "Sadly, your adventures have come to an end, my fellow Spacefaerer."
    print "Your death was caused by", text
    print "Returning you to the main menu."
    game = off
    mainmenu = on

def char_create():
    ccmenu = True
    while ccmenu == True:
        cc_setspecies = str(raw_input("What species are you?\nIf you need help, type help <species>\nHuman, Eunisian, or Aur\n>"))
        if cc_setspecies == 'help Human':
            print """
    Humans are primates of the family Homidae, and only current extant species of the genus Homo, which travels bipedally.
    Humans originate from Earth, a planet in the Orion Arm of the Milky Way Galaxy.

    They have a very well developed brain, and are uniquely adept on Earth at using systems of symbolic communication such as
    language and art. Humans create complex social structures composed of many cooperating groups such as families and kinships.\n"""
            continue

        elif cc_setspecies == 'help Eunisian':
            print """
    Eunisians are the first common extant species of the genus Ax'thern. They travel tripedally.
    Eunisians originate from M'thronop, a planet in the supercluster of the Andromeda galaxy.

    They have adapted from their very high pressure atmosphere a larger anatomical structure, with a well developed and protected
    brain within their heads. They have an open ended social structure, and reproduce often with no strong emotional attachments
    between one another.

    Eunisians communicate among one another telepathically, but have learned in the past 0.15Ma years to use language. They best
    work with logic and architectural design, producing massive and strong structures built to last centuries.\n"""
            continue

        elif cc_setspecies == 'help Aur':
            print """
    The Aur is a species split from the Eunisians, evolving and splitting off within the past ten thousand years. They travel bipedally.

    They have developed an environment that is closer to Earth's atmosphere, allowing their bodies to develop much longer and thinner.

    Their overall ability is close to that of a Eunisian.\n"""
            continue
        else:
            pass
        cc_setname = str(raw_input("What is your name?\n>"))
        if cc_setspecies == 'Human':
            player = Human(cc_setname, 'Human', 100, 3, 3, 3, 'Hands', 'Captains Uniform', 'none', [], 0, 1, 120)
        elif cc_setspecies == 'Eunisian':
            player = Eunisian(cc_setname, 'Eunisian', 100, 3, 3, 3, 'Hands', 'Captains Uniform', 'none', [], 0, 1, 120)
        elif cc_setspecies == 'Aur':
            player = Aur(cc_setname, 'Aur', 100, 3, 3, 3, 'Hands', 'Captains Uniform', 'none', [], 0, 1, 120)
        else:
            print "Try again."
            continue

        state = dict()
        state['players'] = [player]
        return state
        global game_state

        game_cont = str(raw_input("Continue? (Y/N)\n>"))
        if game_cont == 'Y':
            save_game()
            main()
        elif game_cont == 'N':
            continue
        else:
            print "Try again."
            continue



def new_game():
    """ Starts a new game. """
    print "A gust of wind blows by the large, buried structure."
    time.sleep(1)
    print "Several panels of steel peel off, slamming into the ground and waking you up."
    time.sleep(1.5)
    print "You sit, lean forwards and notice a mirror across from you."
    time.sleep(1)
    print "What do you look like?\n"
    char_create()

def game_loop():
    """ Main game. """
    global game_state
    print "We made it here!"
    ccmenu = False


def main():
    """ Check if a savegame exists. If it doesn't,
    initialize the game with standard settings."""
    global game_state
    if not os.path.isfile(savegame_file):
        game_state = new_game()
    else:
        game_state = load_game()
    game_loop()

# Locations



# Space Ships

# Weapons

# Armour / Clothing

# Items

# Gadgets

# Planets

# Galaxies

# Stars

# Species

class Human(object):
    def __init__(self, name, species, health, strength, intelligence, endurance, weapon, armour, gadget, inventory, experience, level, credits):
        self.name = name
        self.species = "Human"
        self.health = health
        self.strength = strength
        self.intelligence = intelligence
        self.endurance = endurance
        self.weapon = weapon
        self.armour = armour
        self.gadget = gadget
        self.inventory = inventory
        self.experience = experience
        self.level = level
        self.credits = credits

class Eunisian(object):
    def __init__(self, name, species, health, strength, intelligence, endurance, weapon, armour, gadget, inventory, experience, level, credits):
        self.name = name
        self.species = "Eunisian"
        self.health = health
        self.strength = strength
        self.intelligence = intelligence
        self.endurance = endurance
        self.weapon = weapon
        self.armour = armour
        self.gadget = gadget
        self.inventory = inventory
        self.experience = experience
        self.level = level
        self.credits = credits

class Aur(object):
    def __init__(self, name, species, health, strength, intelligence, endurance, weapon, armour, gadget, inventory, experience, level, credits):
        self.name = name
        self.species = "Aur"
        self.health = health
        self.strength = strength
        self.intelligence = intelligence
        self.endurance = endurance
        self.weapon = weapon
        self.armour = armour
        self.gadget = gadget
        self.inventory = inventory
        self.experience = experience
        self.level = level
        self.credits = credits

class Enemy(object):
    def __init__(self, name, species, health, strength, intelligence, endurance, weapon, armour, gadget, inventory, level, credits):
        self.name = name
        self.species = species
        self.health = health
        self.strength = strength
        self.intelligence = intelligence
        self.endurance = endurance
        self.weapon = weapon
        self.armour = armour
        self.gadget = gadget
        self.inventory = inventory
        self.level = level
        self.credits = credits

class Friendly(object):
    def __init__(self, name, species, health, strength, intelligence, endurance, weapon, armour, gadget, inventory, level, credits):
        self.name = name
        self.species = species
        self.health = health
        self.strength = strength
        self.intelligence = intelligence
        self.endurance = endurance
        self.weapon = weapon
        self.armour = armour
        self.gadget = gadget
        self.inventory = inventory
        self.level = level
        self.credits = credits

# Game

print "CODENAME: SPACEFAERER"
print "(C) Angus Gardner 2014, 2015, 2016 (CC-BY-NA)"
while mainmenu == on:
    play_opt = str(raw_input("\nNew Game\nLoad Game\nHow to Play\nCredits\nLicense\nExit\n>"))
    if play_opt == 'New Game':
        game = on
        mainmenu = off
    elif play_opt == 'Load Game':
        """ A command executes to load the savegame.json """
        game = on
        game_state = load_game()
        mainmenu = off
    elif play_opt == 'How to Play':
        game_instructions(1)
    elif play_opt == 'Credits':
        roll_credits(1)
    elif play_opt == 'License':
        print "\nCODENAME: SPACEFAE†RER is licensed under the GNU General Public License v3.0"
        print "\nCopyrighted under Creative Commons (CC-BY-NA)\n"
        continue
    elif play_opt == 'Exit':
        print "\nThanks for playing!"
        time.sleep(0.5)
        sys.exit(1)
    else:
        print "\nTry again."
        continue

while game == on:
    if __name__ == '__main__':
        main()

Any help would be greatly appreciated.

Was it helpful?

Solution

I believe you must add global ccmenuto both def game_loop() and def char_create(), or make it otherwise globally accessible.

Also, since you do a return state in char_create() before it's finished the "Continue?" prompt and the code below it will not be run, including the call to save_game().

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top