comparison tools/ruleset_tester.py @ 378:64738befdf3b

bringing in the changes from the build_system_rework branch in preparation for the 0.3.0 release. This commit will require the Jan2010 devkit. Clients will also need to be modified to the new way to import fife.
author vtchill@33b003aa-7bff-0310-803a-e67f0ece8222
date Mon, 11 Jan 2010 23:34:52 +0000
parents
children 81641655bc38
comparison
equal deleted inserted replaced
377:fe6fb0e0ed23 378:64738befdf3b
1 #!/usr/bin/env python
2 import Tkinter as TK
3 import math
4
5 class Ruleset (object):
6 def __init__ (self):
7 # move to somewhere else later (file ...)
8 self.ST_name = 'Strength'
9 self.ST_desc = 'The strenght of your character, affects hitpoints, carry weight and the weapons skill.'
10 self.AG_name = 'Agility'
11 self.AG_desc = 'The agility of your character influences armor class, action points and the weapons skill.'
12 self.IN_name = 'Intelligence'
13 self.IN_desc = 'Your intelligence is important for the technology skill and your ability to talk with other characters.'
14
15 self.weapon_name = 'Weapons'
16 self.weapon_desc = 'A high weapons skill will let you fire weapons more precisly.'
17 self.tech_name = 'Technology'
18 self.tech_desc = 'Boost this skill to become a real hacker.'
19 self.talk_name = 'Talk'
20 self.talk_desc = 'A high talk skill can save bullets.'
21
22 def set_main (self, ST, AG, IN):
23 self.ST = ST
24 self.AG = AG
25 self.IN = IN
26 # now calc boni
27 self.calc_boni()
28
29 def calc_boni (self):
30 self.STbonus = 0
31 self.AGbonus = 0
32 self.INbonus = 0
33
34 if self.ST > 4 :
35 self.STbonus = (self.ST - 4) * 1
36 if self.AG > 2 :
37 self.AGbonus = (self.AG - 2) * 1
38 if self.IN > 4 :
39 self.INbonus = (self.AG - 5) * 1
40
41 def skill_weapon (self, type, count):
42 # weapon = 2 x (ST + AG) + 10%
43 #if self.weapon == False:
44 self.weapon = 2 * (self.ST + self.AG) + self.ST + self.AG
45
46 if type == 1 :
47 # increase
48 if count != 0 :
49 self.weapon = self.weapon + count
50
51 if type == 0 :
52 # decrease
53 if (self.weapon - count) != 0 :
54 self.weapon = self.weapon - count
55 else:
56 self.weapon = 0
57
58 def skill_tech (self, type, count):
59 self.tech = 3 * self.IN + 2 * self.INbonus
60
61 if type == 1 :
62 # increase
63 if count != 0 :
64 self.tech = self.tech + count
65
66 if type == 0 :
67 # decrease
68 if (self.tech - count) != 0 :
69 self.tech = self.tech - count
70 else:
71 self.tech = 0
72
73 def skill_talk (self, type, count):
74 self.talk = 2 * self.IN + self.INbonus
75
76 if type == 1 :
77 # increase
78 if count != 0 :
79 self.talk = self.talk + count
80
81 if type == 0 :
82 # decrease
83 if (self.talk - count) != 0 :
84 self.talk = self.talk - count
85 else:
86 self.talk = 0
87
88 def calc_skills (self):
89 self.skill_weapon(0,0)
90 self.skill_tech(0,0)
91 self.skill_talk(0,0)
92
93
94 class GUI (object):
95
96 def __init__ (self):
97 self.root = TK.Tk()
98 self.root.title('FIFE Techdemo Ruleset-tester')
99 self.root.geometry("350x100")
100
101 # inject ruleset
102 self.RULES = Ruleset()
103 self.RULES.set_main(2,2,2)
104 self.RULES.calc_skills()
105
106 self.frm1 = TK.Frame(master=self.root)
107 self.frm1.grid(column = 1, row = 1)
108
109 self.create_widgets()
110 self.create_buttons()
111
112 def create_widgets (self):
113
114 mainstat = {
115 "a" : [self.RULES.ST_name, self.RULES.ST_desc, self.RULES.ST, self.RULES.STbonus],
116 "b" : [self.RULES.AG_name, self.RULES.AG_desc, self.RULES.AG, self.RULES.AGbonus],
117 "c" : [self.RULES.IN_name, self.RULES.IN_desc, self.RULES.IN, self.RULES.INbonus]
118 }
119
120 skills = {
121 "a" : [self.RULES.weapon_name, self.RULES.weapon_desc, self.RULES.weapon],
122 "b" : [self.RULES.tech_name, self.RULES.tech_desc, self.RULES.tech],
123 "c" : [self.RULES.talk_name, self.RULES.talk_desc, self.RULES.talk]
124 }
125
126 col = 1
127 row = 2
128
129 # container for generated entry-widgets
130 self.entries = []
131 self.entry_vars = []
132
133 # create widgets for mainstat
134 for key in mainstat:
135 label = TK.Label(self.frm1, text=mainstat[key][0], relief= TK.GROOVE, bd=0, width=10, anchor=TK.W)
136 label.grid(column = col, row = row)
137 col = col + 1
138
139 self.entry_vars.append(TK.StringVar(self.root))
140 entry_key = TK.Entry(self.frm1, width=2, textvariable=self.entry_vars[-1])
141 entry_key.grid(column = col, row = row, padx = 0)
142 entry_key.insert(0, mainstat[key][2])
143 col = col + 1
144
145 label = TK.Label(self.frm1, text=mainstat[key][3], relief= TK.RIDGE, bd=2, width=3)
146 label.grid(column = col, row = row)
147 row = row + 1
148
149 col = 1
150
151 self.entries.append(entry_key)
152
153 col = 5
154 row = 2
155
156 for key in skills:
157 label = TK.Label(self.frm1, text=skills[key][0], relief= TK.GROOVE, bd=0, width=10, anchor=TK.W)
158 label.grid(column = col, row = row, padx = 4)
159 col = col + 1
160
161 label = TK.Label(self.frm1, text=skills[key][2], relief= TK.RIDGE, bd=2, width=3)
162 label.grid(column = col, row = row)
163 row = row + 1
164
165 col = 5
166
167 def create_buttons (self):
168 col = 6
169 row = 6
170
171 button_calc = TK.Button(self.frm1, text='Calculate', command=self.calc)
172 button_calc.grid(column = col, row = row)
173
174 col = 7
175
176 button_quit = TK.Button(self.frm1, text='Quit', command=self.exit)
177 button_quit.grid(column = col, row = row)
178
179 pass
180
181 def calc (self):
182 # prepare entrys for calculation
183
184 tmp_vars = []
185 for i,var in enumerate(self.entry_vars) :
186 inumber = var.get()
187 tmp_vars.append(int(inumber))
188
189 # set new mainstats & skill values
190 # 0 = weapons
191 # 2 = talk
192 # 1 = technology
193 self.RULES.set_main(tmp_vars[0],tmp_vars[2],tmp_vars[1])
194 self.RULES.calc_skills()
195
196 # print new stats
197 self.create_widgets()
198
199 def exit(self):
200 self.root.quit()
201
202 def run (self):
203 self.root.mainloop()
204
205 # demo
206 if __name__ == '__main__':
207 gui = GUI()
208 gui.run()