示例#1
2
def main():
    """ Starting function for the application. Initialize pygame and quidditas and start
        the game.
    """
    pygame.init()
    pygame.display.set_caption("Tower defense example using Quidditas")
    
    screen = pygame.display.set_mode((640, 480))
    clock = Clock()
    running = 1
    
    images = {}
    images["soldier"] = load("res/soldier.png")

    q = init_quidditas(screen, images)

    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = 0
        q.update(clock.get_time())
        update(clock.get_time())
        render(clock.get_time())

        pygame.display.flip()
        clock.tick(60)
示例#2
1
def main():
    """Main program loop"""
    
    pygame.init()
    screen = pygame.display.set_mode(opt.window_size)
    
    sys_font = Font(get_default_font(), opt.font_size)
    clock = Clock()
    
    manager = YarsManager()

    running = True
    
    while running:
        #limit framerate and prepare FPS display text
        clock.tick(opt.max_framerate)
        fps = clock.get_fps()
        fps_text = sys_font.render("FPS: {0:.1f}".format(fps), False, opt.white)
        
        if event.get(pygame.QUIT):
            sys.exit()

        running = manager.handle_events(event.get(), key.get_pressed())
        manager.update()

        screen.fill(opt.black)
        manager.draw(screen)
        screen.blit(fps_text, fps_text.get_rect(top = 0, right = opt.width))
        pygame.display.update()
		
    sys.exit()
def run():
    clock = Clock()
    initialize()
    while(True):
        dt = clock.tick(60)
        update()
        render()
def main():
    pygame.init()

    size = width, height = 1280, 720
    speed = [2,2]
    black = 0, 0, 0
    pos = posx, posy = width/2, height/2
    radius = 20
    color = THECOLORS["red"]
    clock = Clock()
    screen = pygame.display.set_mode(size)
    surface = pygame.display.get_surface()
    rmanager = RingManager( width, height, center = pos)
    r = 0
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT: pygame.quit(); sys.exit()
            elif event.type == KEYDOWN:
                if pygame.key.get_pressed()[K_1]:
                    r = 0
                if pygame.key.get_pressed()[K_2]:
                    r = 1
                if pygame.key.get_pressed()[K_3]:
                    r = 2
                if pygame.key.get_pressed()[K_4]:
                    r = 3
                if pygame.key.get_pressed()[K_LEFT]:
                    rmanager.rings[r] << 1
                elif pygame.key.get_pressed()[K_RIGHT]:
                    rmanager.rings[r] >> 1
        rmanager.checkCollide()
        rmanager.paintAll(surface)
        pygame.display.flip()
        clock.tick(60)
示例#5
0
 def update(self, deps, callback, max_fps):
   c = Clock()
   while self.running:
     env = self.compose(deps)
     callback(*env)
     c.tick(max_fps)
   self.logger.debug("Thread with deps %s ending" % (str(deps)))
示例#6
0
class Asteroids(object):
    """ Class definition for the asteroids game. """

    def __init__(self):
        """ Create a new instance of the asteroids game. """
        pygame.init()
        pygame.display.set_caption("Asteroids example using Quidditas")

        screen = pygame.display.set_mode((640, 480))
        self.clock = Clock()

        self.to_update = []
        self.to_render= []

        self.event_bus = cyrusbus.Bus()
        self.event_bus.subscribe("event.exit", self.on_exit)

        images = {}
        images["asteroid"] = load("res/asteroid.png")
        images["spaceship"] = load("res/player.png")
        self.q = self.init_quidditas(screen, images)

    def on_exit(self, event):
        """ Handle an exit event that comes via the event bus. """
        self.running = 0

    def start(self):
        """ Start the game loop. """

        self.running = 1
        while self.running:
            for event in pygame.event.get(pygame.QUIT):
                self.running = 0
            time = self.clock.get_time()
            self.q.update(time)
            self.update(time)
            self.render(time)

            self.clock.tick(60)
        pygame.quit()

    def update(self, time):
        """ Iterate over all processors that update game logic and call their update. """
        [processor.update(time) for processor in self.to_update]

    def render(self, time):
        """ Iterate over all processors that render the game and call their update. """
        [processor.update(time) for processor in self.to_render]
        pygame.display.flip()

    def init_quidditas(self, screen, images):
        """ Initialize the quidditas instance and create the processors. """
        q = quidditas.Quidditas()
        q.add_type_definitions(type_definitions.definitions)

        self.to_update.append(q.add_processor(processors.RenderProcessor(screen, images)))
        self.to_update.append(q.add_processor(processors.AsteroidSpawner()))
        self.to_update.append(q.add_processor(processors.ControlsProcessor(self.event_bus)))
        self.to_render.append(q.add_processor(processors.MovementProcessor((640, 480))))
        return q
示例#7
0
class CpuSpinner:
    def __init__(self, directory, ttl=False, gameticks=Parameters.GAMETICKS, gamespeed=Parameters.GAMESPEED):
        self.clock = GameClock(gameticks)
        self.clock.set_speed(gamespeed)
        self.clock.start()

        self.limitclock = Clock()

        self._running = True

        self.__ttl = ttl * Parameters.GAMETICKS

        self._directory = directory

        self.__aupdatecounter = 0

    def __gettick(self):
        return self.clock.game_tick

    def __getbetweenframe(self):
        return self.clock.get_between_frame()

    def start(self):
        self.__loop()

    def __loop(self):
        while self._running:
            for i in self.clock.update():
                self.__update()
            self._draw()

    def __update(self):
        if self.__ttl:
            self.__ttl -= 1
            if self.__ttl == 0:
                self._running = False

        # regular update done x times by seconds
        for updatable in self._directory.get(Tags.UPDATABLE):
            updatable.update(self.__gettick())

        self.__aupdatecounter += 1

        if self.__aupdatecounter == Parameters.AGAMETICKS:
            self.__aupdatecounter = 0
            self._aupdate()

    def _aupdate(self):
        # alternative (heavy update) every x updates
        self._directory.update()
        # print self.clock.average_fps

    def _draw(self):
        self._directory.get_single(Tags.RENDERER).draw(self.__getbetweenframe())
        if Parameters.FPSLIMIT:
            self.limitclock.tick(Parameters.FPSLIMIT)
示例#8
0
文件: editor.py 项目: bpa/renegade
 def run(self):
     clock = Clock()
     while True:
         clock.tick(50)
         for event in pygame.event.get():
             if event.type == QUIT:
                 return
             if event.type == KEYDOWN:
                 return
         self.draw(self.screen)
示例#9
0
 def __init__(self):
     self.input = InputHandler()
     self.state_manager = GameStateManager()
     self.hiscores = Hiscores(resources.get_hiscores(HISCORES_FILENAME))
     self.logic_clock = Clock()
     self.render_clock = Clock()
     self.renderer = Thread(target=self.render_loop, args=())
     self.renderer.daemon = True
     self.rendering = Lock()
     self.running = False
     self.screen = None
     self.canvas = None
示例#10
0
文件: Main.py 项目: tobal/Taltos
class TaltosGame():

    def __init__(self):
        pygame.init()
        self.clock = Clock()
        MusicPlayer.MusicPlayer().playContinously()

        self.gameMode = GameMode.GameMode(GameModes.RPG)
        self.gameScreen = MainScreen.MainScreen()
        self.gameScreen.setScreenMode(self.gameMode.getGameMode())
        self.language = Menu.Menu(self.gameScreen.getScreen()).languageChooser()

        """
        self.gameModules = {
                GameModes.RPG : None,
                GameModes.CYBERSPACE : None }
        """
        self.changeGameMode(GameModes.RPG)

    def changeGameMode(self, newGameMode):
        self.gameMode.setGameMode(newGameMode)
        self.gameScreen.setScreenMode(self.gameMode.getGameMode())
        if self.gameMode.getGameMode() == GameModes.RPG:
            self.currentGameModule = Rpg.Rpg(self.gameScreen, self.language)
        if self.gameMode.getGameMode() == GameModes.CYBERSPACE:
            self.currentGameModule = Cyberspace.Cyberspace(self.gameScreen, self.language)
        """
        if self.gameMode.getGameMode() == GameModes.RPG:
            if self.gameModules[GameModes.RPG] is None:
                self.gameModules[GameModes.RPG] = Rpg.Rpg(self.gameScreen, self.language)
        if self.gameMode.getGameMode() == GameModes.CYBERSPACE:
            if self.gameModules[GameModes.CYBERSPACE] is None:
                self.gameModules[GameModes.CYBERSPACE] = Cyberspace.Cyberspace(self.gameScreen, self.language)
        self.currentGameModule = self.gameModules[self.gameMode.getGameMode()]
        """

    def gameLoop(self):
        while True:
            try:
                self.clock.tick(30)
                self.currentGameModule.handleKeyEvents()
                self.currentGameModule.gameLoop()
            except MainExceptions.Exit:
                exit()
            except MainExceptions.ChangeGameMode as gameModeChange:
                self.changeGameMode(gameModeChange.newGameMode)

            if self.gameMode.getGameMode() == GameModes.RPG:
                pygame.display.update()
            if self.gameMode.getGameMode() == GameModes.CYBERSPACE:
                pygame.display.flip()
def main():
    pygame.init()
    # pygame.mixer.init()
    pygame.mixer.init(frequency=22050, size=8, channels=2, buffer=2048)

    from all_notes import AllNotes

    allnotes = AllNotes()
    from plingpling import Glaspling

    pling = Glaspling()
    from random_sounds import Random

    random = Random()
    from beats import Trummor

    beats = Trummor()

    sounds = {"random": random, "all": allnotes, "pling": pling, "trummor": beats}

    if len(sys.argv) < 4:
        print "Usage: python sequences.py midi_file track1 sound1 track2 sound2 ..."
        print "  available sounds: " + str(sounds.keys())
        sys.exit(1)

    midi_file = sys.argv[1]
    tempo = float(sys.argv[2])
    our_tracks = sys.argv[3::2]
    our_sounds = sys.argv[4::2]

    song = midi.read_midifile(midi_file)
    clk = Clock()
    all_we_need = []

    for (tid, soundname) in zip(our_tracks, our_sounds):
        track = song[int(tid)]
        event = track[0]
        tick = event.tick
        sound = sounds.get(soundname, pling)
        all_we_need.append({"track": track, "event_idx": 0, "event": event, "ticks_left": tick, "play": sound.play})

    while True:
        ticks_passed = clk.tick() * tempo

        if len(all_we_need) == 0:
            break

        for index, track in enumerate(all_we_need):
            advance(track, ticks_passed)

    print "Bye bye"
