Exemplo n.º 1
0
    def __init__(self):
        super().__init__()
        self.time = 0
        self.last_click = -1
        self.last_start = -1

        self.player = Player()
        self.enemy = Enemy()
        self.dialog_box = DialogBox()
        self.background = load_texture(MAIN_PIC)
        self.sprite_manager = SpriteManager()
        self.set_buttons()
        self.sprite_manager.setup()
        self.enemy.setup()
Exemplo n.º 2
0
	def __init__(self):
		# create main game window
		super(GameController, self).__init__(1280, 720, "Panda Runner")

		# setup various managers
		self.screenManager = ScreenManager(self)
		self.stateManager = StateManager(self)
		self.spriteManager = SpriteManager()

		# load spritesheet and probably sounds in the future
		self.loadResources()
		self.start()
Exemplo n.º 3
0
class GameController(pyglet.window.Window):
	"""docstring for GameController"""
	def __init__(self):
		# create main game window
		super(GameController, self).__init__(1280, 720, "Panda Runner")

		# setup various managers
		self.screenManager = ScreenManager(self)
		self.stateManager = StateManager(self)
		self.spriteManager = SpriteManager()

		# load spritesheet and probably sounds in the future
		self.loadResources()
		self.start()

	def start(self):
		# schedule update function to be called every frame
		# I need to add some sort of FPS setting here
		clock.schedule(self.update)

		# instantiate the main game instance
		# this will be changed to the menu instance when it's implemented
		gameState = Game(self)
		self.stateManager.addState('game', gameState)
		self.stateManager.setState('game')

	# prepare various resources such as sprite sheets and sounds
	def loadResources(self):
		self.spriteManager.newSheet('main', 'sprites.png')

	# Main update function
	def update(self, dt):
		self.screenManager.update(dt)
		self.draw()

	#main draw function
	def draw(self):
		self.screenManager.draw()
Exemplo n.º 4
0
    def __init__(self, imagePath="", width=640, height=480):
        #Sets image, if no image generates a blank surface
        try:
            self.surface = pygame.image.load(imagePath)
        except:
            self.surface = pygame.Surface([width, height])
        #Sets up rect
        self.rect = self.surface.get_rect()
        self.moves = 0
        self.grid = Grid()
        self.player = Player()
        #Squares
        self.tileManager = SpriteManager()
        #Star Squares
        self.diamondManager = SpriteManager()
        #Walls
        self.wallManager = SpriteManager()
        #Crates
        self.crateManager = SpriteManager()

        self.startLevel(0)

        self.surface.fill(Scene._Colours["red"])
Exemplo n.º 5
0
if __name__ == '__main__':
    from SpriteManager import SpriteManager
    import pygame

    pygame.init()
    screen = pygame.display.set_mode((500, 500))
    sprite_manager = SpriteManager('../img/')


class Ball:
    sprite_manager.load_sprites('balls.png', (50, 50))

    ball_types = [(0, 0), (1, 0), (2, 0)]

    rect = pygame.Rect((0, 0, 50, 50))
    sprite = sprite_manager('balls', (0, 0))
    sprite_shadow = sprite_manager('balls', (0, 1))

    def __init__(self, rect, shadow=None):
        self.rect = rect
        if shadow:
            self.shadow = shadow

    @classmethod
    def change_sprite(cls, val):
        s, _ = Ball.ball_types[val.value]
        cls.sprite = sprite_manager('balls', (s, 0))
        cls.sprite_shadow = sprite_manager('balls', (s, 1))


