Exemplo n.º 1
0
 def __init__(self):
     self.configuration = GlobalConfigurationWrapper()
     self.hmiConfiguration = HmiConfigurationWrapper()
     self.boxOpeningManager = BoxOpeningManager()
     self.logger = Logger()
     self.soundManager = SoundManager()
     
     self.serial = serial.Serial(port='/dev/serial0',baudrate=9600,timeout=1.0)
     self.worker_thread = threading.Thread(target=self.__idle_start, args=())
Exemplo n.º 2
0
	def __init__(self, screen):
		""" Init state common to all levels """
		# Init sounds
		self.sound = SoundManager(SOUND_DIR)
		self.sound.loadAllSounds()
		# Init sprites
		self.sprites = SpriteManager.getInstance(IMAGE_DIR)
		self.sprites.loadAllImages()

		self.screen = screen
		self.gameDim = self.screen.getGameDim()
		# Parse directory to get levels
		self.levels = [lvl for lvl in os.listdir(LVL_DIR) if lvl.endswith(LVL_FORMAT)]
		self.currentLvl = 0
Exemplo n.º 3
0
 def __init__(self):
     self.soundManager = SoundManager()
     self.screenManager = ScreenManager(self)
     conf.pg.init()
     pg.display.set_caption(conf.TITLE)
     # Full-screen test stuff
     #user32 = conf.ctypes.windll.user32
     #screenSize =  user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
     #print(screenSize)
     #size = (screenSize)
     #pg.display.set_mode((size) , pg.FULLSCREEN)
     #conf.WIDTH = screenSize[0]
     #conf.HEIGHT = screenSize[1]
     self.screen = conf.pg.display.set_mode((conf.WIDTH, conf.HEIGHT))
     #self.screen = conf.pg.display.set_mode((conf.WIDTH, conf.HEIGHT), pg.FULLSCREEN)
     self.clock = pg.time.Clock()
     pg.key.set_repeat(500, 100)
     self.load_data()
     pg.mouse.set_cursor(*pg.cursors.broken_x)
     self.map_progress = 0
     self.points = 0
     self.player_health = 0
     self.seed = conf.random.randint(42, 69)
Exemplo n.º 4
0
class GameState(object):

	def __init__(self, screen):
		""" Init state common to all levels """
		# Init sounds
		self.sound = SoundManager(SOUND_DIR)
		self.sound.loadAllSounds()
		# Init sprites
		self.sprites = SpriteManager.getInstance(IMAGE_DIR)
		self.sprites.loadAllImages()

		self.screen = screen
		self.gameDim = self.screen.getGameDim()
		# Parse directory to get levels
		self.levels = [lvl for lvl in os.listdir(LVL_DIR) if lvl.endswith(LVL_FORMAT)]
		self.currentLvl = 0


	def initLevel(self, lvlIndex, directory=''):
		### Generate grid ###
		self.grid = BrickGrid()
		self.directory = directory
		self.grid.loadMapFromFile(LVL_DIR + self.directory + self.levels[lvlIndex])

		# Start level counter
		self.lvlTime = Counter()
		self.lvlTime.start()
		self.lvlTime.pause()

		### Concatenate objects ###
		self.objects = []
		self.objects.append(self.grid)

		self.state = STATE['NEW_LIFE']
		self.stateAfterScore = ""

		### Collision handler ###
		self.ch = CollisionHandler()


	def update(self):
		pass

	def manageGame(self, eventManager):

		""" Debug mode """
		for p in self.players:
			# Paddle move
			if eventManager.leftHeld:
				p.paddle.move(DIRECTION['X']['LEFT'], 0, eventManager.isBoostingLeft, eventManager.isBoostingRight)
			if eventManager.rightHeld:
				p.paddle.move(DIRECTION['X']['RIGHT'], 0, eventManager.isBoostingLeft, eventManager.isBoostingRight)
			if eventManager.upHeld:
				p.paddle.move(0, DIRECTION['Y']['UP'])
			if eventManager.downHeld:
				p.paddle.move(0, DIRECTION['Y']['DOWN'])
			elif not (eventManager.leftHeld or eventManager.rightHeld or eventManager.upHeld or eventManager.downHeld):
				p.paddle.idle()

		""" Release
		# Paddle move
		if eventManager.leftHeld:
			self.players[0].paddle.move(dirX=DIRECTION['X']['LEFT'], dirY=0)
		if eventManager.rightHeld:
			self.players[0].paddle.move(dirX=DIRECTION['X']['RIGHT'], dirY= 0)
		if eventManager.upHeld:
			self.players[0].paddle.move(dirX=0, dirY=DIRECTION['Y']['UP'])
		if eventManager.downHeld:
			self.players[0].paddle.move(dirX=0, dirY=DIRECTION['Y']['DOWN'])
		"""

		# Update objects
		for o in self.objects:
			o.update()

		# Update visual effects
		VisualEffectManager.getInstance().update()


	def draw(self):

		# When level in progress or beginning
		if self.state == STATE['IN_PROGRESS'] or self.state == STATE['NEW_LIFE']:
			# Draw backgrounds
			self.screen.drawAllBG(self.grid.bgColor)
			# Draw state board
			self.screen.drawStateBoard(self.grid, self.players, self.lvlTime, self.localRecord, self.worldRecord)
			# Draw game objects
			self.screen.drawObjects(self.objects)
			# Draw visual effects
			self.screen.drawVisualEffects(VisualEffectManager.getInstance().getList())

		# When level beginning or paused or life lost => print press space
		if self.state == STATE['NEW_LIFE'] or self.state == STATE['PAUSED']:
			self.screen.drawPressToContinue()
			
		# When game over or end
		if self.state == STATE['GAME_OVER'] or self.state == STATE['GAME_END']:
			# Create game over surface
			self.screen.createGameOver()
			self.screen.drawGameOver()
		else :
			# Remove game over
			self.screen.removeGameOver()