示例#12
0
class GameClock(Observable):
    """Keeps track of how fast the game clock runs"""

    # Fires when game time advances
    # :param dt: Amount of game time that elapsed
    @EventType
    def REAL_TIME_ADVANCE(dt):
        """Game time has advanced
        :param dt: Amount of game time that elapsed, in "seconds"
        """

    @EventType
    def GAME_TIME_ADVANCE(dt):
        """Real time has passed
        :param dt: Amount of real time that elapsed, in milliseconds
        """

    def __init__(self, framerate, multiplier=1.0):
        super(GameClock, self).__init__()

        self.clock = Clock()
        self._multiplier = multiplier
        self.framerate = framerate
        self.isPaused = False

    @property
    def multiplier(self):
        """Get the real/game time ratio"""
        if self.isPaused:
            return 0
        else:
            return self._multiplier

    @multiplier.setter
    def multiplier(self, multiplier):
        """Get the real/game time ratio"""
        self._multiplier = multiplier

    def toggle(self):
        self.isPaused ^= True

    def update(self):
        # pygame.time.Clock::tick() returns milliseconds
        real_dt = self.clock.tick(self.framerate)
        # self.notify(GameClock.REAL_TIME_ADVANCE, real_dt)
        game_dt = real_dt * self.multiplier / 1000.0
        self.notify(GameClock.GAME_TIME_ADVANCE, game_dt)

    def zero(self):
        """Drain any time off the internal clock without calling any updaters"""
        real_dt = self.clock.tick(self.framerate)
示例#13
0
def main():
    """The main function of the game.
    Initializes PyGame objects and then enters the game loop
    """
    
    pygame.init()
    screen = pygame.display.set_mode(window_size)
    
    sys_font = Font(get_default_font(), font_size)
    clock = Clock()
    
    #now that pygame is initialized, initialize inherited classes properly
    global enemy_wave, player
    enemy_wave = EnemyGroup(evil_bullets)
    
    player = Player(window_size, ship_filename, ship_speed)
    
    while 1:
        #limit framerate and prepare FPS display text
        clock.tick(max_framerate)
        fps = clock.get_fps()
        fps_text = sys_font.render("FPS: {0:.1f}".format(fps), False, white)
        
        score_text = sys_font.render("SCORE: {}".format(score), False, white)
        lives_text = sys_font.render("MANS: {}".format(lives), False, white)
    
        #check for QUIT event to prevent endless loopage
        for event in pygame.event.get():
            if event.type == pygame.QUIT: sys.exit()
            
        #call the game's thinking functions
        check_gameover()
        keyboard()
        evil_bullets.update()
        good_bullets.update()
        enemy_wave.update()
        collisions()
            
        #draw the stuff
        screen.fill(black)
        good_bullets.draw(screen)
        evil_bullets.draw(screen)
        enemy_wave.draw(screen)
        screen.blit(player.image, player.rect)
        screen.blit(score_text, score_text.get_rect(top = 0, left = 0))
        screen.blit(lives_text, lives_text.get_rect(top = 0, centerx = width / 2))
        screen.blit(fps_text, fps_text.get_rect(top = 0, right = width))
        pygame.display.update()
示例#14
0
    def __init__(self, framerate, multiplier=1.0):
        super(GameClock, self).__init__()

        self.clock = Clock()
        self._multiplier = multiplier
        self.framerate = framerate
        self.isPaused = False
    def __init__(self, evManager):
        self.evManager = evManager
	self.evManager.RegisterListener( self )
     
        self.clock = Clock()

	self.keepGoing = 1
示例#16
0
 def start_display_output(self):
     """ Start thread for graphical VU meter """
     
     pygame.event.clear()
     clock = Clock()
     self.meter.start()        
     while 1:
         for event in pygame.event.get():
             if event.type == pygame.QUIT:
                 self.exit()
             elif event.type == pygame.KEYDOWN or event.type == pygame.KEYUP:
                 keys = pygame.key.get_pressed() 
                 if (keys[pygame.K_LCTRL] or keys[pygame.K_RCTRL]) and event.key == pygame.K_c:
                     self.exit()                                                 
         self.refresh()
         clock.tick(1)
 def __init__(self):
     if Time._instance is None:
         Time._instance = self
     else:
         pass
     self._delta_time = 0
     self._time_scale = 1
     self._clock = Clock()
class Time(object):
    """
    A helper class for dealing with time.
    """
    _instance = None

    def __init__(self):
        if Time._instance is None:
            Time._instance = self
        else:
            pass
        self._delta_time = 0
        self._time_scale = 1
        self._clock = Clock()

    def update(self):
        self._delta_time = self._clock.tick(Configuration.instance().frame_cap )

    @property
    def delta_time(self):
        return self._delta_time / self.time_scale

    @property
    def time_scale(self):
        return self._time_scale

    @time_scale.setter
    def time_scale(self, time_scale):
        self._time_scale = time_scale

    @property
    def clock(self):
        return self._clock

    @property
    def frame_rate(self):
        """
        :return: The frame rate which the game is current running.
        """
        return self._clock.get_fps()

    @staticmethod
    def instance():
        if Time._instance is None:
            Time._instance = Time()
        return Time._instance
示例#19
0
 def __init__(self, *args, **kargs):
     super(TimeLockedState, self).__init__(*args, **kargs)
     self._lock = True
     self._waited = 0
     if not "lock" in kargs.keys():
         raise Exception("you must provide an argument named 'lock'.")
     self._time_to_wait = kargs["lock"]
     self._clock = Clock()
示例#20
0
class GetIP:

	def __init__(self, height, width):
		self._height = height
		self._width = width
		self.IPtext = ""
		self.clock = Clock()
	
	def get_key(self):
		while True:
			event = pygame.event.poll()
			if event.type == KEYDOWN:
				return event.key
			elif event.type == pygame.QUIT:
				exit()
			else:
				pass

	def draw(self, view):
		tfont = pygame.font.Font(None, 20)
		pygame.draw.rect(view, (0,0,0), ((self._width/2)-100, (self._height/2)-10, 200,20), 0)
		pygame.draw.rect(view, (255,255,255), ((self._width/2)-102, (self._height/2)-12, 204,24), 1)
		view.blit(tfont.render("IP address: "+ self.IPtext, 1, (255,0,0)), ((self._width/ 2) - 100, (self._height/ 2) - 10))
		pygame.display.update()

	def get_ip(self,view):
		IP = []
		self.IPtext = ""
		self.draw(view)
		while True:
			inputkey = self.get_key()
			if inputkey == K_BACKSPACE:
				IP = IP[0:-1]
			elif inputkey == K_RETURN:
				break
			elif inputkey <=127:
				IP.append(chr(inputkey))

			self.IPtext = (string.join(IP,""))
			self.draw(view)
			
			self.clock.tick(40)
		return self.IPtext
示例#21
0
 def __init__(self):
     self.world = World(1024, 768, 0, 0)
     self.world.sprites = []
     self.clock = Clock()
     self.key_binds = {}
     self.launchers = []
     self.n_launchers = 5
     self.world.update()
     self.update()
     self.create_launchers()
示例#22
0
class PygameView():
    def __init__(self, model):
        init_pygame()
        self.screen = set_mode((400, 300))
        self.clock = Clock()
        self.model = model
         
    def display(self):
        self.screen.fill((0, 0, 64))  # dark blue
        [draw_rect(self.screen, (0, 191, 255), b) for b in model.borders]  # deep sky blue 
        [draw_rect(self.screen, (255, 192, 203), p) for p in model.pellets]  # shrimp
        for name, p in model.players.items():
            if name != model.myname:
                draw_rect(self.screen, (255, 0, 0), p)  # red
        if model.myname:
            draw_rect(self.screen, (0, 191, 255), model.players[model.myname])  # deep sky blue
           
        update_pygame_display()
           
        self.clock.tick(50)  # frames per second, independent of server frame rate
示例#23
0
    def __init__(self, game):
        OverlayedState.__init__(self, game)

        self.game = game
        self.minigame = self.game.minigame(self.game)
        self.elapsed_ms = 0
        self.duration = self.minigame.get_duration()
        self.timer = Clock()
        self.minigame.init()

        print('In minigame!')
示例#24
0
文件: game.py 项目: grisevg/RayCastPy
class Game:
    #Constants

    #Properties
    world = None
    player = None
    display = None
    controls = None
    clock = None
    is_running = False
    fps = -1



    def __init__(self):
        self.world = World()
        self.display = Display()
        self.controls = Controls()
        self.clock = Clock()
        self.fps = -1
        #self.is_running = False ?

    def init(self):
        self.display.initWindow()
        self.world.loadTextWorld('sample')
        self.display.initMinimap(self.world)
        self.player = Player(Vector(self.world.starting_point)+0.5)


    def startLoop(self):
        time_to_exit = False
        while not time_to_exit:
            self.clock.tick(30)
            self.fps = self.clock.get_fps()
            keys = self.controls.getInput()
            self.player.move(self.world, keys)
            self.display.draw(self)
            time_to_exit = keys[self.controls.ESCAPE]

    def close(self):
        self.display.close()
示例#25
0
文件: window.py 项目: vedun-z/pyrl
    def __init__(self):
        global main_window
        global surfaces

        self.SCREEN_UPDATE = generate_next_event_id()
        self.surfaces = []
        self.main_window = pygame.display.set_mode((800, 600), pygame.HWSURFACE)
        pygame.time.set_timer(self.SCREEN_UPDATE, 1000 / FIX_FPS)
        event_handler(self.SCREEN_UPDATE, self.redraw)
        event_handler(pygame.QUIT, lambda (event): sys.exit(0))

        self.clock = Clock()
示例#26
0
class App(object):
    def __init__(self):
        self.world = World(1024, 768, 0, -0.1)
        self.clock = Clock()
        self.update()
        self.waterfall = WaterFall(self.world, self.world.size_x/2, self.world.size_y/2, angle=0)

    def run(self):
        while True:
            self.dispatch_events()
            self.waterfall.update()
            self.update()

    def update(self):
        pygame.display.update()
        self.clock.tick(30)
        self.world.update()

    def dispatch_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT: sys.exit()
示例#27
0
    def poll(self):
        clock = Clock()

        poll()

        p = self.m.pellets[0]  # always target the first pellet
        b = self.m.mybox
        if p[0] > b[0]:
            cmd = 'right'
        elif p[0] + p[2] - 1< b[0]: # p[2] to avoid stuttering left-right movement
            cmd = 'left'
        elif p[1] > b[1]:
            cmd = 'down'
        else:
            cmd = 'up'

        msg = {'input': cmd}
        self.client.do_send(msg)

        # removes jittery movement
        clock.tick(30)
