def notify(self, event):
     if isinstance(event, TickEvent):
         #Handle Input Events
         for event in pygame.event.get():
             ev = None
             if event.type == QUIT:
                 ev = QuitEvent()
             elif event.type == KEYDOWN \
                 and event.key == K_ESCAPE:
                 ev = QuitEvent()
             elif event.type == KEYDOWN \
                 and event.key == K_UP:
                 direction = DIRECTION_UP
                 ev = CharactorMoveRequest(direction)
             elif event.type == KEYDOWN \
                 and event.key == K_DOWN:
                 direction = DIRECTION_DOWN
                 ev = CharactorMoveRequest(direction)
             elif event.type == KEYDOWN \
                 and event.key == K_LEFT:
                 direction = DIRECTION_LEFT
                 ev = CharactorMoveRequest(direction)
             elif event.type == KEYDOWN \
                 and event.key == K_RIGHT:
                 direction = DIRECTION_RIGHT
                 ev = CharactorMoveRequest(direction)
             elif event.type == KEYDOWN \
                 and event.key == K_RETURN:
                 ev = GameStartRequest()
             if ev:
                 self.ev_manager.post(ev)
Exemple #2
0
    def end(self):
        """
Sends quit event to both queues and waits for them to run their course.
        """
        self.rxq.put(QuitEvent())
        self.txq.put(QuitEvent())
        self.end_safely(self.broker_p)
        self.end_safely(self.irc_p)
        for input in self.inputs:
            input.terminate()
Exemple #3
0
    def animate(self, delta):
        """Computes new state of the game."""
        for minion in self.minions[:]:
            minion.animate(delta)
            #if minion.reached_end:
            #self.minions.remove(minion)
            #self.lives -= 1
        for tower in self.towers:
            tower.animate(delta)
        for bullet in self.bullets:
            bullet.animate(delta)
        self.check_for_finished_minions()
        self.collision_detection()
        for tower in self.towers:
            bullet = tower.shoot(self.minions)
            if bullet != None:
                self.bullets.append(bullet)

        self.current_level.update(delta)

        if self.current_level.sent_next_wave:
            self.current_level.sent_next_wave = False
            self.evm.Post(WaveChangeEvent())

        for wave in self.current_level.active_waves[:]:
            if wave.new_minion:
                wave.new_minion = False
                wave.nr_minion -= 1
                self.add_minion(wave.hp_minion)
                self.evm.Post(WaveChangeEvent())
                if wave.nr_minion == 0:
                    self.current_level.active_waves.remove(wave)

        if self.lives <= 0:
            self.evm.Post(QuitEvent())

        if not self.minions and not self.current_level.active_waves and not self.current_level.next_wave:
            self.evm.Post(QuitEvent())
 def notify(self, event):
     if isinstance(event, TickEvent):
         ev = None
         for event in pygame.event.get():  #va de cajon
             if event.type == QUIT:
                 ev = QuitEvent()
             elif event.type == KEYDOWN \
                 and event.key == K_ESCAPE:
                 ev = QuitEvent()
             elif event.type == KEYDOWN \
                 and event.key == K_RETURN:
                 ev = GameStartRequest()
             ########################################################
             if event.type == KEYDOWN:
                 if event.key in self.available_keys \
                   and event.key not in self.keys_pressed:
                     self.keys_pressed.insert(0, event.key)
             elif event.type == KEYUP:
                 if event.key in self.available_keys:
                     index = self.keys_pressed.index(event.key)
                     del (self.keys_pressed[index])
             ########################################################
         if not ev and self.keys_pressed:
             key = self.keys_pressed[0]
             direction = None
             if key == K_UP:
                 direction = DIRECTION_UP
             elif key == K_DOWN:
                 direction = DIRECTION_DOWN
             elif key == K_LEFT:
                 direction = DIRECTION_LEFT
             elif key == K_RIGHT:
                 direction = DIRECTION_RIGHT
             ev = CharactorMoveRequest(direction)
         if ev:
             self.ev_manager.post(ev)
Exemple #5
0
    def Notify(self, event):
        if isinstance( event, KeyPressEvent ):
            if event.key == 'q': 
                self.evm.Post(QuitEvent())
            if event.key == 'a':
                self.logic.add_minion()
            if event.key == ' ':
                self.logic.current_level.send_next_wave()
                
        elif isinstance( event, MouseClickEvent ):
            self.logic.add_tower(event.pos.x, event.pos.y)
        elif isinstance( event, TickEvent ):
            self.evm.Send(ClearScreenEvent())
            self.draw_map()
            self.draw_minions()
            self.draw_towers()
            self.draw_bullets()
            self.draw_hud()
            
            self.wc.draw_widgets(self.main_window)

            if self.logic.current_level.next_wave and len(self.logic.current_level.active_waves) < len(self.wave_windows):
                self.wave_windows[len(self.logic.current_level.active_waves)].set_time(self.logic.current_level.next_wave.offset_wave)


        elif isinstance( event, WaveChangeEvent ):
            wavelist = []
            wavelist.extend(self.logic.current_level.active_waves)
            if self.logic.current_level.next_wave:
                wavelist.append(self.logic.current_level.next_wave)
            wavelist.extend(self.logic.current_level.waves)
            
            for i in range(0, min(len(self.wave_windows), len(wavelist))):
                wave = wavelist[i]
                window = self.wave_windows[i]
                window.set_nr(wave.nr_minion)
                window.border_bold = False
                window.show_time(False)

            for i in range(min(len(self.wave_windows), len(wavelist)),len(self.wave_windows)):
                self.wave_windows[i].show = False
                
            if self.logic.current_level.next_wave and len(self.logic.current_level.active_waves) < len(self.wave_windows):
                self.wave_windows[len(self.logic.current_level.active_waves)].border_bold = True
                self.wave_windows[len(self.logic.current_level.active_waves)].show_time(True)
