class Game(State): def __init__(self, display, roomName=ROOM.TEST_ROOM): super(Game, self).__init__(display) #@TODO: fix me! self.controls = Controller() self.status = StatusBox() self.status.capture() # add the status bar sprites. the status # box is an event handler so they'll just # change on their own, but we have to add # them to the sprite group so they show up # on screen... self.sprites = SpriteGear(self.display) for bar in self.status.bars.values(): self.sprites.sprites.add(bar) if roomName == ROOM.TEST_ROOM: self.room = makeTestRoom() # a block to play with: self.sprites.sprites.add( BlockSprite( self.room.addBlock((SCREEN.WIDTH/2+150,SCREEN.HEIGHT-100), 32, 32), pygame.image.load(IMAGE.SOCCER))) else: self.room = loader.roomFromFile(open(ROOM.DIRECTORY+roomName+"-geom.svg")) self.sprites.fromRoom(self.room, roomName) # finally, note the hero: self.hero = self.room.hero def EVT_GAME_RIGHT(self, event): """ when the player tells us to go right, we should move the hero to the right in our world. """ self.hero.run(RIGHT) def EVT_GAME_LEFT(self, event): self.hero.run(LEFT) def EVT_GAME_JUMP(self, event): self.hero.jump() def EVT_GAME_QUIT(self, event): self.done = True def heroPosition(self): """ Get the position of our intrepid kiwi. """ return self.hero.getPosition() def tick(self): self.room.physics.step() self.room.hero.step() self.room.hero.metabolism.eat(Food(5,5, self.room, (0,0))) # hack to lower metabolism self.controls.tick() self.sprites.tick() def kick(self): super(Game, self).kick() self.sprites.refresh()
class LevelList(State): FONTSIZE = 30 def __init__(self, display): super(LevelList, self).__init__(display) #@TODO: fix me! self.controls = Controller() self.status = StatusBox() self.status.capture() self.display = display roomList = os.listdir (ROOM.DIRECTORY) display.addFont (self.FONTSIZE) self.roomList = [] self.selected = 0 for x in roomList: if len(x) > 4: if x[len(x)-4:] == ".svg": self.roomList.append (x) self.roomList = ["outside","joe1"] self.levelCount = len(self.roomList) def EVT_LEVELLIST_DOWN(self, event): """ when the player tells us to go right, we should move the hero to the right in our world. """ #self.hero.run(RIGHT) #self.moveDown(); print "DOWN" self.selected += 1 if self.selected >= len(self.roomList): self.selected = len(self.roomList)-1 def EVT_LEVELLIST_UP(self, event): #self.hero.run(LEFT) self.selected-=1 if self.selected < 0: self.selected = 0 def EVT_LEVELLIST_ENTER(self, event): self.done = True print "SELECTED %s" % self.roomList[self.selected] self.next = Game(self.display, roomName=self.roomList[self.selected]) def EVT_KeyDown(self, event): if not self.done: if event.key == pg.K_UP: eventnet.driver.post(LEVELLIST.UP) elif event.key == pg.K_DOWN: eventnet.driver.post(LEVELLIST.DOWN) elif event.key == pg.K_RETURN: eventnet.driver.post(LEVELLIST.ENTER) def tick(self): self.display.clear() i = 0 for x in self.roomList: if i == self.selected: color = (255,255,255,255) else: color = (200,200,200,255) self.display.text (x[:len(x)], self.FONTSIZE, [320, 240-len(self.roomList)*self.FONTSIZE/1.3+i*self.FONTSIZE/1.3], color, Display.CENTER) i+=1 self.display.flip() def kick(self): super(LevelList, self).kick() self.selected = 0 self.tick()