Beispiel #1
0
def main():
    pp_engine = PredPreyEngine()
    pp_engine.add_player(Pred)
    pp_engine.add_player(Pred)
    pp_engine.add_player(Prey)
    pp_engine.add_player(Prey)
    pp_engine.init_engine()

    gui = PredPreyGUI(pp_engine)
    gui.run_simulation()
Beispiel #2
0
    def render_frame(self):
        if self.kbd_handler.humanup:
            self.kbd_handler.humanup = False
            self.human_player += 1
            if self.human_player >= len(self.pp_engine.players):
                self.human_player = -1
            self.set_human_player()

        if self.kbd_handler.humandown:
            self.kbd_handler.humandown = False
            self.human_player -= 1
            if self.human_player < -1:
                self.human_player = len(self.pp_engine.players) - 1
            self.set_human_player()

        if self.kbd_handler.restart:
            self.gui_canvas.delete("all")
            self.pp_engine = PredPreyEngine()
            self.pp_engine.add_player(Pred)
            self.pp_engine.add_player(Pred)
            self.pp_engine.add_player(Prey)
            self.pp_engine.add_player(Prey)
            self.pp_engine.init_engine()
            self.setup_game_window()
            #self.set_human_player()
            self.kbd_handler.restart = False

        if self.kbd_handler.playpause:
            self.kbd_handler.playpause = False
            self.sim_running = not self.sim_running

        if self.sim_running:
            self.frame += 1

            if self.frame >= self.frames_until_update:
                self.frame = 0

                update = None
                human_action = self.get_human_action()

                # If simulation is running, get updates
                if self.pp_engine.check_running():
                    if self.human_player < 0:
                        self.pp_engine.update_ai()
                        update = self.pp_engine.next()
                    elif self.human_player >= 0 and (self.playing_real_time
                                                     or human_action):
                        self.pp_engine.update_ai()
                        self.pp_engine.set_action(player=self.human_player,
                                                  action=human_action)
                        update = self.pp_engine.next()

                # Store the update
                self.current_update = update

            # === Movement (animated)
            # Update the GUI
            self.update_gui()

            # Move characters
            self.update_characters(self.current_update)

            # Draw objects
            self.update_objects()

        # Maintain loop
        time_to_next = self.frame_length
        if self.kbd_handler.quadspeed:
            time_to_next //= 4
        self.tkinter_instance.after(time_to_next, self.render_frame)