Exemplo n.º 5
0
class HmiDisplayManager():
    __metaclass__ = Singleton
    
    _DAT_FMT_ = 'x6B'
    _HMI_COMMAND_ENDING_ = '\xff\xff\xff'
    _NUMBER_OF_BYTES_TO_READ_ = 7
    _EXPECTED_MIN_SIZE_OF_RECEIVED_PAYLOAD_ = 24
    
    def __init__(self):
        self.configuration = GlobalConfigurationWrapper()
        self.hmiConfiguration = HmiConfigurationWrapper()
        self.boxOpeningManager = BoxOpeningManager()
        self.logger = Logger()
        self.soundManager = SoundManager()
        
        self.serial = serial.Serial(port='/dev/serial0',baudrate=9600,timeout=1.0)
        self.worker_thread = threading.Thread(target=self.__idle_start, args=())
        
    def idle(self):
        try:
            self.show_page(HmiDisplayPageEnum.Home)
        
            if not self.serial.isOpen():
                self.serial.open()
              
            if not self.worker_thread.isAlive():
                self.worker_thread.start()
        except BaseException as e:
            self.logger.log_critical('<HmiDisplayManager.idle> => ' + str(e))
            raise
        
    def sleep(self):
        try:
            if hasattr(self, 'worker_thread'):
                self.worker_thread.do_run = False
        except BaseException as e:
            self.logger.log_critical('<HmiDisplayManager.sleep> => ' + str(e))
    
    def show_page(self, pageId):
        try:
            switcher = {
                HmiDisplayPageEnum.Home:
                    lambda: self.__send_command(self.__formatted_page_command(self.hmiConfiguration.home_page_id())),
                HmiDisplayPageEnum.GoOnMarkerAndPushAgain:
                    lambda: self.__send_command(self.__formatted_page_command(self.hmiConfiguration.show_package_page_id())),
                HmiDisplayPageEnum.TakingPictureOfYou:
                    lambda: self.__send_command(self.__formatted_page_command(self.hmiConfiguration.taking_picture_page_id())),
                HmiDisplayPageEnum.WaitingForAnswer:
                    lambda: self.__send_command(self.__formatted_page_command(self.hmiConfiguration.wait_page_id())),
                HmiDisplayPageEnum.PackageDeclined:
                    lambda: self.__send_command(self.__formatted_page_command(self.hmiConfiguration.packageDeclinedPageId())),
                HmiDisplayPageEnum.PackageAccepted:
                    lambda: self.__send_command(self.__formatted_page_command(self.hmiConfiguration.package_accepted_page_id())),
                HmiDisplayPageEnum.RepeatTheSteps:
                    lambda: self.__send_command(self.__formatted_page_command(self.hmiConfiguration.repeat_steps_page_id())),
                HmiDisplayPageEnum.ThankYou:
                    lambda: self.__send_command(self.__formatted_page_command(self.hmiConfiguration.thank_you_page_id())),
                HmiDisplayPageEnum.PictureWasTaken:
                    lambda: self.__send_command(self.__formatted_page_command(self.hmiConfiguration.picture_was_taken_page_id()))
            }
            f = switcher.get(pageId, lambda: "Invalid page id")
            f()
        except BaseException as e:
            self.logger.log_critical('<HmiDisplayManager.show_page> => ' + str(e))
            
    # Private methods
    def __send_command(self, command):
        self.serial.write(command)
        
    def __formatted_page_command(self, pageId):
        # This the representation of 'page 0\xff\xff\xff'. What we do here is to dynamically assign the page id.
        commandAsBytesArray = [0x70,0x61,0x67,0x65,0x20,0x30,0xff, 0xff, 0xff]
        commandAsBytesArray[5] = ord(str(pageId))
        return bytes(commandAsBytesArray)
    # TODO: Avoid this 'Christmas tree' issue.
    def __idle_start(self):   
        while getattr(self.worker_thread, "do_run", True):
            rcv=self.serial.readline(self._NUMBER_OF_BYTES_TO_READ_)
            if(sys.getsizeof(rcv)>=self._EXPECTED_MIN_SIZE_OF_RECEIVED_PAYLOAD_):
                pageId, btnId, _, _, _, _ = struct.unpack(self._DAT_FMT_, rcv)

                if(pageId == self.hmiConfiguration.home_page_id()):
                    if(btnId == self.hmiConfiguration.home_screen_main_button_index()):
                        self.soundManager.playSound(SoundEnum.ClickOnCapture)
                    
                if(pageId == self.hmiConfiguration.show_package_page_id()):
                    if(btnId == self.hmiConfiguration.show_packge_and_click_button_index()):
                        try:
                            self.soundManager.stopSound()
                            UserInputHandler(self)
                        except Exception as e:
                            #send_somewhere(traceback.format_exception(*sys.exc_info()))                         
                            self.show_page(HmiDisplayPageEnum.PackageAccepted)
                            self.boxOpeningManager.start_box_opening_procedure()
            time.sleep(2)
        
        if self.serial.isOpen():
            self.serial.close()