示例#28
0
文件: status.py 项目: tps12/Dorftris
    def __init__(self, game, player, prefs):
        self.game = game
        player.history.setcrier(self._eventcrier)
        self._prefs = prefs

        self.sprites = LayeredDirty()

        self.scale(self._prefs.font)

        self.clock = Clock()
        self.lasttime = None
        self.fps = deque()
示例#29
0
def start():
    pygame.init()
    pygame.display.set_caption("Monkey fever")
    pygame.mouse.set_visible(0)

    screen = pygame.display.set_mode((468, 60))
    clock = Clock()

    sounds = {"punch": load_sound("res/punch.wav"),
              "whiff": load_sound("res/whiff.wav")
              }

    q = quidditas.Quidditas()
    q.add_type_definitions(type_definitions.get_definitions())
    fist_proc = q.add_processor(processors.FistControlProcessor())
    punch_proc = q.add_processor(processors.PunchProcessor(sounds))
    chimp_proc = q.add_processor(processors.ChimpMovementProcessor())
    text_proc = q.add_processor(processors.DrawTextProcessor(screen))
    render_proc = q.add_processor(processors.RenderProcessor(screen))

    q.create_entity("chimp")
    q.create_entity("fist")

    running = 1
    while running:
        for event in pygame.event.get(pygame.QUIT):
            running = 0
        time = clock.get_time()
        q.update(time)
        fist_proc.update(time)
        punch_proc.update(time)
        chimp_proc.update(time)
        text_proc.update(time)
        render_proc.update(time)
        
        pygame.display.flip()

        clock.tick(60)
    pygame.quit()
    sys.exit()
示例#30
0
def main():
    bloques = []
    world = World(800,600)
    clock = Clock()
    for n in xrange(0, 240):
        x = 20 + (n%20) * 40
        y = 20 + (n/20) * 20 
        bloques.append(Bloque(x, y, world))

    barrita = Barrita(400, 500, world)
    pelota = Pelota(400, 300, world)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT: sys.exit()
        key = pygame.key.get_pressed()
        if key[pygame.K_LEFT]: barrita.mover_izq()
        if key[pygame.K_RIGHT]: barrita.mover_der()
        if key[pygame.K_UP]: pelota.collide()
        world.screen.fill((0,0,0))

        barrita.draw()
        pelota.draw()
        collided = True
        if collided and barrita.rect.colliderect(pelota.rect):
            pelota.collide()
            collided = False
        
        for c in bloques:
            if c.drawme:
                if collided and c.rect.colliderect(pelota.rect):
                    pelota.collide()
                    c.drawme = False
                    collided = False
                c.draw()

        collided = True

        pygame.display.update()
        clock.tick(50)
示例#31
0
class Gameloop:
    def __init__(self, display_size: Tuple[int, int], display_caption: str):
        self.call_update: Optional[Callable[[float], None]] = None
        self.call_draw: Optional[Callable[[None], None]] = None
        self.level: Optional['Level'] = None
        self.keyboard: Optional[Keyboard] = None

        pygame.init()
        self.display = pygame.display.set_mode(display_size)
        self.clock = Clock()
        pygame.display.set_caption(display_caption)

    def run(self):
        self.keyboard = Keyboard()
        while True:
            pygame.event.pump()
            self.keyboard.update()
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    return

            self.display.fill((0, 0, 0))

            dtms = self.clock.tick()
            dt = dtms / 1000.0

            self.call_update(dt)
            self.call_draw()
            pygame.display.update()

    def set_level(self, level: 'Level'):
        # hook callbacks
        self.call_update = level.update
        self.call_draw = level.draw

        # update static references
        level.game = self
        self.level = level

        # update static references for all components
        for ename, entity in level.entities.items():
            for comp in entity.components:
                comp.level = self.level
                comp.game = self

        # one time callback
        level.start()
示例#32
0
def main():
    window = create_window()
    # create game
    clock = Clock()
    small_color = 'red'
    small_radius = 30
    small_center = [50, 75]
    small_velocity = [1, 2]
    big_color = 'blue'
    big_radius = 40
    big_center = [200, 100]
    big_velocity = [2, 1]

    play_game(window, small_color, small_center, small_radius, small_velocity, big_color, big_center, big_radius,
              big_velocity, clock)
    window.close()
示例#33
0
    def __init__(self, name, current_theme, field=None):
        """
            Make game window
        """
        theme.set_theme_module(current_theme)

        if field:
            theme.FIELD_WIDTH, theme.FIELD_HEIGHT = field

        UserInterface.sprites_all = pygame.sprite.LayeredUpdates()
        UserInterface.sprites_by_layer = [
            pygame.sprite.LayeredUpdates(layer=i)
            for i in range(theme.MAX_LAYERS + 1)
        ]

        pygame.init()

        screenrect = Rect((0, 0), (theme.FIELD_WIDTH, theme.FIELD_HEIGHT))
        self.screen = set_mode(screenrect.size)
        set_caption(name)

        self.background = pygame.Surface(self.screen.get_size())  # и ее размер
        self.background = self.background.convert()
        try:
            image = load_image(theme.BACKGROUND_IMAGE, -1)
            self.background.blit(image, (0, 0))
        except (SystemExit, AttributeError):
            self.background.fill(theme.BACKGROUND_COLOR)  # заполняем цветом
        self.clear_screen()

        global clock
        clock = Clock()

        self.fps_meter = Fps(color=(255, 255, 0))
        self.game_over_indicator = GameOver()

        self._step = 0
        self.debug = False

        self.game_objects = {}
        self.ui_state = UserInput()

        self._debug = False
        self.child_conn = None

        self._game_over = False
示例#34
0
def main():
    global fire_grp, all_sprites
    pygame.init()

    screen = pygame.display.set_mode([screen_w, screen_h])

    all_sprites = pygame.sprite.Group()
    asteroids_grp = pygame.sprite.Group()
    fire_grp = pygame.sprite.Group()

    player_ship = StarShip()
    all_sprites.add(player_ship)
    all_sprites.add(fire_grp)
    all_sprites.add(asteroids_grp)

    all_sprites.add(player_ship)

    for i in range(5):
        ast = Astroid([screen_w, screen_h])
        asteroids_grp.add(ast)
        all_sprites.add(ast)

    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_q:
                    running = False
        if len(asteroids_grp) < 1:
            running = False

        screen.fill((0, 0, 0))
        move(all_sprites)
        draw(all_sprites, screen)

        if checkCollid(player_ship, asteroids_grp, fire_grp):
            running = False

        handle_keys(player_ship)
        pygame.display.update()

        Clock().tick(FPS)

    pygame.quit()
示例#35
0
 def __init__(self):
     self.clock: Clock = Clock()
     self.context: Context = Context()
     self.context.bar_keeper = BarKeeper(8, 4)
     bar_room = BarRoom()
     bar_room.sprites.append(
         self.context.bar_keeper
     )
     self.context.rooms[Context.BAR_ROOM] = bar_room
     store_room = StoreRoom()
     store_room.sprites.append(
         self.context.bar_keeper
     )
     self.context.rooms[Context.STORE_ROOM] = store_room
     self.context.set_room(Context.BAR_ROOM)
     self.context.sidebar = SideBar()
     self.render_context = RenderContext((1920, 1080))
     self.running = True
示例#36
0
 def on_bootstrap(
     self,
     window_size=None,
     display_mode_flags=None,
     fps=None,
     title=None,
 ):
     self.state.clock = Clock()
     self.state.is_running = False
     self.state.window_size = tuple(window_size or GAME_DEFAULTS.WINDOW_SIZE)
     self.state.fps = fps or GAME_DEFAULTS.FPS
     self.state.title = title or GAME_DEFAULTS.TITLE
     self.state.delta_t = None
     self.state.display_mode_flags = (
         reduce(lambda x, y: x | y, display_mode_flags)
         if display_mode_flags and len(display_mode_flags) > 1
         else (display_mode_flags or pg.DOUBLEBUF)
     )
     pg.init()
示例#37
0
def main():
    # Create game
    window = create_window()
    clock = Clock()

    # - Create small dot
    small_color = 'red'
    small_radius = 20
    small_center = [200,100]
    small_velocity = [1, 2]
    # - Create big dot
    big_color = 'blue'
    big_radius = 40
    big_center = [200,100]
    big_velocity = [2, 1]

    play_game(window, big_color, big_center, big_radius, big_velocity, 
             small_color, small_center, small_radius, small_velocity, clock)
    window.close()
示例#38
0
    def update(self):
        timer = Clock()
        self.image.fill(COLOR)
        self.anim.blit(self.image, (0, 0))

        if self.up:
            self.yvel = -JUMP
            self.up = False
            self.wasup = True
        elif not self.wasup:
            self.yvel += GRAVITY
        else:
            self.wasup = False
        #pygame.time.delay(30)
        self.rect.y += self.yvel
        self.rect.x += SPEED
        if (self.rect.y < 0):
            self.rect.y = 0
        if self.rect.y >= 400:
            self.end = True
示例#39
0
    def __init__(self, row=4, col=19, port=33460):
        factor_sim = 40
        self.clock = Clock()
        self.model = Model(row, col)
        self.sim_width = self.model.width * factor_sim
        self.sim_height = self.model.height * factor_sim
        self.border_thickness = 1
        self.cell_height = factor_sim
        self.cell_width = factor_sim
        self.connection = None
        self.channel = None
        self.display = None
        self.running = False

        # Create the Window, load its title, icon
        environ['SDL_VIDEO_CENTERED'] = '1'

        self.display = display.set_mode((self.sim_width, self.sim_height), 0,
                                        32)
        display.set_caption("Arbalet Frontage simulator", "Arbalet")
示例#40
0
class Time:
    __slots__ = ()
    __clock = Clock()
    __last_tick_time = 0
    __delta_time = 0
    time_scale = 1

    @staticmethod
    def tick() -> None:
        cur_time = time()
        Time.__delta_time = cur_time - Time.__last_tick_time
        Time.__last_tick_time = cur_time
        Time.__clock.tick(TARGET_FPS)

    @staticmethod
    def get_delta_time() -> float:
        return Time.__delta_time * Time.time_scale

    @staticmethod
    def get_fps() -> float:
        return 1 / Time.__delta_time if Time.__delta_time != 0 else 1 / TARGET_FPS