Exemple #6
0
def main():
    pygame.init()

    pygame.display.set_caption("The 15 Puzzle")
    win = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
    clock = pygame.time.Clock()
    event_manager = EventManager()
    game_board = GameModel()
    game_view = GameView(win)
    spinner = CPUSpinnerController(event_manager, clock)
    game_controller = GameController(game_board, game_view)

    event_manager.registerListener(TickEvent(), game_controller)
    event_manager.registerListener(QuitEvent(), spinner)

    spinner.run()

    pygame.quit()
Exemple #7
0
 def notify(self, event, event_manager):
     if isinstance(event, TickEvent):
         # Handle input events
         for event in pygame.event.get():
             if event.type == pygame.QUIT:
                 event_manager.post(QuitEvent())
             elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
                 moves = self.get_viable_moves()
                 pos = pygame.mouse.get_pos()
                 if self.view.instructions_btn.collidepoint(pos):
                     self.view.instructions()
                     break
                 for tile in moves:
                     if tile.box.collidepoint(pos):
                         self.move(self.model.tiles.index(tile))
                         break
                 if self.check_solved():
                     self.update_best()
             else:
                 keys = pygame.key.get_pressed()
                 if keys[pygame.K_SPACE]:
                     self.restart()
             self.view.draw(self.model)
             pygame.display.update()
Exemple #8
0
def main(lineMax=5000,
         logfileName='ircsimul.log',
         writeStdOut=False,
         realTime=False,
         logInitialPopulation=False):
    # create character maps for various text processing/writing functions
    helpers.makeTransMaps()

    # load up markov generator
    markovGenerator = markov.MarkovGenerator(sourcefileName, reasonsfileName)

    # load channel
    channel = Channel(channelName, markovGenerator, initialUserCount)

    # open log
    fileObjectList = []
    fileObjectList.append(open(logfileName, 'wt', encoding='utf8'))
    if writeStdOut:
        fileObjectList.append(sys.stdout)
    log = Log(fileObjectList)

    # get current date
    date = datetime.datetime.utcnow()

    daycache = date.day

    # create queue
    queue = PriorityQueue()

    # write opening of log
    log.writeLogOpening(date)

    # populates channel with initialPopulation users
    if logInitialPopulation:
        for i in range(0, initialPopulation):
            event = JoinEvent(date, channel.selectOfflineUser(), channel)
            queue.put(event)
    else:
        for i in range(0, initialPopulation):
            channel.setOnline(channel.selectOfflineUser())

    # bulk of messages
    currentEvent = None
    while True:
        if not lineMax == -1:
            if log.totalLines >= lineMax - 1:
                break
        # empty queue
        try:
            while not queue.empty():
                currentEvent = queue.get()
                if currentEvent:
                    line = currentEvent.process()
                    if line:
                        now = datetime.datetime.utcnow()
                        if realTime and (currentEvent.date > now):
                            delta = currentEvent.date - datetime.datetime.utcnow(
                            )
                            print(str(delta.total_seconds()))
                            time.sleep(delta.total_seconds())
                            log.write(line)
                            log.flush()
                        else:
                            log.write(line)
                else:
                    break
        except Empty:
            pass

        # check if day changed, if so, write day changed message
        # TODO: make this event based
        if daycache != date.day:
            log.writeDayChange(date)
            daycache = date.day

        # generate line
        determineType = random()
        if determineType > joinPartProbability:
            # user message
            user = channel.selectOnlineUser()
            event = MessageEvent(
                date, user, flavourText(markovGenerator.generateMessage(),
                                        user))
        elif determineType > actionProbability:
            # random join/part event
            user = channel.selectUser()
            if user in channel.online:
                if random() < quitProbability:
                    event = QuitEvent(date, user,
                                      markovGenerator.generateReason(),
                                      channel)
                else:
                    event = LeaveEvent(date, user,
                                       markovGenerator.generateReason(),
                                       channel)
            else:
                event = JoinEvent(date, user, channel)
        elif determineType > kickProbability:
            # user action
            # TODO: implement variable user action text
            event = UserActionEvent(date, channel.selectOnlineUser(),
                                    "does action")
        else:
            # kick event
            event = KickEvent(date, channel.selectOnlineUser(),
                              channel.selectOnlineUser(),
                              markovGenerator.generateReason(), channel)
        queue.put(event)

        # makes sure some amount of peeps are online or offline
        # TODO: check if population checks could be made obsolete by having the next join/parts already cached
        # TODO: move to channel class later?
        if channel.onlineUsers < minOnline:
            event = JoinEvent(date, channel.selectOfflineUser(), channel)
            queue.put(event)
        if (channel.userCount - channel.onlineUsers) < minOffline:
            if random() < quitProbability:
                event = QuitEvent(date, user, markovGenerator.generateReason(),
                                  channel)
            else:
                event = LeaveEvent(date, user,
                                   markovGenerator.generateReason(), channel)
            queue.put(event)

        # TODO: is += possible here?
        date = date + datetime.timedelta(seconds=choice(timeSpan) *
                                         (sin((date.hour) / 24 * pi) + 1.5))

    # write log closing message
    log.writeLogClosing(date)

    # close log file
    log.lfs[0].close()