123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- import FSM
- import utils as u
- import menus as m
- #====================================
-
- State = type("State", (object,), {})
- #====================================
- class State(object):
- def __init__(self, FSM):
- self.FSM = FSM
- def Enter(self):
- pass
- def Execute(self):
- pass
- def Exit(self):
- pass
-
-
- class Calculator(State):
- def __init__(self,FSM):
- super(Calculator, self).__init__(FSM)
-
- def Enter(self):
- o = self.FSM.owner
-
- o.pub.register("beat", self)
-
- self.num1 = ''
- self.num2 = ''
- self.op = ''
- self.result = ''
-
- self.labels = ['.', '0', '=', '/',
- '1', '2', '3', '*',
- '4', '5', '6', '-',
- '7', '8', '9', '+',
- '7', '8', '9', '+']
-
- self.draw_main(o)
- o.update_display(0)
-
- super(Calculator, self).Enter()
-
- def Execute(self):
- o = self.FSM.owner
- m.menu1_actions(self, o)
- if o.keyState[16] == 1:
- m.draw_menu1(o)
- o.update_display(0)
- elif o.keyState[16] == 4:
- self.draw_main(o)
- o.update_display(0)
-
- if o.keyState[16] > 0:
- pass
- else:
- if o.keyState[17] == 1:
- self.num1 = ''
- self.num2 = ''
- self.op = ''
- self.result = ''
-
- self.check_keys(o)
-
- def append_num(self, num):
- ops = ['+', '-', '*', '/']
- print('appending num ', num)
- if num in ops:
- if self.num1 != '':
- self.op = num
- self.num2 = ''
- self.result = ''
- elif num == '=':
- print('this is that')
- if self.num2 != '':
- if self.result == '':
- if self.op == '+':
- self.result = float(self.num1) + float(self.num2)
- print(self.result)
- if self.op == '-':
- self.result = float(self.num1) - float(self.num2)
- print(self.result)
- if self.op == '*':
- self.result = float(self.num1) * float(self.num2)
- print(self.result)
- if self.op == '/':
- self.result = float(self.num1) / float(self.num2)
- print(self.result)
- else:
- if self.op != '':
- if self.op == '+':
- self.result = self.result + float(self.num2)
- print(self.result)
- if self.op == '-':
- self.result = self.result - float(self.num2)
- print(self.result)
- if self.op == '*':
- self.result = self.result * float(self.num2)
- print(self.result)
- if self.op == '/':
- self.result = self.result / float(self.num2)
- print(self.result)
-
- else:
- if self.result != '':
- self.num1 = ''
- self.num2 = ''
- self.op = ''
- self.result = ''
- if self.op == '':
- self.num1 += num
- print('---append ', num)
- else:
- self.num2 += num
- print('---append ', num)
-
- def check_keys(self, o):
- _iter = 0
- for k in o.keyState:
- if k == 1:
- if _iter == 0:
- if ('.' not in self.num1 and self.num2 == '') or (self.num2 != '' and '.' not in self.num2):
- self.append_num('.')
- if _iter == 1:
- self.append_num('0')
- if _iter == 2:
- self.append_num('=')
- if _iter == 3:
- self.append_num('/')
- if _iter == 4:
- self.append_num('1')
- if _iter == 5:
- self.append_num('2')
- if _iter == 6:
- self.append_num('3')
- if _iter == 7:
- self.append_num('*')
- if _iter == 8:
- self.append_num('4')
- if _iter == 9:
- self.append_num('5')
- if _iter == 10:
- self.append_num('6')
- if _iter == 11:
- self.append_num('-')
- if _iter == 12:
- self.append_num('7')
- if _iter == 13:
- self.append_num('8')
- if _iter == 14:
- self.append_num('9')
- if _iter == 15:
- self.append_num('+')
-
- self.draw_main(o)
-
- _iter += 1
-
- def draw_main(self, o):
- print('drawing ', self.num1)
- x_size = o.width / 4
- y_size = o.height / 5
- og_x = 0
- o_x = og_x
- o_y = o.height
- text_padding = 6
-
- _id = 0
- while _id < 20:
- # lab = ""
- # for i in self.labels[_id]:
- # lab += i
-
- lab = self.labels[_id]
-
- o.draw.rectangle((o_x, o_y, o_x + x_size, o_y - y_size), outline=0, fill=o.blue)
- o.center_block(lab, o.h2, [o_x, o_y, o_x + x_size, o_y - y_size], o.light_grey)
-
- o_x = o_x + x_size
- _id += 1
- if _id % 4 == 0:
- o_y -= y_size
- o_x = og_x
- #o.draw.rectangle((0, 0, o.width, y_size), outline=0, fill=o.blue)
- o.draw.rectangle((0, 0, x_size * 3, y_size), outline=0, fill=o.blue)
- o.draw.rectangle((x_size * 3, 0, o.width, y_size), outline=0, fill=o.blue)
- o.center_block("Clear", o.h2, [x_size * 3, 0, o.width, y_size], o.light_grey)
- #o.center_block('where is my fucking text', o.h2, [0, 0, o.width, y_size], o.light_grey)
- if self.num1 != '':
- if self.result != '':
- o.center_block(str(self.result), o.h2, [0, 0, x_size * 3, y_size], o.light_grey)
- elif self.num2 != '':
- o.center_block(str(self.num2), o.h2, [0, 0, x_size * 3, y_size], o.light_grey)
- elif self.op != '':
- o.center_block(str(self.op), o.h2, [0, 0, x_size * 3, y_size], o.light_grey)
- else:
- o.center_block(str(self.num1), o.h2, [0, 0, x_size * 3, y_size], o.light_grey)
- print('fucking do something')
- else:
- print('num1 is empty')
- o.update_display(0)
-
- def ReceiveMessage(self, message):
- o = self.FSM.owner
- u.play_seq(o, message)
-
- def Exit(self):
- self.FSM.owner.pub.unregister("beat", self)
|