示例#41
0
    def setup(self):
        PyGameInit()
        set_caption("Pocong runner")
        self.screen = set_mode(self.rect.size)

        self.load_all_images()
        self.base_position = [0, self.rect.height * 0.95]
        self.base_diff = self.STONE_IMAGE.get_width(
        ) - self.BACKGROUND_IMAGE.get_width()

        self.player = Player(self.PLAYER_IMAGE, [60, 450])

        self.keris_diff = self.KERIS_IMAGE.get_width(
        ) - self.BACKGROUND_IMAGE.get_width()
        self.kerisGroup = PyGameSpriteGroup()
        for idx in range(random.randint(1, 2)):
            keris_position = [
                self.rect.width + random.randint(10, 200),
                self.rect.height * 0.80
            ]
            keris = Keris(self.KERIS_IMAGE, keris_position)
            keris.rect.bottom += random.randint(100, self.rect.height - 120)
            self.kerisGroup.add(keris)

        self.bambu_diff = self.BAMBU_IMAGE.get_width(
        ) - self.BACKGROUND_IMAGE.get_width()

        self.bambugroup = PyGameSpriteGroup()
        for x in range(random.randint(1, 3)):
            self.bambuPosition = [
                random.randint(self.rect.width, 1000), self.rect.height * 0.80
            ]
            bambuEnemy = Bambu(self.BAMBU_IMAGE, self.bambuPosition)
            self.bambugroup.add(bambuEnemy)

        self.health = Health(self.HEALTHBAR_IMAGE, self.HEALTH_IMAGE,
                             self.rect)

        self.score = Score(SCORE_FONT)
        self.clock = PyGameclock()
示例#42
0
class GameServer(Server):
    def __init__(self, host='0.0.0.0', port=9012, max_connection=4):
        Server.__init__(self, host, port, max_connection)
        self.players = {}
        self.clock = Clock()
        self.delta = 0
        self.fps = 60
        self.delay = 1000 / self.fps

    def accepting(self, socket):
        self.players[socket] = Player()

    def recieving(self, socket, data):
        if data.startwith(JUMP):
            self.players[socket].do_jump()
        elif data.startwith(MOVE_LEFT):
            self.players[socket].move_left()
        elif data.startwith(MOVE_RIGHT):
            self.players[socket].move_right()

    def disconnect(self, socket):
        pass

    def broadcasting(self, socket):
        pass

    def send(self, data):
        for player in self.players:
            player.send_data.put(data)

    def server_loop(self):

        for player in self.players:
            player.update(self.delta, self.send)

        self.delta = self.clock.tick(self.fps)
示例#43
0
    def start(self):
        pygame.init()

        screen = display.set_mode(self.size)
        display.set_caption(self.title)
        clock = Clock()

        running = True
        clock.tick(self.frame)
        __import__('time').sleep(5)
        while running:
            clock.tick(self.frame)

            for event in events.get():
                if event.type == pygame.QUIT:
                    running = False

            self.draw(screen)
            display.flip()

        pygame.quit()
示例#44
0
    def start_manip_update(self, manipulation):
        util.post_piece_manip_ev(manipulation)

        if manipulation == g_const.PIECE_MANIP_FALL_DOWN_ID:
            self.start_world_update()
            return  # reset world_manip ticks, but don't change current_manip state

        # if manipulation is rotation or strafing
        elif manipulation >= g_const.PIECE_MANIP_LEFT_ID and manipulation <= g_const.PIECE_MANIP_CLOCKWISE_ID:
            if manipulation <= g_const.PIECE_MANIP_RIGHT_ID:  # if manipulation is strafing
                if g_const.continue_strafe_while_key_held:
                    self.is_strafe_rot = True

                    self.strafe_rot_manip_clock = Clock()
                    self.strafe_rot_secs = 0  # reset timer
                else:
                    return  # don't change current_manip state if action is not repeated

            else:  # if manipulation is rotating
                if g_const.continue_rot_while_key_held:
                    self.is_strafe_rot = True

                    self.strafe_rot_manip_clock = Clock()
                    self.strafe_rot_secs = 0
                else:
                    return

        else:  # down
            if g_const.continue_down_while_key_held:
                self.is_world_down = False  # not falling to world ticks

                self.move_down_manip_clock = Clock()
                self.move_down_secs = 0
            else:
                return

        self.current_manip = manipulation
示例#45
0
class Game:
    def __init__(self):

        self._window = Window('Poke the Dots', 500, 400)
        self._adjust_window()
        self._frame_rate = 90  # larger is faster game
        self._close_selected = False
        self._clock = Clock()
        self._small_dot = Dot('red', [50, 75], 30, [1, 2], self._window)
        self._big_dot = Dot('blue', [200, 100], 40, [2, 1], self._window)
        self._small_dot.randomize()
        self._big_dot.randomize()
        self._score = 0
        self._continue_game = True

    def _adjust_window(self):

        self._window.set_font_name('ariel')
        self._window.set_font_size(64)
        self._window.set_font_color('white')
        self._window.set_bg_color('black')

    def play(self):

        while not self._close_selected:
            # play frame
            self.handle_events()
            self.draw()
            self.update()
        self._window.close()

    def handle_events(self):

        event_list = get_events()
        for event in event_list:
            self.handle_one_event(event)

    def handle_one_event(self, event):

        if event.type == QUIT:
            self._close_selected = True
        elif self._continue_game and event.type == MOUSEBUTTONUP:
            self.handle_mouse_up(event)

    def handle_mouse_up(self, event):

        self._small_dot.randomize()
        self._big_dot.randomize()

    def draw(self):

        self._window.clear()
        self.draw_score()
        self._small_dot.draw()
        self._big_dot.draw()
        if not self._continue_game:  # perform game over actions
            self.draw_game_over()
        self._window.update()

    def update(self):

        if self._continue_game:
            # update during game
            self._small_dot.move()
            self._big_dot.move()
            self._score = get_ticks() // 1000
        self._clock.tick(self._frame_rate)

        # decide continue
        if self._small_dot.intersects(self._big_dot):
            self._continue_game = False

    def draw_game_over(self):

        string = 'GAME OVER'
        font_color = self._small_dot.get_color()
        bg_color = self._big_dot.get_color()
        original_font_color = self._window.get_font_color()
        original_bg_color = self._window.get_bg_color()
        self._window.set_font_color(font_color)
        self._window.set_bg_color(bg_color)
        height = self._window.get_height() - self._window.get_font_height()
        self._window.draw_string(string, 0, height)
        self._window.set_font_color(original_font_color)
        self._window.set_bg_color(original_bg_color)

    def draw_score(self):

        string = 'Score: ' + str(self._score)
        self._window.draw_string(string, 0, 0)
示例#46
0
    def serve(self):
        clock = Clock()
        while True:
            clock.tick(60)

            # check network
            events = self.get_events()
            if events:
                try:
                    for event in events:
                        # Update the teams on JOIN and EXIT
                        if event.type == 'JOIN':
                            if event.group == 'ctf:dropflag':
                                for team, flag in self.flags.items():
                                    if flag['owner'] == '':
                                        self.node.shout(
                                            'ctf:dropflag',
                                            bson.dumps({
                                                'x': flag['x'],
                                                'y': flag['y'],
                                                'team': team
                                            }))
                            elif event.group == 'ctf:gotflag':
                                for team, flag in self.flags.items():
                                    if flag['owner'] != '':
                                        self.node.shout(
                                            'ctf:gotflag',
                                            bson.dumps({
                                                'uuid': flag['owner'],
                                                'team': team
                                            }))
                            elif event.group == 'ctf:teams':
                                self.players.set(self.node.peers())
                                self.set_teams()
                                place = self.get_team_from_uuid(
                                    event.peer_uuid)
                                pos = self.level.get_place(place)
                                self.node.whisper(
                                    event.peer_uuid,
                                    bson.dumps({
                                        'type': 'teleport',
                                        'x': pos[0],
                                        'y': pos[1]
                                    }))
                        elif event.type == 'EXIT':
                            for team, flag in self.flags.items():
                                if flag['owner'] == str(event.peer_uuid):
                                    # flag owner is leaving, drop
                                    player = self.players.get(event.peer_uuid)
                                    flag['x'] = player.x
                                    flag['y'] = player.y
                                    flag['owner'] = ''
                                    self.node.shout(
                                        'ctf:dropflag',
                                        bson.dumps({
                                            'x': flag['x'],
                                            'y': flag['y'],
                                            'team': team
                                        }))
                            self.players.set(self.node.peers())
                            self.set_teams()
                        elif event.type == 'SHOUT':
                            if event.group == "world:position":
                                new_position = bson.loads(event.msg[0])
                                network_player = self.players.get(
                                    event.peer_uuid)
                                network_player.set_position(new_position)

                                # check if flag has been captured
                                for team, flag in self.flags.items():
                                    if flag['owner'] != str(event.peer_uuid):
                                        continue
                                    tile = self.level.get_tile(
                                        new_position['x'], new_position['y'])
                                    if tile == TileType.RED_BLOCK and team == 'blue':
                                        # TODO: blue's flag has been captured
                                        spawn = Place.BLUE_SPAWN
                                    elif tile == TileType.BLUE_BLOCK and team == 'red':
                                        # TODO: red's flag has been captured
                                        spawn = Place.RED_SPAWN
                                    else:
                                        continue
                                    position = self.level.get_place(spawn)
                                    flag['x'] = position[0]
                                    flag['y'] = position[1]
                                    flag['owner'] = ''
                                    self.node.shout(
                                        'ctf:dropflag',
                                        bson.dumps({
                                            'x': flag['x'],
                                            'y': flag['y'],
                                            'team': team
                                        }))
                            if event.group == 'ctf:gotflags':
                                flag_info = bson.loads(event.msg[0])
                                self.set_flags(flag_info)
                        elif event.type == 'WHISPER':
                            msg = bson.loads(event.msg[0])
                            network_player = self.players.get(event.peer_uuid)
                            if msg['type'] == 'death_report':
                                player = self.players.get(event.peer_uuid)
                                previously_owned_flag = None
                                if self.flags['blue']['owner'] == str(
                                        event.peer_uuid):
                                    previously_owned_flag = 'blue'
                                elif self.flags['red']['owner'] == str(
                                        event.peer_uuid):
                                    previously_owned_flag = 'red'

                                if previously_owned_flag:
                                    flag = self.flags[previously_owned_flag]
                                    flag['owner'] = ''
                                    self.node.shout(
                                        'ctf:dropflag',
                                        bson.dumps({
                                            'x':
                                            player.x,
                                            'y':
                                            player.y,
                                            'team':
                                            previously_owned_flag
                                        }))

                                place = self.get_team_from_uuid(
                                    event.peer_uuid)
                                pos = self.level.get_place(place)
                                self.node.whisper(
                                    event.peer_uuid,
                                    bson.dumps({
                                        'type': 'teleport',
                                        'x': pos[0],
                                        'y': pos[1]
                                    }))
                                player.x = pos[0]
                                player.y = pos[1]

                except Exception as e:
                    print(e)
                    import traceback
                    print(traceback.format_exc())
                    pass

            for team, flag in self.flags.items():
                if flag["owner"] != '': continue
                for uuid, player in self.players.players.items():
                    if flag['x'] == player.x and flag['y'] == player.y:
                        team_place = self.get_team_from_uuid(uuid)
                        pos = self.level.get_place(team_place)
                        if team == 'red' and team_place == Place.RED_SPAWN or team == 'blue' and team_place == Place.BLUE_SPAWN:
                            if player.x == pos[0] and player.y == pos[1]:
                                continue

                            self.node.shout(
                                'ctf:dropflag',
                                bson.dumps({
                                    'x': pos[0],
                                    'y': pos[1],
                                    'team': team
                                }))
                        else:
                            flag["owner"] = uuid
                            self.node.shout(
                                'ctf:gotflag',
                                bson.dumps({
                                    'uuid': uuid,
                                    'team': team
                                }))
                            break