# Usage example
# hmi = HmiDisplayManager()
# hmi.show_page(HmiDisplayPageEnum.Home)
# hmi.idle()
# print('Hmi display is now in idle state.')
# time.sleep(40)
# hmi.sleep()
# print('Hmi display is now in sleep state.')
Exemplo n.º 6
0
class Game:
    def __init__(self):
        self.soundManager = SoundManager()
        self.screenManager = ScreenManager(self)
        conf.pg.init()
        pg.display.set_caption(conf.TITLE)
        # Full-screen test stuff
        #user32 = conf.ctypes.windll.user32
        #screenSize =  user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)
        #print(screenSize)
        #size = (screenSize)
        #pg.display.set_mode((size) , pg.FULLSCREEN)
        #conf.WIDTH = screenSize[0]
        #conf.HEIGHT = screenSize[1]
        self.screen = conf.pg.display.set_mode((conf.WIDTH, conf.HEIGHT))
        #self.screen = conf.pg.display.set_mode((conf.WIDTH, conf.HEIGHT), pg.FULLSCREEN)
        self.clock = pg.time.Clock()
        pg.key.set_repeat(500, 100)
        self.load_data()
        pg.mouse.set_cursor(*pg.cursors.broken_x)
        self.map_progress = 0
        self.points = 0
        self.player_health = 0
        self.seed = conf.random.randint(42, 69)

    def load_data(self):
        game_folder = path.dirname('__file__')
        img_folder = path.join(game_folder, 'img')
        snd_folder = path.join(game_folder, 'snd')
        music_folder = path.join(game_folder, 'music')
        map_folder = path.join(game_folder, 'maps')
        self.asset_folder = path.join(game_folder, 'assets')

        self.title_font = path.join(game_folder, conf.FONT)
        self.background_image = utils.load_images_in_folder(conf.BACKGROUND_IMAGE, img_folder)
        self.dim_screen_img = pg.Surface(self.screen.get_size()).convert_alpha()
        self.dim_screen_img.fill((0, 0, 0, 120))

        self.maps = utils.load_maps(map_folder)
        self.player_imgs = utils.load_images_in_folder(conf.PLAYER_IMGS, img_folder)
        for i in range(0, len(self.player_imgs)):
            self.player_imgs[i] = pg.transform.scale(self.player_imgs[i], (conf.TILESIZE, conf.TILESIZE))
        self.wall_img = utils.load_images_in_folder(conf.WALL_IMG, img_folder)
        self.bullet_imgs = utils.load_images_in_folder(conf.BULLET_IMGS, img_folder)
        self.noise_imgs = utils.load_images_in_folder(conf.NOISE_IMGS, img_folder)
        self.flash_imgs = utils.load_images_in_folder(conf.BULLET_FLASH_IMGS, img_folder)
        self.item_imgs = utils.load_images_in_folder(conf.ITEM_IMGS, img_folder)
        self.splat_imgs = utils.load_images_in_folder(conf.SPLAT_IMGS, img_folder)
        # Sound
        pg.mixer.music.load(path.join(music_folder, conf.BG_MUSIC))
        self.effect_sounds = utils.load_sounds_in_folder(conf.EFFECTS_SOUNDS, snd_folder)
        self.weapon_sounds = utils.load_sounds_in_folder(conf.WEAPON_SOUNDS, snd_folder)
        self.enemy_sounds = utils.load_sounds_in_folder(conf.ENEMY_SOUNDS, snd_folder)
        for s in self.enemy_sounds:
            s.set_volume(.2)
        self.player_hit_sounds = utils.load_sounds_in_folder(conf.PLAYER_HIT_SOUNDS, snd_folder)
        # TODO - Find other sound for this
        self.enemy_hit_sounds = utils.load_sounds_in_folder(conf.ENEMY_SOUNDS, snd_folder)
        for s in self.enemy_hit_sounds:
            s.set_volume(.2)

    def new(self):
        # initialize all variables and do all the setup for a new game
        conf.random.seed(self.seed)
        self.all_sprites = pg.sprite.LayeredUpdates()
        self.walls = pg.sprite.Group()
        self.mobs = pg.sprite.Group()
        self.bullets = pg.sprite.Group()
        self.items = pg.sprite.Group()
        for row, tiles in enumerate(self.maps[self.map_progress].data):
            for col, tile in enumerate(tiles):
                if tile == conf.WALL_TILE:
                    Wall(self, conf.vec(col, row))
                elif tile == conf.PLAYER_TILE:
                    self.player = Player(self, conf.vec(col, row))
                    if (self.player_health != 0):
                        self.player.health = self.player_health
                elif tile == conf.HEALTH_TILE:
                    Item(self, conf.vec(col, row), 'health')
                elif tile == conf.MG_TILE:
                    Item(self, conf.vec(col, row), 'machinegun')
                elif tile == conf.SW_TILE:
                    Item(self, conf.vec(col, row), 'shockwave')
                elif tile == conf.SG_TILE:
                    Item(self, conf.vec(col, row), 'shotgun')
        for row, tiles in enumerate(self.maps[self.map_progress].data):
            for col, tile in enumerate(tiles):
                if tile == conf.MOB_TILE:
                    Mob(self, conf.vec(col, row))

        self.paused = False

        self.camera = Camera(self, self.maps[self.map_progress].width, self.maps[self.map_progress].height)
        self.background = Background(self, conf.vec(
            self.maps[self.map_progress].width / 4, self.maps[self.map_progress].height / 4))
        self.soundManager.play_sound_effect(self.effect_sounds['level_start'])

    def run(self):
        # game loop - set self.playing = False to end the game
        self.playing = True
        self.soundManager.play_music()

        while self.playing:
            self.dt = self.clock.tick(conf.FPS) / 1000.0
            self.events()
            if not self.paused:
                self.update()
            self.screenManager.draw_info(
                conf.BGCOLOR,
                self.title_font,
                self.player.health,
                self.clock.get_fps(),
                self.points + self.player.points_current_level,
                self.player.secondary_weapon_bullets,
                self.player.secondary_weapon
                )

    def quit(self):
        pg.quit()
        #TODO sys.exit()??

    def update(self):
        # update portion of the game loop
        self.all_sprites.update()
        self.camera.update(self.player)

    def events(self):
        # catch all events here
        for event in pg.event.get():
            if event.type == pg.QUIT:
                self.quit()
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_ESCAPE:
                    self.quit()
            elif event.type == pg.KEYUP:
                if event.key == pg.K_m:
                    self.soundManager.toggle_mute()
                if event.key == pg.K_r:
                    self.new()
                    self.run()
                if event.key == pg.K_p:
                    self.paused = not self.paused
                if event.key == pg.K_SPACE and len(self.mobs) == 0:
                    self.add_points(self.player.points_current_level)
                    self.player_health = self.player.health
                    if self.map_progress < len(self.maps) - 1:
                        self.map_progress += 1
                    else:
                        self.map_progress = 0
                    self.new()
                    self.run()

    def show_start_screen(self):
        pass

    def show_go_screen(self):
        pass

    def add_points(self, pointsToAdd):
        self.points += pointsToAdd
