annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
1 from gamelib.gamestate import Game
80
a40a76012bd7 Refactor message handling so we can deal with in the gui
Neil Muller <drnlmuller@gmail.com>
parents: 58
diff changeset
2 from gamelib.constants import SUCCESS, FAILURE, NEW_SCIENCE, NEW_SCHEMATIC
23
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
3
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
4
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
5 class ReplGame(object):
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
6 def __init__(self, init_data=None):
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
7 self.game = Game(init_data=init_data)
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
8 self._begin_turn()
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
9
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
10 def _begin_turn(self):
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
11 self.game.start_turn()
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
12 self.display_state()
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
13
29
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
14 def display_turn_data(self):
28
2f7d8f908de0 Better REPL client.
Jeremy Thurgood <firxen@gmail.com>
parents: 26
diff changeset
15 print "Repute:", self.game.reputation
2f7d8f908de0 Better REPL client.
Jeremy Thurgood <firxen@gmail.com>
parents: 26
diff changeset
16 print "Moneys:", self.game.money
26
5d699b1f7188 Better REPL game.
Jeremy Thurgood <firxen@gmail.com>
parents: 23
diff changeset
17 print "Points:", self.game.points
29
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
18
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
19 def display_science(self):
23
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
20 print "Science:"
26
5d699b1f7188 Better REPL game.
Jeremy Thurgood <firxen@gmail.com>
parents: 23
diff changeset
21 self.science = []
23
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
22 for science in self.game.lab.science:
58
52913ba12988 Check for multiple points in can_spend
Neil Muller <drnlmuller@gmail.com>
parents: 33
diff changeset
23 if science.can_spend(self.game.lab, 1):
26
5d699b1f7188 Better REPL game.
Jeremy Thurgood <firxen@gmail.com>
parents: 23
diff changeset
24 self.science.append(science)
5d699b1f7188 Better REPL game.
Jeremy Thurgood <firxen@gmail.com>
parents: 23
diff changeset
25 print " %s. %s (%s)" % (
5d699b1f7188 Better REPL game.
Jeremy Thurgood <firxen@gmail.com>
parents: 23
diff changeset
26 len(self.science), science.NAME, science.points)
5d699b1f7188 Better REPL game.
Jeremy Thurgood <firxen@gmail.com>
parents: 23
diff changeset
27 else:
5d699b1f7188 Better REPL game.
Jeremy Thurgood <firxen@gmail.com>
parents: 23
diff changeset
28 print " -- %s (%s)" % (science.NAME, science.points)
29
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
29
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
30 def display_equipment(self):
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
31 print "Equipment:"
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
32 self.equipment = []
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
33 for equipment in self.game.get_available_equipment():
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
34 self.equipment.append(equipment)
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
35 print " %s. %s (%s) $%s" % (
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
36 len(self.equipment), equipment.NAME, equipment.points,
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
37 equipment.COST)
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
38
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
39 def display_missions(self):
28
2f7d8f908de0 Better REPL client.
Jeremy Thurgood <firxen@gmail.com>
parents: 26
diff changeset
40 print "Missions:"
29
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
41 self.missions = []
33
12c33aac7684 Gate certain missions by reputation.
Jeremy Thurgood <firxen@gmail.com>
parents: 29
diff changeset
42 for mission in self.game.get_available_missions():
29
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
43 self.missions.append(mission)
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
44 print " %s. %s\n %s" % (
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
45 len(self.missions), mission.NAME, mission.SHORT_DESCRIPTION)
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
46
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
47 def display_state(self):
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
48 print "-" * 10, "NEW TURN", "-" * 30
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
49 self.display_turn_data()
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
50 print ""
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
51 self.display_science()
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
52 print ""
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
53 self.display_equipment()
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
54 print ""
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
55 self.display_missions()
28
2f7d8f908de0 Better REPL client.
Jeremy Thurgood <firxen@gmail.com>
parents: 26
diff changeset
56 print "-" * 50
23
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
57
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
58 def next_turn(self, research_list, missions):
29
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
59 missions = [(self.missions[i[0] - 1],
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
60 [self.equipment[i[j] - 1] for j in range(1, len(i))])
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
61 for i in missions]
26
5d699b1f7188 Better REPL game.
Jeremy Thurgood <firxen@gmail.com>
parents: 23
diff changeset
62 research_list = [self.science[i - 1] for i in research_list]
23
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
63 self.game.cur_allocation.extend(research_list)
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
64 self.game.cur_missions.extend(missions)
29
355aa7592492 Missions in the REPL!
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
65 print "-" * 10, "RESULTS", "-" * 31
80
a40a76012bd7 Refactor message handling so we can deal with in the gui
Neil Muller <drnlmuller@gmail.com>
parents: 58
diff changeset
66 messages = self.game.end_turn()
224
e4f9513c9dd0 Include mission name in the results
Neil Muller <drnlmuller@gmail.com>
parents: 80
diff changeset
67 for miss, msg_type, msg in messages:
e4f9513c9dd0 Include mission name in the results
Neil Muller <drnlmuller@gmail.com>
parents: 80
diff changeset
68 if miss:
e4f9513c9dd0 Include mission name in the results
Neil Muller <drnlmuller@gmail.com>
parents: 80
diff changeset
69 print 'Mission: %s' % miss
80
a40a76012bd7 Refactor message handling so we can deal with in the gui
Neil Muller <drnlmuller@gmail.com>
parents: 58
diff changeset
70 if msg_type == NEW_SCIENCE or msg_type == NEW_SCHEMATIC:
a40a76012bd7 Refactor message handling so we can deal with in the gui
Neil Muller <drnlmuller@gmail.com>
parents: 58
diff changeset
71 print msg
a40a76012bd7 Refactor message handling so we can deal with in the gui
Neil Muller <drnlmuller@gmail.com>
parents: 58
diff changeset
72 elif msg_type == FAILURE:
a40a76012bd7 Refactor message handling so we can deal with in the gui
Neil Muller <drnlmuller@gmail.com>
parents: 58
diff changeset
73 print 'Mission failure: %s' % msg
a40a76012bd7 Refactor message handling so we can deal with in the gui
Neil Muller <drnlmuller@gmail.com>
parents: 58
diff changeset
74 elif msg_type == SUCCESS:
a40a76012bd7 Refactor message handling so we can deal with in the gui
Neil Muller <drnlmuller@gmail.com>
parents: 58
diff changeset
75 print 'Success: %s' % msg
a40a76012bd7 Refactor message handling so we can deal with in the gui
Neil Muller <drnlmuller@gmail.com>
parents: 58
diff changeset
76 else:
a40a76012bd7 Refactor message handling so we can deal with in the gui
Neil Muller <drnlmuller@gmail.com>
parents: 58
diff changeset
77 print 'Unhandled result %d: %s' % (msg_type, msg)
23
f6a3b213857b Fix up some game state logic, add very basic REPL game interface.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
78 self._begin_turn()