示例#47
0
class Visualization:
    def __init__(self, engine):
        self.running = True
        self.display_surf = None
        self.size = self.width, self.height = 800, 600
        self.center = self.width / 2, self.height / 2
        self.clock = Clock()
        self.font = None
        self.engine = engine
        self.engine.on_simulation_step = self.build_scene
        self.scene = []
        self.target_fps = 60.0
        self.focused_car = 0
        self.metadata = []

    def on_init(self):
        pygame.init()
        pygame.font.init()
        self.display_surf = pygame.display.set_mode(
            self.size, pygame.HWSURFACE | pygame.DOUBLEBUF)
        self.running = True
        self.font = pygame.font.Font(pygame.font.get_default_font(), 12)

        self.sprites = [
            Sprite("images/blue-small.png"),
            Sprite("images/orange-small.png"),
        ]
        self.engine.restart()

    def build_scene(self, engine):
        self.scene = []
        self.metadata = []

        # if there are no cars break
        if not self.engine.cars or len(self.engine.cars) == 0:
            self.scene.append((self.center, 0, self.sprites[0]))
            return

        if self.focused_car >= len(self.engine.cars):
            self.focused_car = 0

        center = self.engine.cars[self.focused_car].position

        for idx, car in enumerate(self.engine.cars):
            car_pos = self.center - (center - car.position) * meter2pixel

            self.scene.append(
                (car_pos, car._angle, self.sprites[idx % len(self.sprites)]))
            self.metadata.append(((int(car_pos.x), int(car_pos.y)), 0))

            # for v in car.vertices():
            #     relpos = self.center - (center-v) * meter2pixel
            #     self.metadata.append((relpos.astype(np.int), 1))
            if car == self.engine.cars[self.focused_car]:
                for s in car._sensors:
                    if isinstance(s, LidarSensor):
                        for v in s._intersections:
                            if v is not None:
                                relpos = self.center - (center -
                                                        v) * meter2pixel
                                self.metadata.append(
                                    (relpos.astype(np.int), 1))

    def on_event(self, event):
        if event.type == pygame.QUIT:
            self.running = False
        if event.type == pygame.KEYDOWN:
            pressed = pygame.key.get_pressed()
            if pressed[pygame.K_ESCAPE]:
                self.running = False
            if pressed[pygame.K_SPACE]:
                if self.engine.is_running:
                    self.engine.interrupt()
                else:
                    self.engine.run()
            if pressed[pygame.K_x]:
                self.engine.restart()

            if pressed[pygame.K_TAB]:
                self.move_focus()

    def move_focus(self):
        self.focused_car += 1
        self.build_scene(self.engine)

    def on_loop(self):
        pass

    def on_render(self):
        self.display_surf.fill(pygame.Color(0, 0, 0))
        for pos, angle, sprite in self.scene:
            rotated = pygame.transform.rotate(sprite.image, angle)
            rect = rotated.get_rect()
            relpos = pos - (rect.width / 2, rect.height / 2)
            self.display_surf.blit(rotated, relpos)

        for pos, typ in self.metadata:
            if typ == 0:
                pygame.draw.circle(self.display_surf, (255, 0, 0), pos, 3)
            if typ == 1:
                pygame.draw.circle(self.display_surf, (0, 255, 0), pos, 3)

        # FPS writing
        fps_surface = self.font.render(
            "{:.0f} FPS".format(self.clock.get_fps()), True, (255, 255, 255))
        self.display_surf.blit(
            fps_surface,
            (self.display_surf.get_width() - fps_surface.get_width(), 0))

        # Simulation steps writing
        step_surface = self.font.render(
            "{} steps".format(self.engine.step_count), True, (255, 255, 255))
        self.display_surf.blit(
            step_surface,
            (self.display_surf.get_width() - step_surface.get_width(),
             fps_surface.get_height() + 5))

        # Simulation control keys
        lines = '''SPACE - start/stop simulation
        X - restart simulation
        TAB - move focus
        ESC - quit'''

        y = 5
        for line in lines.split('\n'):
            text = self.font.render(line.strip(), True, (255, 255, 255))
            self.display_surf.blit(text, (5, y))
            y += 5 + text.get_height()

        pygame.display.flip()
        self.clock.tick(self.target_fps)

    def on_cleanup(self):
        pygame.quit()

    def on_execute(self):
        if self.on_init() == False:
            self.running = False

        while (self.running):
            for event in pygame.event.get():
                self.on_event(event)
            self.on_loop()
            self.on_render()
        self.on_cleanup()
示例#48
0
class stateMachine(object):

  def __init__(self, *args):

    self.states = {}
    self.states['null'] = self.nullState = simpleStateObject()
    self.activeName = 'null'
    self.running = False
    self.globals = {}
    self.previous = None
    self.lastTickState = None
    self.next = 'init'
    self.flags = set() # tmp
    self.autoSwitch = {'null': 'init', 'quit': 'null'}

    self.clock = Clock()

  def quit(self):

    self.running = False
    if 'quit' in self.states:
      self._next('quit')

  def state(self, stateName, stateType='simple'):

    def registerState(f):

      if stateType == 'simple':
        self.states[stateName] = simpleStateObject(f)

      try:

        thisState = self.states[stateName]

        if stateType == 'enter':
          thisState.enter = f
          self.states[stateName]._strSet.add('enter')
        elif stateType == 'tick':
          thisState.tick = f
          self.states[stateName]._strSet.add('tick')
        elif stateType == 'exit':
          thisState.exit = f
          self.states[stateName]._strSet.add('exit')

      except KeyError:

        if stateType == 'enter':
          self.states[stateName] = stateObject(f)
        elif stateType == 'tick':
          self.states[stateName] = stateObject(None, f, None)
        elif stateType == 'exit':
          self.states[stateName] = stateObject(None, None, f)

      return f

    return registerState

  def addState(self, name, enter=None, tick=None, exit=None):

    self.states[name] = stateObject(enter, tick, exit)

  def removeState(self, name):

    del self.states[name]

  def switch(self, newState):

    self.next = newState

  def _next(self, newState):

    active = self.states[self.activeName]

    if not isinstance(active, simpleStateObject):
      active.exit()
      print self.activeName,
    else:
      print '...',

    self.previous = self.activeName
    if isinstance(active, stateObject):
      self.lastTickState = self.activeName
    self.activeName = newState
    active = self.states[self.activeName]

    if not isinstance(active, simpleStateObject):

      print '-->', self.activeName, active
      active.enter()
      try:
        self.next = self.autoSwitch[self.activeName]
      except KeyError:
        self.next = self.activeName

    else:

      print '-->', self.activeName, active, '...'
      active.method()
      if self.next is None or self.next == self.activeName:
        try:
          self.next = self.autoSwitch[self.activeName]
        except KeyError:
          print ' Error: no switch parameter for simple state:', self.activeName
          raise

      self._next(self.next)

  def run(self):

    import game

    self.running = True

    game.msg.handler('state')(self.switch)

    if self.next is not None and self.next != self.activeName:
      self._next(self.next)

    while self.running and not peek(QUIT):

      self.states[self.activeName].tick()

      if self.next is not None and self.next != self.activeName:
        self._next(self.next)

      game.msg('display::update')
      game.msg.process()
      self.clock.tick(game.fps)

    self.quit()
示例#49
0
    def blit(self, surface):
        self.update()
        draw.circle(surface, self.color, (int(self.x), int(self.y)), int(self.radius+2), 1)

font.init()
ff = font.Font(None, int(W/100*12.5))
lable_x_positions = (('PRESS', int(W / 100 * 34.6875)),
                     ('ESC', int(W / 100 * 40.625)),
                     ('FOR', int(W / 100 * 40.625)),
                     ('EXIT', int(W / 100 * 38.75)))
lable_start_y = int(W / 100 * 9.375)

mouse.set_visible(False)

square_list = []
timer = Clock()
done = True
while done:
    for e in event.get():
        if e.type == KEYDOWN:
            if e.key == K_ESCAPE:
                done = False

    screen.fill((30, 30, 70))

    # draw lables
    for lable in lable_x_positions:
        screen.blit(ff.render(lable[0], 1, (50, 50, 70)), (lable[1], lable_start_y * (lable_x_positions.index(lable) + 1)))

    if len(square_list) < 500:
        for i in range(randint(1, 5)):
示例#50
0
class App:
	'''
	Base application
	'''

	def __init__(self):
		self.surface: Surface = set_mode((settings.width, settings.height))
		self.clock = Clock()
		self.running = True

		self.buttons = []
		self.sliders = []
		self.components = []

	def __call__(self):
		while self.running:
			for e in get_events():
				event: EventType = e
				if event.type == QUIT_EVENT:
					self.running = False
				else:
					self.dispatch(event.type, event.dict)

			self.surface.fill(settings.colour_scheme.background)

			[c.render() for c in self.components]
			[b.render() for b in self.buttons]
			[s.render() for s in self.sliders]

			update_display()
			self.clock.tick(60)

		pg_quit()

	def __iadd__(self, other):
		print(f'Attempting to mount component: {other}')

		if issubclass(type(other), ComponentBase):
			other.mount(self.surface)

			if issubclass(type(other), ButtonBase):
				self.buttons.append(other)
			elif isinstance(other, Slider):
				self.sliders.append(other)
			else:
				self.components.append(other)

		else:
			raise NotImplementedError(f'Cannot add object of type {type(other)} to an app')

		return self

	def __isub__(self, other):
		if issubclass(type(other), ComponentBase):
			if issubclass(type(other), ButtonBase):
				self.buttons.remove(other)
			elif isinstance(other, Slider):
				self.sliders.remove(other)
			else:
				self.components.remove(other)

		return self

	def dispatch(self, event_type: Event, event_data: Dict):
		if event_type in (MOUSEBUTTONDOWN_EVENT, MOUSEBUTTONUP_EVENT,):
			direction = 0 if event_type == MOUSEBUTTONUP_EVENT else 1
			x, y = event_data['pos']
			button = event_data['button']
			
			if button == 1:
				[b(x, y, direction) for b in self.buttons]
				[s(x, y, direction) for s in self.sliders]

		elif event_type == MOUSEMOTION_EVENT:
			button_pressed = event_data['buttons'][0] == 1
			x, y = event_data['pos']

			if button_pressed:
				[s(x, y, 2) for s in self.sliders]
