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 __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 __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)
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()
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.')
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
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
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