class Hole(Ball):
Exemplo n.º 6
0
class Room(object):
    """Main game scene that will be drawn onto another scene that will contain UI elements"""
    def __init__(self, imagePath="", width=640, height=480):
        #Sets image, if no image generates a blank surface
        try:
            self.surface = pygame.image.load(imagePath)
        except:
            self.surface = pygame.Surface([width, height])
        #Sets up rect
        self.rect = self.surface.get_rect()
        self.moves = 0
        self.grid = Grid()
        self.player = Player()
        #Squares
        self.tileManager = SpriteManager()
        #Star Squares
        self.diamondManager = SpriteManager()
        #Walls
        self.wallManager = SpriteManager()
        #Crates
        self.crateManager = SpriteManager()

        self.startLevel(0)

        self.surface.fill(Scene._Colours["red"])

    #Getters
    def getLevel(self):
        return self.level

    def getTotalMoves(self):
        return self.totalMoves

    def getMoves(self):
        return self.moves

    #Setters
    def setLevel(self, value):
        self.level = value

    def setTotalMoves(self, value):
        self.totalMoves = value

    def setMoves(self, value):
        self.moves = value

    #Moves
    def incrementMoves(self):
        self.totalMoves += 1
        self.moves += 1

    #Draw
    def draw(self, surface):
        self.tile

    #Setup
    def setup(self):
        self.grid.reset()
        self.player.setCoordinates((2, 4))
        self.grid.addItem(self.player.getCoordinates(), self.player)

        self.tileManager.setup(GridSquare.generate(16),
                               [(0, 2), (0, 3), (0, 4), (1, 2), (1, 5), (2, 2),
                                (2, 3), (2, 4), (2, 5), (2, 6), (3, 2), (3, 4),
                                (3, 5), (3, 6), (4, 3), (4, 4)])
        self.diamondManager.setup(GridSquareStar.generate(2), [(0, 5), (4, 2)])
        self.wallManager.setup(Wall.generate(3), [(1, 3), (1, 4), (3, 3)])
        self.crateManager.setup(Crate.generate(2), [(1, 2), (3, 5)])

        self.grid.addItemsBySpriteManager(self.tileManager)
        self.grid.addItemsBySpriteManager(self.diamondManager)
        self.grid.addItemsBySpriteManager(self.wallManager)
        self.grid.addItemsBySpriteManager(self.crateManager)

    #Event Handlers
    def eventManager(self, events):
        for event in events:
            if event.type == pygame.QUIT:
                self.quit()
            elif event.type == pygame.KEYDOWN:
                self.keyPress(event)

    def keyPress(self, event):
        if event.key == 119:  #W key
            self.playerMove("up")
        if event.key == 115:  #S key
            self.playerMove("down")
        if event.key == 97:  #A key
            self.playerMove("left")
        if event.key == 100:  #D key
            self.playerMove("right")

    def quit(self):
        pygame.quit()
        sys.exit()

    #Special
    def fillSpaceWithWalls(self):
        currentGridItems = self.grid.getGridItems()
        rows = len(currentGridItems)
        collums = len(currentGridItems[0])
        for i in range(0, rows):
            for j in range(0, collums):
                if not currentGridItems[i][j]:
                    wall = Wall()
                    self.wallManager.add(wall, (i, j))

    #Used to predict where a sprite will be if it were to move a certain direction
    def predictCoordinates(self, currentCoordinates, direction):
        if direction.lower() == "up":
            possibleCoordinates = (currentCoordinates[0] - 1,
                                   currentCoordinates[1])
        elif direction.lower() == "down":
            possibleCoordinates = (currentCoordinates[0] + 1,
                                   currentCoordinates[1])
        elif direction.lower() == "left":
            possibleCoordinates = (currentCoordinates[0],
                                   currentCoordinates[1] - 1)
        elif direction.lower() == "right":
            possibleCoordinates = (currentCoordinates[0],
                                   currentCoordinates[1] + 1)

        return possibleCoordinates

    #Checks if player can move and handles events
    def playerMove(self, direction):
        currentCoordinates = self.player.getCoordinates(
        )  #Gets current coordinates
        possibleCoordinates = self.predictCoordinates(currentCoordinates,
                                                      direction)
        isLevelOver = False

        try:  #Catches out of range exeption if player tries to move out of grid and there is no wall
            items = self.grid.getItems(possibleCoordinates[0],
                                       possibleCoordinates[1])
            print items
            if items and possibleCoordinates[0] >= 0 and possibleCoordinates[
                    1] >= 0:
                for i in range(0, len(items)):
                    if items[i].__class__.__name__ == "Wall":
                        return  #Returns if player hits a wall
                    elif items[i].__class__.__name__ == "Crate":
                        crateMoved = self.crateMove(items[i], direction)
                        isLevelOver = self.cratesCheck()
                        if not crateMoved:
                            return  #returns if crate can't move
                        elif isLevelOver:
                            self.levelOver()
                    elif items[i].__class__.__name__ == "GridSquare":
                        pass
                #Player will only move if none of the above are met
                if not isLevelOver:
                    self.incrementMoves()
                    self.player.move(
                        self.grid.getPosition(possibleCoordinates),
                        possibleCoordinates)
                    self.grid.addItem(self.player.getCoordinates(),
                                      self.player)
                    return

        except:
            print "Exception"

    #Checks if crate can move and then returns true if player can push crate
    def crateMove(self, crate, direction):
        currentCoordinates = crate.getCoordinates()
        possibleCoordinates = self.predictCoordinates(currentCoordinates,
                                                      direction)

        try:  #Catches out of range exeption if player tries to move out of grid and there is no wall
            items = self.grid.getItems(possibleCoordinates[0],
                                       possibleCoordinates[1])
            if items and possibleCoordinates[0] >= 0 and possibleCoordinates[
                    1] >= 0:
                for i in range(0, len(items)):
                    if items[i].__class__.__name__ == "Wall":
                        return False
                    elif items[i].__class__.__name__ == "Crate":
                        return False
                    else:
                        crate.move(self.grid.getPosition(possibleCoordinates),
                                   possibleCoordinates)
                        self.grid.addItem(crate.getCoordinates(), crate)
                        for i in range(0, len(items)):
                            if isinstance(items[i], GridSquareStar):
                                print "Grid star"
                                crate.image.fill((0, 255, 0))
                                return True
                            else:
                                crate.image.fill((128, 0, 0))
                                return True
                        return True  #return true if it moved
            return False

        except:
            print "Exception"

    #Checks if all crates are on star squares
    def isGameOver(self):
        crates = self.crateManager.getSprites()
        items = self.grid.getGridItems()
        counter = 0
        # print items
        for i in range(0, len(crates)):
            crateCoord = crates[i].getCoordinates()
            tempRow = items[crateCoord[0]]
            tempCol = tempRow[crateCoord[1]]
            for j in tempCol:
                if isinstance(j, GridSquareStar):
                    counter += 1
        if counter == len(crates):
            return True
        else:
            return False