示例#51
0
    def run(self):

        self.prepare_borders()

        player_one_side = 'left'
        player_two_side = 'right'
        player_one_speed = self.window.game.human_speed
        player_two_speed = self.window.game.human_speed
        player_one_engine = self.player_engine(left_keys)
        player_two_engine = self.player_engine(right_keys)

        if self.window.game.game_mode == 1:
            player_one_side = self.window.game_side()
            if player_one_side == 'left':
                player_two_side = 'right'
            else:
                player_two_side = 'left'
            player_one_speed = self.window.game.human_speed
            player_two_speed = self.window.game.computer_speed
            player_two_engine = self.player_engine(())
        elif self.window.game.game_mode == 0:
            player_one_speed = self.window.game.computer_speed
            player_two_speed = self.window.game.computer_speed
            player_one_engine = self.player_engine(())
            player_two_engine = self.player_engine(())

        player_one = Player('human', player_one_side, player_one_engine, player_one_speed)
        player_two = Player('computer', player_two_side, player_two_engine, player_two_speed)

        self.window.score_manager = ScoreManager(
            match=(3, POINTS_TO_WIN),
            player_one=player_one,
            player_two=player_two
        )
        self.window.score_board = ScoreBoard(self.window.score_manager)

        player_one.pad.borders = self.borders
        player_two.pad.borders = self.borders

        self.all_sprites.add(player_one.goal)
        self.all_sprites.add(player_two.goal)

        self.goals.add(player_one.goal)
        self.goals.add(player_two.goal)

        self.all_sprites.add(player_one.pad)
        self.all_sprites.add(player_two.pad)

        self.pads.add(player_one.pad)
        self.pads.add(player_two.pad)

        self.ball.pads = self.pads
        self.ball.borders = self.borders
        self.ball.goals = self.goals

        # Game loop
        clock = Clock()
        pygame.time.set_timer(COMPUTER_MOVES_EVENT, COMPUTER_MOVES_TIMER_MS)
        end_of_match = False

        while not end_of_match:

            end_of_set = False
            while not end_of_set:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        end_of_match = True
                        break
                    player_one.handle(event)
                    player_two.handle(event)

                pygame.event.pump()
                self.all_sprites.update()

                # Manage goals
                self.ball.manage_goals()

                # Game draw
                self.window.screen.fill(green)
                self.window.score_board.draw(self)
                self.all_sprites.draw(self.window.screen)

                # Screen update
                pygame.display.flip()

                if self.window.score_manager.end_of_set():
                    end_of_set = True
                    self.window.score_manager.end_set()
                    self.window.score_manager.new_set()

                    if self.window.score_manager.end_of_game():
                        end_of_match = True

                clock.tick(FPS)
        return 0
示例#52
0
from background import Background
from placar import Placar
from som import Som
from player import Player
from enemy import Wooden, Steam
from controle import Controle
from grupos import (
    grupo_player,
    grupo_enemy,
    grupo_objets_player,
    grupo_objets_enemy,
    All_sprites,
)

tick_enemies = 0
clock = Clock()
background = Background()
som = Som()
placar = Placar()
controle = Controle()
enemylist = [Wooden, Steam]
paralaxe = 0
running = True
stopgame = True
# som.play()

while running:

    clock.tick(25)

    screen.fill((255, 255, 255))
示例#53
0
文件: maze.py 项目: impal0r/zack
            x = 0
            grid_ptr += 15
            sq_x += 1
            refresh_grid()
        else:
            win()
    elif not FIELD[grid_ptr + x + 1] & 1 << y:
        show_col(x, FIELD[grid_ptr + x])
        x += 1
        abs_x += 1
    else:
        changed = False


reset()
clock = Clock()

#---------------------------------- MAINLOOP -------------------------------

while True:
    changed = False
    for event in pygame.event.get():
        if event.type == QUIT:
            quit_()

        elif event.type == KEYDOWN:
            if event.key == K_q:
                quit_()
            if won:
                reset()
            elif event.key == K_w:
示例#54
0
class Loop:
    def __init__(self, util: Util, cfg: Config, sfx: SfxHolder, txt: Text,
                 drawer: Drawer):
        self.util = util
        self.cfg = cfg
        self.sfx = sfx
        self.txt = txt
        self.drawer = drawer
        self.clock = Clock()

    def main(self, screen, game: Game) -> bool:
        # Dump first tick to ignore past
        self.clock.tick(self.cfg.frames_per_second)

        while True:
            # Get change in time
            dt = self.clock.tick(self.cfg.frames_per_second)

            # Loop over events (quit, key down, key up)
            for event in pg.event.get():
                if user_quit(event):
                    return False
                elif event.type == pg.KEYDOWN:
                    if event.key in self.cfg.all_keys:
                        game.press_key(event.key)
                elif event.type == pg.KEYUP:
                    if event.key in self.cfg.all_keys:
                        game.release_key(event.key)

            # Move and draw game (with possible paused screen and fps)
            if not game.paused:
                game.move(dt)
            if not game.game_over:
                self.drawer.draw_game(screen, game, dt)
            if game.paused:
                self.drawer.draw_paused_overlay(screen)
            if self.cfg.draw_fps:
                self.drawer.draw_fps(screen, self.clock.get_fps())

            # Update display
            pg.display.update()

            # Break if game no longer running
            if game.game_over:
                return True

    def game_over(self, screen, game: Game, scores: ScoresList) -> bool:
        score_saved = False  # not saved yet
        self.sfx.game_over.play()  # play audio

        i = 0
        while True:
            # Fade-in game over screen
            if i < 256:
                pg.event.get()  # dummy get
                self.drawer.draw_game(screen, game, 0)  # draw game
                self.drawer.draw_game_over_overlay(
                    screen, i, score_saved)  # fade-in game over screen
                self.clock.tick(60)  # slow-down the fade-in

                # Refresh screen
                pg.display.flip()
                i += 1

            # Check for quit or restart events
            for event in pg.event.get():
                if user_quit(event):
                    return False
                elif event.type == pg.MOUSEBUTTONDOWN:
                    if self.txt.restart_rect.collidepoint(*event.pos):
                        return True
                    elif not score_saved and \
                            self.txt.save_score_rect.collidepoint(*event.pos):
                        for score in game.get_scores():
                            scores.add_score(score)
                        scores.write()
                        score_saved = True
示例#55
0
def fast_loop(print_lock, state_vector_lock, imu, enc, iss, oss, rss, path,
              ctrl):
    clock = Clock()
    imu_a_x = 0
    imu_a_y = 0
    p = path.pop(0)
    with print_lock:
        print(p)
    start = time.time()
    global x
    global P

    while True:
        period = time.time() - start
        actual_freq = 1 / period
        #		with print_lock:
        #			print("{}Hz".format(actual_freq))
        start = time.time()

        dist_to_point = sqrt((x[0][0] - p[0])**2 + (x[2][0] - p[1])**2)
        if dist_to_point < dist_thresh:
            if path:
                p = path.pop(0)  # get the next point on the path
                with print_lock:
                    print(p)
            else:
                with print_lock:
                    print("Reached Goal")
                    ctrl.move('stop')
                    break

        phi = ctrl.get_phi(x, p)
        #		with print_lock:
        #			print(np.degrees(phi))
        a, b = ctrl.p_control(phi)
        #		with print_lock:
        #			print("A: {}, B: {}".format(a, b))

        # State Estimation Code
        #		imu_theta = imu.euler[0]
        #		z_i = iss.measure_state(x, imu_a_x, imu_a_y, imu_theta)
        #		imu_a_x = imu.linear_acceleration[2]
        #		imu_a_y = imu.linear_acceleration[1]

        l_ticks, r_ticks = enc.get_ticks()  # ticks = encoder counts
        l_ticks, r_ticks = oss.clean_input(l_ticks,
                                           r_ticks)  # removes noise if present
        z_o = oss.measure_state(x, l_ticks, r_ticks)

        #Kalman Filter
        # State Propagation
        with state_vector_lock:
            x, P = kalman.predict(x, P, rss.A,
                                  rss.Q)  # can pass B, u as if you want...

        # IMU Update


#		with state_vector_lock:
#			x, P = kalman.update(x, P, z_i, iss.H, iss.R)

# Odometry Update
        with state_vector_lock:
            x, P = kalman.update(x, P, z_o, oss.H, oss.R)
            #			with print_lock:
            #				print(x)
            xx = x[0][0]
            xy = x[2][0]
            xt = x[4][0]
            log_data(write_file, [xx, xy, xt])

        # Path correction control code
        #with path_planning_lock:
        # run control code based on position estimate and current planned path
        # does this need to run every loop?

        # Actuate motors
        #rc_robot.actuate(args)

        clock.tick(
            freq
        )  # limits the loop to "freq" fps - stops unnecessary processing power being used
