Mercurial > sypikslang
comparison gamelib/gamestate.py @ 16:af1bfeb648cb
Sketch in gamestate
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sun, 06 May 2012 17:12:40 +0200 |
parents | |
children | 296ce36fa7d9 |
comparison
equal
deleted
inserted
replaced
15:8865ba0c9c38 | 16:af1bfeb648cb |
---|---|
1 # -*- coding: utf-8 -*- | |
2 # vim:fileencoding=utf-8 ai ts=4 sts=4 et sw=4 | |
3 | |
4 """The actual game state object""" | |
5 | |
6 from gamelib import missions, lab, products | |
7 | |
8 | |
9 class Game(object): | |
10 | |
11 def __init__(self): | |
12 self.lab = lab.Lab() | |
13 # FIXME: Generate the initial tech set | |
14 self.money = 1000 | |
15 # Will be updated on the next turn | |
16 self.points = 0 | |
17 self.reputation = 0 | |
18 # instantiate the available missions | |
19 self.missions = [cls() for cls in missions.Mission.__subclasses__()] | |
20 # Missions being attempted | |
21 self.cur_missions = [] | |
22 # Science allocation for the current turn | |
23 self.cur_allocation = [] | |
24 | |
25 def start_turn(self): | |
26 # Make more flexible? | |
27 self.points += 3 | |
28 self.cur_missions = [] | |
29 self.cur_allocation = [] | |
30 | |
31 def get_available_equipment(self): | |
32 """Return a list of equipment we can produce and afford""" | |
33 available = [x for x in lab.science | |
34 if isinstance(x, products.Product) and x.COST <= self.money] | |
35 return available | |
36 | |
37 def end_turn(self): | |
38 # Attempt the missions | |
39 mission_results = [] | |
40 for mission, equipment in self.cur_missions: | |
41 mission_results.appned(mission.attempt(equipment, self)) | |
42 # Do the science | |
43 self.points -= len(self.cur_allocation) | |
44 if self.points < 0: | |
45 raise RuntimeError('Spent too many points') | |
46 new_stuff = self.lab.spend_points(self.cur_allocation, self.points) | |
47 # Process mission results | |
48 for result in mission_results: | |
49 result.apply(self) | |
50 # Update the science state with result of spend_points | |
51 for science in new_stuff: | |
52 self.lab.science.append(science) | |
53 # FIXME: Update UI |