import FSM import utils as u import menus as m import random #==================================== 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 Ball(State): def __init__(self,FSM): super(Ball, self).__init__(FSM) def Enter(self): self.ball_size = 10 self.ballx = self.ball_size self.bally = self.ball_size self.ball_speed = 8 self.ball_x_dir = 1 self.ball_y_dir = 1 self.ball2x = self.ball_size + 180 self.ball2y = self.ball_size + 70 self.ball2_x_dir = -1 self.ball2_y_dir = -1 self.xmult = 1.0 o = self.FSM.owner o.header_text = "Balls" o.pub.register("beat", self) if o.keyState[16] > 0 or o.keyState[17] > 0: pass else: u.draw_header(o) o.update_display(0) super(Ball, 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) if o.keyState[16] > 0 or o.keyState[17] > 0: pass else: #now = datetime.now() #current_time = time.strftime("%-I:%M %p") if self.ballx < (0 + self.ball_size): self.ball_x_dir = 1 if self.ballx > (o.width - self.ball_size): self.ball_x_dir = -1 if self.bally < (0 + self.ball_size): self.ball_y_dir = 1 if self.bally > (o.height - self.ball_size): self.ball_y_dir = -1 # if self.ballx > (o.width - self.ball_size) or self.ballx < (0 + self.ball_size): # self.ball_x_dir *= -1 # if self.bally > (o.height - self.ball_size) or self.bally < (0 + self.ball_size): # self.ball_y_dir *= -1 self.ballx += self.ball_speed * self.ball_x_dir self.bally += self.ball_speed * self.ball_y_dir if self.ball2x < (0 + self.ball_size): self.ball2_x_dir = 1 self.xmult = random.uniform(.6, 1.2) if self.ball2x > (o.width - self.ball_size): self.ball2_x_dir = -1 self.xmult = random.uniform(.6, 1.2) if self.ball2y < (0 + self.ball_size): self.ball2_y_dir = 1 if self.ball2y > (o.height - self.ball_size): self.ball2_y_dir = -1 # if self.ball2x > (o.width - self.ball_size) or self.ball2x < (0 + self.ball_size): # self.ball2_x_dir *= -1 # self.xmult = random.uniform(.8, 1.2) # if self.ball2y > (o.height - self.ball_size) or self.ball2y < (0 + self.ball_size): # self.ball2_y_dir *= -1 self.ball2x += (self.ball_speed * self.ball2_x_dir) * self.xmult self.ball2y += (self.ball_speed * self.ball2_y_dir) o.draw.rectangle((0, 0, o.width, o.height), outline=0, fill=o.blue) o.draw.ellipse((self.ballx - self.ball_size, self.bally - self.ball_size, self.ballx + self.ball_size, self.bally + self.ball_size), fill = o.light_grey, outline =o.light_grey) o.draw.ellipse((self.ball2x - self.ball_size, self.ball2y - self.ball_size, self.ball2x + self.ball_size, self.ball2y + self.ball_size), fill = o.light_grey, outline =o.light_grey) #o.center_block(current_time, o.h3, [0,0,o.width,o.height], o.pink) 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)