示例#56
0
class Game:
    """Object handling main loop and IO."""
    def __init__(self, config):
        pygame.mixer.pre_init(frequency=44100)
        pygame.init()
        self.headless = config.headless and config.server
        if config.muted or self.headless:
            pygame.mixer.quit()
        else:
            pygame.mixer.music.load(NOISE if config.space else MUSIC)
            pygame.mixer.music.set_volume(config.musicvol)
            pygame.mixer.music.play(-1)
        pygame.display.set_icon(ICON)

        if config.server:
            self.server = socket()
            self.server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
            self.server.bind((config.host, config.port))
            self.server.listen(1)
            print('Socket server is listening on {}:{}'.format(config.host,
                                                               config.port))
            self.timeout = config.timeout
            self.sockinp = 0, 0, -pi * 3 / 4, 0, 0  # freeze and point to NW
        else:
            self.server = self.sockinp = None

        # self.fps is a float to make sure floordiv won't be used in Python 2
        self.max_fps, self.fps = config.max_fps, float(config.max_fps)
        self.musicvol = config.musicvol
        self.key, self.mouse = config.key, config.mouse
        self.maze = Maze(config.max_fps, config.size, config.headless,
                         config.export_dir, 1000.0 / config.export_rate)
        self.hero = self.maze.hero
        self.clock, self.paused = Clock(), False

    def __enter__(self): return self

    def export_txt(self):
        """Export maze data to string."""
        export = self.maze.update_export(forced=True)
        return '{} {} {} {}\n{}{}{}{}'.format(
            len(export['m']), len(export['e']), len(export['b']), export['s'],
            ''.join(row + '\n' for row in export['m']), join(export['h']),
            ''.join(map(join, export['e'])), ''.join(map(join, export['b'])))

    def update(self):
        """Draw and handle meta events on Pygame window.

        Return False if QUIT event is captured, True otherwise.
        """
        events = pygame.event.get()
        for event in events:
            if event.type == QUIT:
                return False
            elif event.type == VIDEORESIZE:
                self.maze.resize((event.w, event.h))
            elif event.type == KEYDOWN:
                if event.key == self.key['mute']:
                    if pygame.mixer.get_init() is None:
                        pygame.mixer.init(frequency=44100)
                        pygame.mixer.music.load(MUSIC)
                        pygame.mixer.music.set_volume(self.musicvol)
                        pygame.mixer.music.play(-1)
                    else:
                        pygame.mixer.quit()
                elif not self.server:
                    if event.key == self.key['new']:
                        self.maze.reinit()
                    elif event.key == self.key['pause'] and not self.hero.dead:
                        self.paused ^= True

        # Compare current FPS with the average of the last 10 frames
        new_fps = self.clock.get_fps()
        if new_fps < self.fps:
            self.fps -= 1
        elif self.fps < self.max_fps and not self.paused:
            self.fps += 5
        if not self.paused: self.maze.update(self.fps)
        if not self.headless: self.maze.draw()
        self.clock.tick(self.fps)
        return True

    def move(self, x, y):
        """Command the hero to move faster in the given direction."""
        maze = self.maze
        velocity = maze.distance * HERO_SPEED / self.fps
        accel = velocity * HERO_SPEED / self.fps

        if x == y == 0:
            maze.set_step()
            x, y = maze.stepx, maze.stepy
        else:
            x, y = -x, -y   # or move the maze in the reverse direction

        if maze.next_move > 0 or not x:
            maze.vx -= sign(maze.vx) * accel
            if abs(maze.vx) < accel * 2: maze.vx = 0.0
        elif x * maze.vx < 0:
            maze.vx += x * 2 * accel
        else:
            maze.vx += x * accel
            if abs(maze.vx) > velocity: maze.vx = x * velocity

        if maze.next_move > 0 or not y:
            maze.vy -= sign(maze.vy) * accel
            if abs(maze.vy) < accel * 2: maze.vy = 0.0
        elif y * maze.vy < 0:
            maze.vy += y * 2 * accel
        else:
            maze.vy += y * accel
            if abs(maze.vy) > velocity: maze.vy = y * velocity

    def control(self, x, y, angle, firing, slashing):
        """Control how the hero move and attack."""
        self.move(x, y)
        self.hero.update_angle(angle)
        self.hero.firing = firing
        self.hero.slashing = slashing

    def remote_control(self):
        """Handle remote control though socket server.

        This function is supposed to be run in a Thread.
        """
        clock = Clock()
        while True:
            connection, address = self.server.accept()
            connection.settimeout(self.timeout)
            time = get_ticks()
            print('[{}] Connected to {}:{}'.format(time, *address))
            self.maze.reinit()
            while True:
                if self.hero.dead:
                    connection.send('0000000'.encode())
                    break
                data = self.export_txt().encode()
                alpha = deg(self.hero.angle)
                connection.send('{:07}'.format(len(data)).encode())
                connection.send(data)
                try:
                    buf = connection.recv(7)
                except:     # client is closed or timed out
                    break
                if not buf: break
                try:
                    move, angle, attack = map(int, buf.decode().split())
                except ValueError:  # invalid input
                    break
                y, x = (i - 1 for i in divmod(move, 3))
                # Time is the essence.
                angle = self.hero.angle if angle == alpha else radians(angle)
                self.sockinp = x, y, angle, attack & 1, attack >> 1
                clock.tick(self.fps)
            self.sockinp = 0, 0, -pi * 3 / 4, 0, 0
            new_time = get_ticks()
            print('[{0}] {3}:{4} scored {1} points in {2}ms'.format(
                new_time, self.maze.get_score(), new_time - time, *address))
            connection.close()
            if not self.hero.dead: self.maze.lose()

    def user_control(self):
        """Handle direct control from user's mouse and keyboard."""
        if not self.hero.dead:
            keys = pygame.key.get_pressed()
            right = keys[self.key['right']] - keys[self.key['left']]
            down = keys[self.key['down']] - keys[self.key['up']]

            buttons = pygame.mouse.get_pressed()
            try:
                autove = keys[self.key['autove']]
            except KeyError:
                autove = buttons[self.mouse['autove']]
            try:
                firing = keys[self.key['shot']]
            except KeyError:
                firing = buttons[self.mouse['shot']]
            try:
                slashing = keys[self.key['slash']]
            except KeyError:
                slashing = buttons[self.mouse['slash']]

            # Follow the mouse cursor
            x, y = pygame.mouse.get_pos()
            maze = self.maze
            if right or down:
                maze.destx = maze.desty = MIDDLE
                maze.stepx = maze.stepy = 0
            elif autove:
                maze.destx, maze.desty = maze.get_grid(x, y)
                maze.set_step(maze.is_displayed)
                if maze.stepx == maze.stepy == 0:
                    maze.destx = maze.desty = MIDDLE

            angle = atan2(y - self.hero.y, x - self.hero.x)
            self.control(right, down, angle, firing, slashing)

    def __exit__(self, exc_type, exc_value, traceback):
        if self.server is not None: self.server.close()
        if not self.hero.dead: self.maze.dump_records()
        pygame.quit()
示例#57
0
 def play(self):
     set_repeat(1, 1)
     timer = Clock()
     while not self.end:
         for event in get():
             if event.type == QUIT:
                 exit()
             if event.type == KEYDOWN:
                 k = event.key
                 if k == K_ESCAPE:
                     self.game_pause()
                 if k == K_DOWN:
                     self.hero.rotate(0)
                     self.hero.ismoved = True
                 if k == K_UP:
                     self.hero.rotate(1)
                     self.hero.ismoved = True
                 if k == K_RIGHT:
                     self.hero.rotate(2)
                     self.hero.ismoved = True
                 if k == K_LEFT:
                     self.hero.rotate(3)
                     self.hero.ismoved = True
                 if k == K_SPACE:
                     self.hero.place_bomb(self.sprites_and_bombs)
             elif event.type == KEYUP and event.key != 32:
                 self.hero.ismoved = False
         for m in self.mobs:
             m.strategy()
         self.screen.fill(self.color)
         self.grass.update(self.screen)
         self.bonuses.update(self.screen)
         self.sprites.update(self.screen)
         self.hero.update(self.screen, self.sprites)
         self.mobs.update(self.screen, self.sprites_and_bombs)
         self.show_info()
         update()
         killed = False
         clock = get_ticks()
         for ex in self.hero.explosions:
             if clock + 780 < ex.clear_time:
                 for m in self.mobs:
                     if collide_rect(m, ex):
                         self.scores += 15
                         m.kill()
                 if collide_rect(self.hero, ex):
                     killed = True
         if killed or self.hero.collide(self.mobs):
             self.death()
             if self.end:
                 break
         else:
             for bon in self.bonuses:
                 if bon.visible() and collide_rect(self.hero, bon):
                     if bon.type == 4:
                         self.lives += 1
                     elif bon.type == 5:
                         self.max_bombs += 1
                         self.hero.max_bombs += 1
                     elif bon.type == 6:
                         self.strength += 1
                         self.hero.strength += 1
                     bon.remove(self.bonuses)
                     self.scores += 10
         if len(self.mobs) == 0:
             self.lvl += 1
             self.scores += 20
             self.load_level()
         timer.tick(self.fps)