Exemplo n.º 7
0
    def __init__(self):
        self.tps_max = 5.0
        self.base_tps = 5.0
        self.tps_pause = 60.0

        # initialization
        pygame.init()
        self.screen = pygame.display.set_mode((640, 640))
        self.tps_clock = pygame.time.Clock()
        self.tps_delta = 0.0

        self.sounds = SoundManager(self)

        dir = os.path.dirname(__file__)

        self.smallFont = pygame.font.Font(
            os.path.join(dir, "../graphics/German Beauty.ttf"), 18)
        self.largeFont = pygame.font.Font(
            os.path.join(dir, "../graphics/German Beauty.ttf"), 128)
        self.mediumFont = pygame.font.Font(
            os.path.join(dir, "../graphics/German Beauty.ttf"), 32)

        pygame.display.set_caption('Snake!')

        self.label = Label(self)

        self.background = pygame.image.load(
            os.path.join('../graphics/background.png'))
        self.shadowColor = pygame.math.Vector3(40, 30, 15)

        self.player = Snake(self)
        self.apples = AppleManager(self, 10)
        self.pause = Pause(self)
        self.deathScreen = DeathScreen(self)

        while True:

            while self.pause.isPause:
                # handle events
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        sys.exit(0)
                # ticking
                self.tps_delta += self.tps_clock.tick() / 1000.0
                while self.tps_delta > 1 / self.tps_pause:
                    self.pause.tick()
                    self.tps_delta -= 1 / self.tps_pause

                # drawing
                # self.screen.fill((0, 0, 0))  # czyszczenie ekranu, aby obiekt przesuwal sie ze zniknieciem sladu
                self.pause.draw()

                pygame.display.flip()  # obracanie obrazu

            while self.deathScreen.isDead:
                # handle events
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        sys.exit(0)
                # ticking
                self.tps_delta += self.tps_clock.tick() / 1000.0
                while self.tps_delta > 1 / self.tps_pause:
                    self.deathScreen.tick()
                    self.tps_delta -= 1 / self.tps_pause

                # drawing
                # self.screen.fill((0, 0, 0))  # czyszczenie ekranu, aby obiekt przesuwal sie ze zniknieciem sladu
                self.deathScreen.draw()

                pygame.display.flip()  # obracanie obrazu

            # handle events
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit(0)
            # ticking
            self.tps_delta += self.tps_clock.tick() / 1000.0
            while self.tps_delta > 1 / self.tps_max:
                self.tick()
                self.tps_delta -= 1 / self.tps_max

            # drawing
            self.screen.fill(
                (0, 0, 0)
            )  # czyszczenie ekranu, aby obiekt przesuwal sie ze zniknieciem sladu
            self.draw()

            pygame.display.flip()  # obracanie obrazu
Exemplo n.º 8
0
from pygame import display, image, event
from time import sleep
import config as cfg
from stage import Stage
from snake import Snake
from food import Food
from soundManager import SoundManager

#Some basic initializations..
pygame.init()
display.set_caption("My Own Snake")
screen = display.set_mode((cfg.SCREEN_W, cfg.SCREEN_H))
myStage = Stage(screen)
mySnake = Snake(screen)
myFood = Food(screen, mySnake.getBodylist())
mySoundMgr = SoundManager()

#The main event loop...
isRunning = True
screen.fill((0, 0, 0))
onOverScreen = False
onWonScreen = False
mySoundMgr.playBackground()
while isRunning:
    evt_q = event.get()
    newD = mySnake.getCurrentDirection()

    #Process the event queue
    for e in evt_q:
        if e.type == pygame.QUIT:
            isRunning = False