def fsm_setup(self): self.fsm = FSM('INIT', []) self.fsm.set_default_transition(lgFSM.Error, 'INIT') self.fsm.add_transition_any('INIT', None, 'INIT') self.fsm.add_transition('RW', 'INIT', lgFSM.Root) self.fsm.add_transition('Xp', 'INIT', lgFSM.Period) self.fsm.add_transition('Wd', 'INIT', lgFSM.Declarative, 'DECL') self.fsm.add_transition('Wd', 'DECL', lgFSM.Declarative, 'DECL') self.fsm.add_transition('Ss', 'DECL', lgFSM.Subject, 'INIT') self.fsm.add_transition('AF', 'DECL', lgFSM.Object, 'INIT')
def __init__(self, initial_state, memory=[]): # Map (input_symbol, current_state) --> (action, next_state). self.state_transitions = {} # Map (current_state) --> (action, next_state). self.input_symbol = None self.initial_state = initial_state self.current_state = self.initial_state self.next_state = None self.action = None self.memory = memory self.registers = {} self.register_history = [] self.L_registers = {} self.R_registers = {} self.fsm = FSM('INIT') self.fsm.add_transition('front_left', 'INIT', None, 'FRONT_L') self.fsm.add_transition('front_right', 'INIT', None, 'FRONT_R')
def PaintWorld(): global players, limits, obs, enemies, time2, time1, time, debug, ts, enemy_bullets, player_bullets try: # Keys Pressed and saved in buffer keyOperations() glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() glLoadIdentity() glTranslatef(0.0, -20.0, -140.0) ####################### # Draw the Objects drawLife(players[0], enemies) # Plane drawPlane() # Limits of the world drawLimits(limits) # Obstacles drawObstacle(obstacle1) drawObstacle(obstacle2) drawObstacle(obstacle3) # Draw Food drawFood(food) # Player for player in players: if player.life == 0: print "" print " GAME OVER... " print "" print " Thanks for playing Battle Cubes :D " print "" sys.exit(0) drawAgent(player) #Agent's Bullets for bullet in player_bullets: drawBullet(bullet, 1) #Agent' Bullets for bullet in enemy_bullets: drawBullet(bullet, 2) # Enemies for enemy in enemies: enemy_bullets = enemy_bullets + enemy.bullets enemy.bullets = [] if enemy.life <= 0: enemies.remove(enemy) characters.remove(enemy) break drawEnemy(enemy) drawNavMesh(ts) ####################### ############# # Behaviour # ############# fsm = FSM() steerings = [ SteeringOutput(), SteeringOutput(), SteeringOutput(), SteeringOutput() ] # Iterating through all the enemies for i in range(0, len(enemies)): enemy = enemies[i] if enemy.life > 0: # Updating the state on the FSM enemy.state = fsm.update(enemy, characters, food) # Retrieving the new steering steerings[i] = getSteering(characters, player, enemy, obs, ts, food) physics = check_physics(characters, obs, obstacle_ob) # Get end just before calculating new positions, # velocities and accelerations time2 = datetime.now() time = ((time2 - time1).microseconds) / 1000000.0 # Updating player stats updatePlayer(player, time, obstacle_ob) #Updating agent's bullets from agent for b in player_bullets: if b.position[1] < 0: player_bullets.remove(b) else: #print b.velocity steering = SteeringOutput() # Acceleration in y-axes (gravity) b.update(steering, time) #Check bullet position check_shot(b, enemies) for ob in obstacle_ob: if inside_ob(b, ob): player_bullets.remove(b) break #for wall in obs: # agent_wall(agent,wall) #print "posicion " + str(b.position) #Updating enemy's bullets for b in enemy_bullets: if b.position[1] < 0: enemy_bullets.remove(b) else: #print b.velocity steering = SteeringOutput() # Acceleration in y-axes (gravity) b.update(steering, time) #Check bullet position check_shot(b, [player]) for ob in obstacle_ob: if inside_ob(b, ob): enemy_bullets.remove(b) break #print player.velocity # Updating enemies stats for i in range(0, len(enemies)): if enemies[i].life > 0: enemies[i].update(steerings[i], time, obstacle_ob, "auto") for col in physics: col[0].update(col[1], time, obstacle_ob, "auto") # Get initial time just after calculating everything time1 = datetime.now() #################### # End of Behaviour # #################### glutSwapBuffers() except Exception, e: traceback.print_exc() sys.exit(-1)