示例#58
0
    def __init__(self):
        """Initialization of GameState."""
        # Level1State()
        game = Game()
        folder = os.path.dirname(os.path.realpath(__file__))

        (width, height) = (ScreenSize.WIDTH.value, ScreenSize.HEIGHT.value)
        screen = pygame.display.set_mode((width, height))

        background_colour = (0, 0, 0)
        screen.fill(background_colour)

        font = pygame.font.SysFont("monospace", 40, True)
        level_label = font.render("Level: " + str(game.level), 1,
                                  (255, 255, 255))
        points_label = font.render(
            "Points: " + str(game.board.number_of_touched_tiles), 1,
            (255, 255, 255))
        hp_label = font.render("Hp: " + str(game.player.hp), 1,
                               (255, 255, 255))

        screen.blit(level_label, (0, 0))
        screen.blit(points_label, (0, 50))
        screen.blit(hp_label, (0, 100))

        board_dis = BoardDisplay(game.board)
        board_dis.display_board(screen)

        chicken_image = pygame.image.load(
            os.path.join(folder, "chickenFront.png"))
        ball_image = pygame.image.load(os.path.join(folder, "ball.png"))
        snake_image = SnakeImage()

        screen.blit(chicken_image, game.chicken.position)
        pygame.display.flip()

        FALL_DOWN_BALL = USEREVENT + 1
        MOVE_SNAKE = USEREVENT + 2
        pygame.time.set_timer(FALL_DOWN_BALL, 1500)
        pygame.time.set_timer(MOVE_SNAKE, 1500)

        clock = Clock()
        running = True
        not_frozen = True
        while running:

            for e in pygame.event.get():
                if e.type == QUIT:
                    sys.exit(0)
                elif e.type == KEYDOWN and not_frozen:
                    controler = ChickenControl()

                    possible_move = controler.move_chicken(
                        game.chicken, e.key, game.board)
                    if possible_move is None:
                        continue

                    tile = game.handle_level(possible_move)
                    if_collision = False

                    if tile == "NO_MORE_HP":
                        self.handle_lose(font, game, screen)
                        not_frozen = False
                        continue

                    if tile == "ONE_HP_LOST":
                        game.move_chicken_to_start_position()
                    else:
                        if_collision = game.check_collision_with_villains()
                        if not if_collision:
                            game.handle_touch_tile(tile)
                            tileControl = TileControl()
                            tileControl.change_color(tile, board_dis)

                    self.display_screen(font, background_colour, ball_image,
                                        board_dis, chicken_image, game,
                                        level_label, snake_image, screen)

                    if_lose = False
                    if if_collision:
                        if_lose = game.handle_collision_with_villain()
                        pygame.time.wait(500)

                    if if_lose:
                        self.handle_lose(font, game, screen)

                        not_frozen = False
                        continue

                    self.display_screen(font, background_colour, ball_image,
                                        board_dis, chicken_image, game,
                                        level_label, snake_image, screen)

                    if game.if_win():
                        if game.level == 3:
                            lose_label = font.render(
                                "Congratulations. You win! :)  ", 1,
                                (255, 255, 255))
                            final_points = font.render(
                                "You score:   " +
                                str(game.board.number_of_touched_tiles), 1,
                                (255, 255, 255))
                            screen.blit(lose_label, (350.5, 0))
                            screen.blit(final_points, (400.5, 50))
                            pygame.display.flip()
                            sys.exit(0)
                        else:
                            pygame.time.set_timer(FALL_DOWN_BALL, 0)
                            pygame.time.set_timer(MOVE_SNAKE, 0)
                            game.next_level()
                            game.board_for_next_level()
                            board_dis = BoardDisplay(game.board)
                            pygame.time.set_timer(FALL_DOWN_BALL, 1500)
                            pygame.time.set_timer(MOVE_SNAKE, 1500)
                            continue

                elif e.type == FALL_DOWN_BALL and not_frozen:
                    if len(game.list_of_villains) != 0:
                        for villain in game.list_of_villains:
                            if_ball_need_to_fall_down = villain.move_down(
                                game.board)

                            if if_ball_need_to_fall_down:
                                game.list_of_villains.remove(villain)

                        self.display_screen(font, background_colour,
                                            ball_image, board_dis,
                                            chicken_image, game, level_label,
                                            snake_image, screen)

                        if_collision = game.check_collision_with_villains()
                        if if_collision:
                            if_lose = game.handle_collision_with_villain()
                            if if_lose:
                                self.handle_lose(font, game, screen)

                    if len(game.list_of_villains
                           ) < game.max_number_of_villains:
                        if_create_new_villain = random.randint(0, 10) % 2
                        if if_create_new_villain == 1:
                            game.add_villain()

                        self.display_screen(font, background_colour,
                                            ball_image, board_dis,
                                            chicken_image, game, level_label,
                                            snake_image, screen)
                        continue

                elif e.type == MOVE_SNAKE and not_frozen:
                    if game.snake is None:
                        if_create_new_villain = random.randint(0, 100) % 3
                        if if_create_new_villain == 1:
                            game.add_snake()
                            snake_image = SnakeImage()
                        else:
                            continue
                    else:
                        game.move_snake()
                        if not game.snake.if_ball:
                            snake_image.change_ball_into_snake()

                        self.display_screen(font, background_colour,
                                            ball_image, board_dis,
                                            chicken_image, game, level_label,
                                            snake_image, screen)

                        if_collision = game.check_collision_with_villains()
                        if if_collision:
                            if_lose = game.handle_collision_with_villain()
                            if if_lose:
                                self.handle_lose(font, game, screen)
                                not_frozen = False
示例#59
0
class SimEngine:

    auto_setup = None

    event = None
    fps = 60
    values = None

    simple_gui = None
    world = None

    def __init__(self,
                 gui_left_upper,
                 caption="Basic Model",
                 gui_right_upper=None,
                 patch_size=11,
                 board_rows_cols=(51, 51),
                 clear=None,
                 bounce=None,
                 fps=None):

        # Constants for the main loop in start() below.
        self.CTRL_D = 'D:68'
        self.CTRL_d = 'd:68'
        self.ESCAPE = 'Escape:27'
        self.NORMAL = 'normal'
        self.Q = 'Q'
        self.q = 'q'

        self.clock = Clock()
        SimEngine.fps = fps if fps else 60
        self.idle_fps = 10

        SimEngine.simple_gui = SimpleGUI(gui_left_upper,
                                         caption=caption,
                                         gui_right_upper=gui_right_upper,
                                         patch_size=patch_size,
                                         board_rows_cols=board_rows_cols,
                                         clear=clear,
                                         bounce=bounce,
                                         fps=fps)
        self.graph_point = None

    @staticmethod
    def draw_world():
        """ Fill the screen with the background color, draw the world, and update the display. """
        SimEngine.simple_gui.fill_screen()
        SimEngine.world.draw()
        pg.display.update()

    @staticmethod
    def gui_get(key):
        """
        Widgets typically have a 'disabled' property. The following makes
        it possible to use 'enabled' as the negation of 'disabled'.
        """
        if not SimEngine.values:
            (SimEngine.event, SimEngine.values) = gui.WINDOW.read(timeout=10)
        value = SimEngine.values.get(
            key, None) if key != 'enabled' else not SimEngine.values.get(
                'disabled', None)
        return int(value) if value != float('inf') and isinstance(
            value, float) and value == int(value) else value

    @staticmethod
    def gui_set(key, **kwargs):
        """
        Widgets typically have a 'disabled' property. The following makes
        it possible to use 'enabled' as the negation of 'disabled'.
        """
        if 'enabled' in kwargs:
            value = kwargs.get('enabled')
            kwargs['disabled'] = not bool(value)
            kwargs.pop('enabled')
        widget = gui.WINDOW[key]
        widget.update(**kwargs)

    def model_loop(self):

        # Run this loop until the model signals it is finished or until the user stops it by pressing the Stop button.
        while True:
            (SimEngine.event, SimEngine.values) = gui.WINDOW.read(timeout=10)

            if SimEngine.event in (None, SimEngine.simple_gui.EXIT):
                return SimEngine.simple_gui.EXIT

            self.set_grab_anywhere(self.gui_get('Grab'))

            if SimEngine.event == FPS:
                SimEngine.fps = SimEngine.gui_get(FPS)

            if SimEngine.event.startswith(SimEngine.simple_gui.GRAPH):
                SimEngine.world.mouse_click(SimEngine.values['-GRAPH-'])

            if SimEngine.event == GOSTOP:
                SimEngine.gui_set(GO_ONCE, enabled=True)
                break

            elif SimEngine.world.done:
                SimEngine.gui_set(GOSTOP, enabled=True)
                SimEngine.gui_set(GO_ONCE, enabled=True)
                break

            elif SimEngine.event == '__TIMEOUT__':
                # This increments the World's tick counter for the number of times we have gone around this loop.
                # Examples.starburst uses it to decide when to "explode." Look at its step method.
                SimEngine.world.increment_ticks()
                # Take a step in the simulation.
                SimEngine.world.step()
                # This line limits how fast the simulation runs. It is not a counter.
                self.clock.tick(SimEngine.fps)

            else:
                SimEngine.world.handle_event(SimEngine.event)

            SimEngine.draw_world()

        return self.NORMAL

    @staticmethod
    def set_grab_anywhere(allow_grab_anywhere):
        if allow_grab_anywhere:
            gui.WINDOW.grab_any_where_on()
        else:
            gui.WINDOW.grab_any_where_off()

    def top_loop(self, the_world, auto_setup=False):
        SimEngine.world = the_world
        SimEngine.draw_world()
        SimEngine.auto_setup = auto_setup

        # Let events come through pygame to this level.
        pg.event.set_grab(False)

        while SimEngine.event not in [
                self.ESCAPE, self.q, self.Q, self.CTRL_D, self.CTRL_d
        ]:

            (SimEngine.event, SimEngine.values) = gui.WINDOW.read(timeout=10)

            if SimEngine.event in (None, SimEngine.simple_gui.EXIT):
                gui.WINDOW.close()
                break

            self.set_grab_anywhere(self.gui_get('Grab'))

            if SimEngine.event == FPS:
                SimEngine.fps = SimEngine.gui_get(FPS)

            if not SimEngine.auto_setup and SimEngine.event == '__TIMEOUT__':
                continue

            if SimEngine.event.startswith(SimEngine.simple_gui.GRAPH):
                SimEngine.world.mouse_click(SimEngine.values['-GRAPH-'])

            elif SimEngine.auto_setup or SimEngine.event == SimEngine.simple_gui.SETUP:
                gui_set(SimEngine.simple_gui.SETUP, enabled=False)
                gui_set(GO_ONCE, enabled=False)
                SimEngine.world.reset_all()
                returned_value = SimEngine.world.setup()
                gui_set(SimEngine.simple_gui.SETUP, enabled=True)
                gui_set(GOSTOP,
                        text='go',
                        button_color=('white', 'green'),
                        enabled=True)
                gui_set(GO_ONCE, enabled=True)
                SimEngine.auto_setup = False
                if returned_value == SimEngine.simple_gui.EXIT:
                    gui.WINDOW.close()
                    break

            elif SimEngine.event == GO_ONCE:
                SimEngine.gui_set(GOSTOP,
                                  text='stop',
                                  button_color=('white', 'red'),
                                  enabled=False)
                SimEngine.gui_set(GO_ONCE, enabled=False)
                SimEngine.gui_set(SimEngine.simple_gui.SETUP, enabled=False)
                SimEngine.world.increment_ticks()
                SimEngine.world.step()
                SimEngine.gui_set(SimEngine.simple_gui.SETUP, enabled=True)
                SimEngine.gui_set(GOSTOP,
                                  text='go',
                                  button_color=('white', 'green'),
                                  enabled=True)
                SimEngine.gui_set(GO_ONCE, enabled=True)

            elif SimEngine.event == GOSTOP:
                SimEngine.gui_set(GOSTOP,
                                  text='stop',
                                  button_color=('white', 'red'))
                SimEngine.gui_set(GO_ONCE, enabled=False)
                SimEngine.gui_set(SimEngine.simple_gui.SETUP, enabled=False)
                returned_value = self.model_loop()
                SimEngine.gui_set(GOSTOP,
                                  text='go',
                                  button_color=('white', 'green'),
                                  enabled=True)
                SimEngine.gui_set(GO_ONCE, enabled=True)
                SimEngine.gui_set(SimEngine.simple_gui.SETUP, enabled=True)
                SimEngine.world.final_thoughts()
                if returned_value == SimEngine.simple_gui.EXIT:
                    gui.WINDOW.close()
                    break
            else:
                # For anything else, e.g., a button the user defined.
                SimEngine.world.handle_event(SimEngine.event)

            SimEngine.draw_world()

            self.clock.tick(self.idle_fps)
示例#60
0
 def __init__(self, player: Player, speed):
     threading.Thread.__init__(self)
     self.player = player
     self.speed = speed
     self.clock = Clock()