Exemplo n.º 7
0
class MainView(View):

    def __init__(self):
        super().__init__()
        self.time = 0
        self.last_click = -1
        self.last_start = -1

        self.player = Player()
        self.enemy = Enemy()
        self.dialog_box = DialogBox()
        self.background = load_texture(MAIN_PIC)
        self.sprite_manager = SpriteManager()
        self.set_buttons()
        self.sprite_manager.setup()
        self.enemy.setup()

    def set_buttons(self):
        for i in range(SHIPS_COUNT):
            button = Button(BUTTON_X, BUTTON_Y[i], BUTTON_WIDTH[i], BUTTON_HEIGHT,
                            SHIPS_NAME[i] + '\n' + str(SHIPS_COST[i]) + '$', SHIPS_NAME[i], BUTTON_FONT_SIZE)
            self.button_list.append(button)
        self.button_list.append(self.dialog_box.supply_button)
        self.button_list.append(self.dialog_box.weapon_button)
        self.button_list.append(self.dialog_box.go_button)

    def on_draw(self):
        start_render()
        draw_lrwh_rectangle_textured(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, self.background)

        for button in self.button_list:
            button.draw()
        self.dialog_box.draw()
        self.sprite_manager.draw_sprites()
        self.player.draw()

    def on_update(self, delta_time):
        new_ship = self.enemy.on_update(delta_time, self.sprite_manager.game_state())
        if new_ship is not None:
            self.sprite_manager.add_enemy_ship(new_ship)
        self.sprite_manager.update(delta_time)
        self.player.money_increase(self.sprite_manager.player_fight_benefit())
        self.enemy.money_increase(self.sprite_manager.enemy_fight_benefit())
        for i in range(SHIPS_COUNT):
            if self.button_list[i].pressed:
                self.dialog_box.curr = i
                self.dialog_box.update()
        self.update_buttons(delta_time)
        self.time += delta_time

        status = self.sprite_manager.check_end_game()
        if status != 0:
            final_view = DefeatView() if status == 1 else WinView()
            self.window.show_view(final_view)

    def clone(self, number: int):
        self.player.set_builder(number)
        fighter = self.player.clone()
        if self.dialog_box.weapon_button.checked:
            fighter = WeaponDecorator(fighter)
        if self.dialog_box.supply_button.checked:
            fighter = SupplyDecorator(fighter)
        if self.player.money < fighter.get_cost():
            return
        fighter.center_x = PLAYER_LOCATION_X
        fighter.center_y = PLAYER_LOCATION_Y
        fighter.change_x = FIGHTERS_SPEED
        fighter.side = 'player'
        self.sprite_manager.add_ship(fighter)
        self.player.money_decrease(fighter.cost)

    def lock_buttons(self, button):
        button.locked = True
        self.last_click = self.time

    def update_buttons(self, delta_time):
        if self.dialog_box.supply_button.pressed and self.time > self.last_click + TIME_DELAY * delta_time:
            self.last_click = self.time
            self.dialog_box.supply_button.checked = not self.dialog_box.supply_button.checked
        if self.dialog_box.weapon_button.pressed and self.time > self.last_click + TIME_DELAY * delta_time:
            self.last_click = self.time
            self.dialog_box.weapon_button.checked = not self.dialog_box.weapon_button.checked
        if self.dialog_box.go_button.pressed and not self.dialog_box.go_button.checked:
            self.clone(self.dialog_box.curr)
            self.dialog_box.go_button.checked = True
            self.dialog_box.supply_button.checked = False
            self.dialog_box.weapon_button.checked = False
            self.last_start = self.time
        if self.time > self.last_start + BUTTON_DELAY:
            self.dialog_box.go_button.checked = False
        if SHIPS_COST[self.dialog_box.curr] > self.player.money:
            self.dialog_box.go_button.locked = True
        else:
            self.dialog_box.go_button.locked = False

        if SHIPS_COST[self.dialog_box.curr] + EXTRA_SUPPLY_COST > self.player.money or \
                self.dialog_box.weapon_button.checked and \
                SHIPS_COST[self.dialog_box.curr] + EXTRA_WEAPON_COST + EXTRA_SUPPLY_COST > self.player.money:
            self.dialog_box.supply_button.locked = True
        else:
            self.dialog_box.supply_button.locked = False

        if SHIPS_COST[self.dialog_box.curr] + EXTRA_WEAPON_COST > self.player.money or \
                self.dialog_box.supply_button.checked and \
                SHIPS_COST[self.dialog_box.curr] + EXTRA_WEAPON_COST + EXTRA_SUPPLY_COST > self.player.money:
            self.dialog_box.weapon_button.locked = True
        else:
            self.dialog_box.weapon_button.locked = False