view gamelib/tests/repl_game.py @ 224:e4f9513c9dd0

Include mission name in the results
author Neil Muller <drnlmuller@gmail.com>
date Sat, 12 May 2012 22:33:05 +0200
parents a40a76012bd7
children
line wrap: on
line source

from gamelib.gamestate import Game
from gamelib.constants import SUCCESS, FAILURE, NEW_SCIENCE, NEW_SCHEMATIC


class ReplGame(object):
    def __init__(self, init_data=None):
        self.game = Game(init_data=init_data)
        self._begin_turn()

    def _begin_turn(self):
        self.game.start_turn()
        self.display_state()

    def display_turn_data(self):
        print "Repute:", self.game.reputation
        print "Moneys:", self.game.money
        print "Points:", self.game.points

    def display_science(self):
        print "Science:"
        self.science = []
        for science in self.game.lab.science:
            if science.can_spend(self.game.lab, 1):
                self.science.append(science)
                print " %s. %s (%s)" % (
                    len(self.science), science.NAME, science.points)
            else:
                print " -- %s (%s)" % (science.NAME, science.points)

    def display_equipment(self):
        print "Equipment:"
        self.equipment = []
        for equipment in self.game.get_available_equipment():
            self.equipment.append(equipment)
            print " %s. %s (%s) $%s" % (
                len(self.equipment), equipment.NAME, equipment.points,
                equipment.COST)

    def display_missions(self):
        print "Missions:"
        self.missions = []
        for mission in self.game.get_available_missions():
            self.missions.append(mission)
            print " %s. %s\n        %s" % (
                len(self.missions), mission.NAME, mission.SHORT_DESCRIPTION)

    def display_state(self):
        print "-" * 10, "NEW TURN", "-" * 30
        self.display_turn_data()
        print ""
        self.display_science()
        print ""
        self.display_equipment()
        print ""
        self.display_missions()
        print "-" * 50

    def next_turn(self, research_list, missions):
        missions = [(self.missions[i[0] - 1],
                     [self.equipment[i[j] - 1] for j in range(1, len(i))])
                    for i in missions]
        research_list = [self.science[i - 1] for i in research_list]
        self.game.cur_allocation.extend(research_list)
        self.game.cur_missions.extend(missions)
        print "-" * 10, "RESULTS", "-" * 31
        messages = self.game.end_turn()
        for miss, msg_type, msg in messages:
            if miss:
                print 'Mission: %s' % miss
            if msg_type == NEW_SCIENCE or msg_type == NEW_SCHEMATIC:
                print msg
            elif msg_type == FAILURE:
                print 'Mission failure: %s' % msg
            elif msg_type == SUCCESS:
                print 'Success: %s' % msg
            else:
                print 'Unhandled result %d: %s' % (msg_type, msg)
        self._begin_turn()