Esempio n. 1
0
    def __init__(self, pos: numpy.array, model: str, scaleConst: Tuple[float,
                                                                       float],
                 updateInterval: int, probability: float, powerCache: Dict):
        self.model = model
        self.probability = probability
        self.spritePath = Path('Assets') / Path('Images') / Path(
            'Sprites') / Path('PowerUps') / Path(self.model) / Path('Solid')
        self.powerCache = powerCache

        def imageLoader(inPath: Path):
            image = self.powerCache[inPath]
            return image

        self.Images = imageGroup.ImageGroup(imageFolderPath=self.spritePath,
                                            imageLoader=imageLoader)
        self.Sprite = Sprite.Sprite(self.Images, scaleConst, updateInterval,
                                    (pos[0], pos[1]))
        if Cs.BLOOM:
            self.bloomPath = Path('Assets') / Path('Images') / Path(
                'Sprites') / Path('PowerUps') / Path(
                    self.model) / Path('Bloom')
            self.bloomImages = imageGroup.ImageGroup(
                imageFolderPath=self.bloomPath, imageLoader=imageLoader)
            self.bloomSprite = Sprite.Sprite(self.bloomImages, scaleConst,
                                             updateInterval, (pos[0], pos[1]))
        super().__init__(posVector=pos,
                         sprite=self.Sprite,
                         limPos=numpy.array(Cs.GameStage),
                         angularAcc=0,
                         angularSpeed=0,
                         angularDisplacement=0)
Esempio n. 2
0
class Bonus:

    def __init__(self, pos, bonus, image):
        self.__bonus_info = ImageInfo([45, 45], [90, 90], 40)
        self.pos = [pos[0],pos[1]]
        self.type = bonus
        self.angle = 0
        self.angle_vel = 0.003

        self.sprite = Sprite(pos, [0.0, 0.0], self.angle, self.angle_vel, image,
                             self.__bonus_info, WIDTH, HEIGHT)


    def get_sprite(self):
        return self.sprite

    def get_bonus_type(self):
        return self.type

    def get_position(self):
        return self.pos

    def update(self):
        self.sprite.update()

    def draw(self, canvas):
        #angle
        self.angle += self.angle_vel
        #position (static)
        self.pos[0] += self.pos[0]
        self.pos[1] += self.pos[1]
        self.sprite.draw(canvas)

    def collide(self, other_object):
        return self.sprite.collide(other_object)
Esempio n. 3
0
    def __init__(self, posn, width, height=None):
        self.title = Sprite.TextDisplayer()
        self.title.setText("Tile Info")
        self.displayers = [self.title]

        self.numBoxes = 8
        self.outputBoxes = [
            Sprite.TextDisplayer() for i in xrange(0, self.numBoxes)
        ]
        self.outputTitles = [
            Sprite.TextDisplayer() for i in xrange(0, self.numBoxes)
        ]
        self.outputTitles[0].setText("Tag:")
        self.outputTitles[1].setText("Top Texture:")
        self.outputTitles[2].setText("Top Color:")
        self.outputTitles[3].setText("Side Textures:")
        self.outputTitles[4].setText("Side Colors:")
        self.outputTitles[5].setText("")
        self.outputTitles[6].setText("")
        self.outputTitles[7].setText("")

        for i in xrange(0, len(self.outputBoxes)):
            if len(self.outputTitles[i].getText()) > 0:
                self.displayers.append(self.outputTitles[i])
            self.displayers.append(self.outputBoxes[i])

        self.posn = posn
        self.width = width
        self.height = height
        self.borderListID = -1
        self.borderTexture = -1
        self._showing = False
Esempio n. 4
0
def load_map(water_coord, zones):
    #map load
    #n^2 operation can I make it more efficient?
    new_path = os.path.relpath('..\\maps\\map1.txt')
    mapFile = open(new_path)
    map_array = []
    #create map_array
    for row in mapFile:
        row = row.strip()
        row_array = []
        if row[0] == "#":  #First checks the line if it designates a zone
            #Zone line format is "#x1-x2,y1-y2" with x1 and y1 < x2 and y2 respectively
            dashx = row.find("-", 1)
            dashy = row.find("-", dashx + 1)
            sep = row.find(",")
            zones.append(
                Zone(int(row[1:dashx]), int(row[dashx + 1:sep]),
                     int(row[sep + 1:dashy]), int(row[dashy + 1:])))
        else:
            for tile in row:
                row_array.append(tile)
            map_array.append(row_array)

    for i in range(len(map_array)):
        for j in range(len(map_array[0])):
            tile = map_array[i][j]
            if tile == "*":
                map_array[i][j] = Sprite((j, i), green)
            elif tile == "b":
                map_array[i][j] = Sprite((j, i), brown)
            elif tile == "w":
                map_array[i][j] = Sprite((j, i), water_blue)
                water_coord.append((j, i))

    return map_array
Esempio n. 5
0
    def game_init(self):

        #游戏初始化
        pygame.init()
        #设置游戏屏幕大小
        self.screen = pygame.display.set_mode((cfg.sc_width, cfg.sc_height))

        #设置游戏标题
        pygame.display.set_caption("打砖块游戏")

        #设置游戏字体
        self.font = pygame.font.Font(None, 36)

        #设置游戏时钟
        self.timer = pygame.time.Clock()

        #设置游戏相关精灵组
        self.paddle_group = pygame.sprite.Group()
        self.block_group = pygame.sprite.Group()
        self.ball_group = pygame.sprite.Group()

        #加载挡板并设置位置
        self.paddle = Sprite(self.screen)
        self.paddle.load("pic/paddle.png")
        self.paddle.set_pos((250, 460))
        self.paddle_group.add(self.paddle)

        #加载小球并设置位置
        self.ball = Sprite(self.screen)
        self.ball.load("pic/ball.png")
        self.ball.set_pos((250, 450))
        self.ball_group.add(self.ball)
Esempio n. 6
0
 def set_up_stats(self):
     self.killslabel = Sprite.Text(
         50, 50, pygame.font.Font('assets/fonts/joystix.ttf', 24), "Kills",
         (255, 255, 255))
     self.killsamount = Sprite.Text(
         300, 50, pygame.font.Font('assets/fonts/joystix.ttf', 24),
         str(ScreenManager.playerStats.kills), (255, 223, 0))
     self.gameplayedlabel = Sprite.Text(
         50, 80, pygame.font.Font('assets/fonts/joystix.ttf', 24),
         "Games Played", (255, 255, 255))
     self.gameplayedamount = Sprite.Text(
         300, 80, pygame.font.Font('assets/fonts/joystix.ttf', 24),
         str(ScreenManager.playerStats.gamesPlayed), (255, 223, 0))
     self.totaltimelabel = Sprite.Text(
         50, 110, pygame.font.Font('assets/fonts/joystix.ttf', 24),
         "Time Played", (255, 255, 255))
     self.totaltimeamount = Sprite.Text(
         300, 110, pygame.font.Font('assets/fonts/joystix.ttf', 24),
         str(ScreenManager.playerStats.totalPlaytime // 1000) + " seconds",
         (255, 223, 0))
     self.longestgamelabel = Sprite.Text(
         50, 140, pygame.font.Font('assets/fonts/joystix.ttf', 24),
         "Longest Game", (255, 255, 255))
     self.longestgameamount = Sprite.Text(
         300, 140, pygame.font.Font('assets/fonts/joystix.ttf', 24),
         str(ScreenManager.playerStats.longestGame // 1000) + " seconds",
         (255, 223, 0))
     self.failedwordslabel = Sprite.Text(
         50, 170, pygame.font.Font('assets/fonts/joystix.ttf', 24),
         "Words Failed", (255, 255, 255))
     self.failedwordsamount = Sprite.Text(
         300, 170, pygame.font.Font('assets/fonts/joystix.ttf', 24),
         str(ScreenManager.playerStats.failedWords), (255, 223, 0))
Esempio n. 7
0
 def reset(self):
     self.sprites = []
     for x in range(20):
         self.sprites.append(Sprite(self.rm.getAnimation("ahhh"),
                                    self.size))
     for x in range(20):
         self.sprites.append(
             Sprite(self.rm.getImage("cronoflip"), self.size))
Esempio n. 8
0
def draw(ship):
   for startPoint, endPoint, color, forShip in vectorsToDraw:
      if ship == forShip:
         length = vectorDistance(startPoint, endPoint)
         rotation = vectorDirection(vectorOffset(endPoint, startPoint))
         scale = length / 200.0

         Sprite.draw("vector-%s" % (color,), position=startPoint, scale=scale, rotation=rotation)
Esempio n. 9
0
def start(surface, hasLog=False, notBeginning=False):
    global running, dest_x, dest_y
    running = True
    background = Level.Level(
        pygame.image.load(os.path.join("images", "forest_1.jpg")))
    player = Sprite.Sprite(
        pygame.image.load(os.path.join("images", "frank.png")))
    fire = Sprite.Sprite(pygame.image.load(os.path.join("images", "fire.gif")))
    cursor = POINT
    TEXT = ""
    isEnd = False
    initializeSprites(player, fire)
    addObjects(background)
    if (notBeginning):
        player_x, player_y = 647, 640
        dest_x, dest_y = 647, 720
    else:
        player_x, player_y = 1050, 900
    fire_thread = threading.Thread(target=changeFire, args=(fire, ))
    frank_thread = threading.Thread(target=changeFrank, args=(player, ))
    fire_thread.start()
    frank_thread.start()
    while (running):
        m_x, m_y = pygame.mouse.get_pos()
        handleEvents((m_x, m_y))
        player_x, player_y = move(player_x, player_y, player, background)
        if (background.doors["door"].collidepoint((m_x, m_y))):
            cursor = ARROW
        elif (background.grabs["fire"].collidepoint((m_x, m_y))):
            cursor = GRAB
            TEXT = "\"...I was in the greatest fear lest my fire should be extinguished.\""
        else:
            cursor = POINT
            TEXT = ""
        p_rect = pygame.Rect(player_x, player_y, player.width, player.height)
        if (hasLog and p_rect.colliderect(background.grabs["fire"])
                and background.grabs["fire"].collidepoint((dest_x, dest_y))):
            fire.setY(100)
            end_thread = threading.Thread(target=end)
            end_thread.start()
        if (p_rect.colliderect(background.doors["door"])
                and background.doors["door"].collidepoint((dest_x, dest_y))):
            running = False
            return False
        bottom_text = smallFont(TEXT, (255, 255, 255))
        surface.blit(background.image, (0, 0))
        if (player_y + player.height - player.y <= 825 + fire.height):
            surface.blit(player.image, (player_x, player_y), (player.crop()))
            surface.blit(fire.image, (300, 825), (fire.crop()))
        else:
            surface.blit(fire.image, (300, 825), (fire.crop()))
            surface.blit(player.image, (player_x, player_y), (player.crop()))
        surface.blit(bottom_text, ((1280 - bottom_text.get_width()),
                                   (960 - bottom_text.get_height())))
        surface.blit(cursor, (m_x + (cursor.get_width() / 2), m_y +
                              (cursor.get_height() / 2)))
        pygame.display.flip()
    return True
Esempio n. 10
0
	def create_settler(self, x, y):
		""" Adds a settler to be drawn on the screen at position x, y and returns a reference to this settler. """

		sprite = Sprite (self.viewspace, self.settsurf)
		sprite.x = x
		sprite.y = y
		sprite.configAnimation (True, 0, 24, 25)
		self.sprites.append(sprite)
		return sprite
Esempio n. 11
0
def main():
    #creating a TK object, putting a canvas element on it
    tk = Tk()
    tk.title("Game demo")
    canvas = Canvas(tk, width=550, height=400, bd=0, highlightthickness=0)
    canvas.pack()
    tk.update()

    #creating the two sprites using test.gif
    sprite1 = Sprite(canvas, "test.gif", 1, 1, [75, 75])
    sprite2 = Sprite(canvas, "test.gif", 2, 2, [300, 300])
    keepGoing = True

    #loop to run the program, checks for a collision, and updates canvas
    while keepGoing:

        if (sprite1.checkCollision(sprite2)):
            print("collision")
        sprite1.draw()
        sprite2.draw()

        tk.update_idletasks()
        tk.update()
        #ms delay between frames
        time.sleep(0.10)
Esempio n. 12
0
    def loadSprites(self):

        # Creating an instance of the map class. level1 is now a Map object.
        level1 = Map.Map()
        # Calling the layout function from the Map class. Returns a double matrix full of numbers.
        layout = level1.getLayout()
        # Calling the getSprites function from the Map class. Returns a list full of images with their respective paths.
        img_list = level1.getSprites()

        # Calculating the centers of each block size.
        x_offset = (level1.BLOCK_SIZE / 2) + 220
        y_offset = (level1.BLOCK_SIZE / 2)

        # Creating a double matrix that goes through the double matrix from layout. Should go column by column.
        for row in range(len(layout)):
            for col in range(len(layout[row])):

                # Calculating the center point of each rect.
                center_point = [(col * level1.BLOCK_SIZE) + x_offset,
                                (row * level1.BLOCK_SIZE) + y_offset]
                # center_point = [(col * level1.BLOCK_SIZE), (row * level1.BLOCK_SIZE)]
                # Checking to see if the index variable is equal to the saved block variable.
                if layout[row][col] == level1.BLOCK:
                    # Create a block sprite and add it to a sprite group.
                    self.block_sprites.add(
                        Sprite.Sprite(center_point, img_list[0])
                    )  # Hard coding 0 into this. Should be level1.BLOCK
                    # Create an equivalent rect of the wall and add it to an array.
                    self.walls.append(
                        pygame.Rect(center_point[0] - (level1.BLOCK_SIZE / 2),
                                    center_point[1] - (level1.BLOCK_SIZE / 2),
                                    level1.BLOCK_SIZE, level1.BLOCK_SIZE))
                # Checking to see if the index variable is equal to the saved PACMAN variable.
                elif layout[row][col] == level1.PACMAN:
                    # Create an object of the Pacman class and save it to the pacman variable.
                    self.pacman = Pacman(center_point, img_list[1],
                                         level1.BLOCK_SIZE)
                    # Adding an equivalent Sprite to a sprite group. THIS MAY NOT BE NECESSARY
                    self.pacman_sprite_group.add(
                        Sprite.Sprite(center_point, img_list[1]))
                # Checking to see if the index variable is equal to the saved FOOD variable.
                elif layout[row][col] == level1.FOOD:
                    # Creating sprites and adding them to a sprite group.
                    self.food_sprites.add(
                        Sprite.Sprite(center_point, img_list[2]))
                elif layout[row][col] == level1.Ghost1:
                    # Create an object of the Ghost class and save it to the ghost1 variable.
                    self.ghost1 = Ghost(center_point, img_list[3],
                                        level1.BLOCK_SIZE)
                elif layout[row][col] == level1.Ghost2:
                    self.ghost2 = Ghost(center_point, img_list[4],
                                        level1.BLOCK_SIZE)
                elif layout[row][col] == level1.Ghost3:
                    self.ghost3 = Ghost(center_point, img_list[5],
                                        level1.BLOCK_SIZE)
Esempio n. 13
0
 def __init__(self, posn, width):
     self.numBoxes = 1
     title = Sprite.TextDisplayer()
     title.setText("Add Tag Dialog")
     inputBoxes = [InputBox() for i in xrange(0, self.numBoxes)]
     inputTitles = [
         Sprite.TextDisplayer() for i in xrange(0, self.numBoxes)
     ]
     inputTitles[0].setText("Filename:")
     Dialog.__init__(self, title, inputBoxes, inputTitles, posn, width)
     self.state = 0
Esempio n. 14
0
 def __init__(self):
     self.player = None
     self.computer = None
     self.wooden_button = ShopButton(
         Sprite.Sprite(pygame.image.load('images/WoodenButton.png')),
         WOODEN, self, 233, 32)
     self.bronze_button = ShopButton(
         Sprite.Sprite(pygame.image.load('images/BronzeButton.png')),
         BRONZE, self, 305, 32)
     self.silver_button = ShopButton(
         Sprite.Sprite(pygame.image.load('images/SilverButton.png')),
         SILVER, self, 377, 32)
Esempio n. 15
0
    def __init__(self, w, h, playerStats):
        super().__init__(w, h)
        self.tmpStats = GameStats.GameStats()

        self.gameover = False
        self.backbuffer = pygame.Surface((640, 360))
        self.backbuffer.fill((0, 0, 0))
        self.backbuffer.set_alpha(200)
        self.gameoverlabel = Sprite.Text(
            320, 80, pygame.font.Font('assets/fonts/Bungee-Regular.ttf', 48),
            "Game Over", (255, 0, 0))
        self.gameoverlabel.set_draw_to_center()
        self.replaybutton = Sprite.TextButton(
            320, 180, pygame.font.Font('assets/fonts/joystix.ttf', 24),
            "Restart Game", (255, 255, 255))
        self.replaybutton.set_draw_to_center()
        self.backbutton = Sprite.TextButton(
            320, 240, pygame.font.Font('assets/fonts/joystix.ttf', 24),
            "Back To Title", (255, 255, 255))
        self.backbutton.set_draw_to_center()

        self.background = pygame.image.load('assets/desertbg.png')
        self.ground = pygame.image.load('assets/ground.png')
        self.barrier = Sprite.Barrier(60, 172, 64, 128)

        self.shooter = Sprite.Shooter(20, 180, 64, 64)

        self.textinput = pygame_textinput.TextInput(
            '', 'assets/fonts/joystix.ttf', 20, True, (255, 255, 255),
            (0, 0, 1), 400, 35, 9)

        self.totaltime = 0
        self.timelabel = Sprite.Text(
            420, 310, pygame.font.Font('assets/fonts/Bungee-Regular.ttf', 16),
            'Time Elapsed: ', (255, 255, 255))
        self.timeamount = Sprite.Text(
            580, 310, pygame.font.Font('assets/fonts/Bungee-Regular.ttf', 16),
            '0', (255, 255, 255))
        self.zombieskilled = 0
        self.zombieskilledlabel = Sprite.Text(
            420, 330, pygame.font.Font('assets/fonts/Bungee-Regular.ttf', 16),
            'Zombies Killed: ', (255, 255, 255))
        self.zombieskilledamount = Sprite.Text(
            580, 330, pygame.font.Font('assets/fonts/Bungee-Regular.ttf', 16),
            '0', (255, 255, 255))
        self.difficultylabel = Sprite.Text(
            620, 20, pygame.font.Font('assets/fonts/Bungee-Regular.ttf', 16),
            '1', (255, 255, 255))

        self.ticksToNextZombie = randint(20, 60)

        self.set_up_game()
Esempio n. 16
0
 def __init__(self):
     self.step1_sound = pygame.mixer.Sound('assets/sfx/step1.wav')
     self.step2_sound = pygame.mixer.Sound('assets/sfx/step2.wav')
     self.flight1_sound = pygame.mixer.Sound('assets/sfx/flight.aiff')
     #self.flight2_sound = pygame.mixer.Sound('assets/sfx/flight2.mp3')
     self.hit_sound = pygame.mixer.Sound('assets/sfx/hit.wav')
     #self.win_sound = pygame.mixer.Sound('assets/sfx/win.wav')
     self.baton_sprite = Sprite.Sprite(
         pygame.image.load('assets/sprites/baton.png'))
     self.duck_sprite = Sprite.Sprite(
         pygame.image.load('assets/sprites/duck.jpg'))
     self.duck2_sprite = Sprite.Sprite(
         pygame.image.load('assets/sprites/duck2.png'))
Esempio n. 17
0
    def __init__(self):
        self.current_state = 2
        self.card_on_hand = None

        # <Sprites> Спрайты

        self.gameBoard = pygame.image.load('images/gameBoard.png')

        # </Sprites>

        # <GameThings> Разное
        self.shop = Shop.Shop()
        self.computer = AI.AI(self.shop)
        self.computer.tower = Tower.Tower(self.computer, False)

        self.player = Player.Player("abc", self.shop, self.computer)
        self.player.tower = Tower.Tower(self.player, True)

        self.computer.opponent = self.player
        self.shop.player = self.player
        self.shop.computer = self.computer

        self.timer = Timer(20)
        self.end_turn = False
        # </GameThings>
        # <GameButtons>
        self.end_turn_button = GameButton(
            Sprite.Sprite(pygame.image.load('images/EndTurnButton.png')), 750,
            12)
        self.delete_card_button = GameButton(
            Sprite.Sprite(pygame.image.load('images/DeleteButton.png')), 960,
            569)

        # </GameButtons>
        # <Cards> Карты

        self.all_cards = []
        self.player.cards = []

        #Предлагаю складывать карты не по номерам, а по ссылкам
        #Ссылки в python есть!

        #Сделать!
        #for i in range(0, 5):
        #    card_ = Card.Card(...)
        #    player.cards.append(card_)

        # </Cards>

        #<Временное>
        self.getStartCards()
Esempio n. 18
0
    def __init__(self, fullscreen, width):
        """Initializes the main window."""
        global _mainWindow
        _mainWindow = self

        self._input = Input.Input(0)

        self._limitFPS = True

        self._fullscreen = fullscreen
        self._fullscreenSize = self._chooseDisplaySize()
        self._defaultSize = (width, width * 3 / 4)

        if fullscreen:
            self._size = self._fullscreenSize
        else:
            self._size = self._defaultSize

        self._fpsDisplayer = Sprite.FPSDisplayer()
        self._delegate = None
        self._soundEnabled = True

        pygame.display.set_icon(Resources.image("icon-32"))
        self._setDisplayMode()
        self._resize()
        self._initOpenGL()

        if self._fullscreen:
            pygame.mouse.set_pos((0, 0))
Esempio n. 19
0
def load_settings():
    screen_size = (700, 550)
    screen = pygame.display.set_mode(screen_size)
    game_object = {
        'player': [],
        'tile': [],
        'collider': [],
        'bg': [],
        'objective': []
    }
    var = {
        'folder':
        os.path.dirname(os.path.realpath(__file__)),
        'total_maps':
        len(
            os.listdir(
                os.path.dirname(os.path.realpath(__file__)) +
                '/assets/img/map')),
        'camera': [Camera(screen_size)]
    }
    game_object['bg'].append(
        Sprite((0, 0), var['folder'] + '/assets/img/tile/bg.png'))
    game_object['bg'][0].img = pygame.transform.scale(game_object['bg'][0].img,
                                                      screen_size)
    return {
        'screen_size': screen_size,
        'screen': screen,
        'game_object': game_object,
        'var': var,
        'layers': ['bg', 'tile', 'player', 'objective']
    }
 def __init__(self,
              x=const.SCREEN_W / 2,
              y=const.SCREEN_H / 2,
              speed=const.PLAYER_SPEED):
     super().__init__(
         x,
         y,
         speed,
         Sprite(
             [pygame.image.load("images/Rabbit_Idle_Front.png")],  #standing
             [pygame.image.load("images/Rabbit_Idle_Left.png")],  #left
             [pygame.image.load("images/Rabbit_Idle_Right.png")],  #right
             [pygame.image.load("images/Rabbit_Idle_Back.png")],  #up
             [pygame.image.load("images/Rabbit_Idle_Front.png")]))  #down
     # amount of time after death player is invuln
     self.last_move = LEFT
     self.invuln = 0
     self.spawn_at = None
     self.death_sequence = [
         pygame.image.load("images/Rabbit_Death_1.png"),
         pygame.image.load("images/Rabbit_Death_2.png"),
         pygame.image.load("images/Rabbit_Death_3.png"),
         pygame.image.load("images/Rabbit_Death_4.png"),
         pygame.image.load("images/Rabbit_Death_5.png"),
         pygame.image.load("images/Rabbit_Death_6.png"),
         pygame.image.load("images/Rabbit_Death_7.png"),
         pygame.image.load("images/Rabbit_Death_8.png")
     ]
Esempio n. 21
0
	def update(self, dt):

		for ent, (transform, rend, trail) in self.world.get_components(Transform, Renderable, Trail):

			min_dist, min_dist_sprite = math.inf, None
			for handle in trail.list:
				sprite = rend.get_sprite(handle)
				sprite.transform.scale -= ((trail.max_trail_scale - trail.min_trail_scale) / trail.trail_lifetime) * dt
				sprite.opacity -= (1 / trail.trail_lifetime) * dt
				dist = transform.pos.subbed_by(sprite.get_absolute_pos(transform.pos)).magnitude()
				if dist < min_dist:
					min_dist = dist
					min_dist_sprite = sprite

			if min_dist_sprite and min_dist < trail.next_trail_distance:
				min_dist_sprite.opacity = 1
				min_dist_sprite.transform.scale = trail.max_trail_scale
			else:
				handle = rend.add_sprite(Sprite("tail", -1, False, Transform(transform.pos.copy(), scale=trail.max_trail_scale)))
				trail.add(handle)

			for i in reversed(range(len(trail.list))):
				handle = trail.list[i]
				sprite = rend.get_sprite(handle)
				if sprite.opacity <= 0:
					trail.pop(i)
					rend.remove_sprite(handle)
Esempio n. 22
0
def update(keysPressed, leftClicked, mousePos, projectiles, effects, enemies,
           houses):
    #print(str(int(clock.get_fps())))
    Level.map.update()
    Level.shop.update(mousePos, leftClicked, Fighter.player.inv.gold)
    Level.skinsShop.update(mousePos, leftClicked, Fighter.player.level)
    #Level.towerShop.update(mousePos, leftClicked, Fighter.player.inv.gold)
    houseSum = 0
    for h in houses:
        h.update(enemies, projectiles)
        houseSum += h.hp
    Fighter.player.update(keysPressed, leftClicked, mousePos, enemies,
                          projectiles)
    Level.wave.update(keysPressed, enemies)
    for en in enemies:
        en.update(projectiles)
        if en.defeated:
            enemies.remove(en)
            Fighter.player.inv.gold += 1
            Fighter.player.xp += 20
    for e in effects:
        e.update()
        if e.complete:
            effects.remove(e)
    for p in projectiles:
        p.update(width, height, effects)
        if p.complete:
            projectiles.remove(p)
            effects.append(Sprite.Anim(p.x, p.y, Sprite.exSprites, .5))
    if Fighter.player.hp <= 0 or houseSum <= 0:
        return 'GameOver'
Esempio n. 23
0
    def __init__(self,
                 health,
                 strength,
                 magic,
                 speed,
                 defense,
                 resistance,
                 name,
                 position,
                 hit_chance,
                 crit_chance,
                 image="pika.png"):
        #health is a tuple
        self.current_health = health
        self.max_health = health
        self.strength = strength
        self.magic = magic
        self.speed = speed
        self.defense = defense
        self.resistance = resistance
        self.name = name
        self.position = position
        self.weapon = None
        self.alive = True

        #sprite
        self.sprite = Sprite(position, image)

        #temporary
        self.hit_chance = 1
        self.crit_chance = 0
        self.zone = 0
Esempio n. 24
0
def createDino():
    dinosaur = Sprite.Dinosaur(dino_posx, dino_posy, 0, jump_aceleration,
                               down_aceleration)
    dinosaur.setSprites(dinosaur_walk_sprite, dinosaur_crouch_sprite)
    dinosaur.setDinoHitBox(dino_lenght_walk, dino_height_walk,
                           dino_lenght_crouch, dino_height_crouch)
    return dinosaur
Esempio n. 25
0
 def reset(self):
     self.sprites=[]
     #for x in range (20):
      #   self.sprites.append(Sprite(self.rm.getAnimation("ahhh"),self.size))
     #for x in range (20):
      #   self.sprites.append(Sprite(self.rm.getImage("cronoflip"),self.size))
     for x in range(1):
         self.player = Sprite(self.rm.getAnimation("left"), self.size)
Esempio n. 26
0
    def __init__(self, pos: numpy.array, angularDisplacement: float,
                 model: str, moveset: Dict[str, int]):
        self.model = model
        self.spritePath = Path('Assets') / Path('Images') / Path(
            'Sprites') / Path('Spaceship') / Path(model) / Path('Solid')

        def imageLoader(inPath: Path):
            image = pygame.image.load(str(inPath)).convert_alpha()
            return image

        self.Images = imageGroup.ImageGroup(imageFolderPath=self.spritePath,
                                            imageLoader=imageLoader)

        self.Sprite = Sprite.Sprite(self.Images, Cs.spaceshipScaleConst,
                                    Cs.spacehipUpdateInterval,
                                    (pos[0], pos[1]))
        self.bloomImagePath = Path('Assets') / Path('Images') / Path(
            'Sprites') / Path('Spaceship') / Path(model) / Path('Bloom')
        self.bloomImages = imageGroup.ImageGroup(
            imageFolderPath=self.bloomImagePath, imageLoader=imageLoader)
        self.bloomSprite = Sprite.Sprite(self.bloomImages,
                                         Cs.spaceshipScaleConst,
                                         Cs.spacehipUpdateInterval,
                                         (pos[0], pos[1]))
        self.thrustOn = False
        self.health = self.maxHealth = Cs.DEFAULTMAXHEALTH
        self.damagePerBullet = Cs.DEFAULTDAMAGE
        self.bulletSpeed = Cs.DEFAULTBULLETSPEED
        if Cs.GRAVITYON:
            self.bulletSpeed = Cs.GRAVBULLETSPEED
        self.bulletSpeedLim = Cs.BULLETSPEEDLIMIT
        self.thrustKey = moveset['THRUST']
        self.leftKey = moveset['LEFT']
        self.rightKey = moveset['RIGHT']
        self.shootKey = moveset['SHOOT']
        self.damageDamp = Cs.DEFAULTDAMAGEDAMP
        self.piercingBullets = False
        super().__init__(sprite=self.Sprite,
                         angularDisplacement=angularDisplacement,
                         angularSpeed=0.,
                         angularAcc=0.,
                         posVector=pos,
                         limPos=numpy.array(Cs.GameStage),
                         limVelScalar=Cs.SPEEDLIMIT,
                         limAngularSpeed=Cs.ROTATELIM)
Esempio n. 27
0
 def add_zombie(self):
     y = randint(140, 240)
     zombie = Sprite.Zombie(650, y, 64, 64)
     zombie.set_speed(randint(1, 1 + (self.difficulty // 3)))
     zombie.active = True
     zombie.walking = True
     zombie.set_word(self.get_new_word())
     self.zombies.append(zombie)
     self.zombies.sort(key=lambda z: z.y)
Esempio n. 28
0
 def __init__(self, posn, width):
     self.numBoxes = 7
     title = Sprite.TextDisplayer()
     title.setText("Edit Tag Dialog")
     inputBoxes = [InputBox() for i in xrange(0, self.numBoxes)]
     inputTitles = [
         Sprite.TextDisplayer() for i in xrange(0, self.numBoxes)
     ]
     inputTitles[0].setText("Texture:")
     inputTitles[1].setText("Color:")
     inputTitles[2].setText("")
     inputTitles[3].setText("")
     inputTitles[4].setText("ColorVar:")
     inputTitles[5].setText("")
     inputTitles[6].setText("")
     Dialog.__init__(self, title, inputBoxes, inputTitles, posn, width)
     self.state = 0
     self.tagName = None
Esempio n. 29
0
    def __init__(self, pos, bonus, image):
        self.__bonus_info = ImageInfo([45, 45], [90, 90], 40)
        self.pos = [pos[0],pos[1]]
        self.type = bonus
        self.angle = 0
        self.angle_vel = 0.003

        self.sprite = Sprite(pos, [0.0, 0.0], self.angle, self.angle_vel, image,
                             self.__bonus_info, WIDTH, HEIGHT)
Esempio n. 30
0
    def load_level(self):
        #清空砖块精灵组
        self.block_group.empty()

        for by in range(0, 10):
            for bx in range(0, 10):
                #加载砖块并设置每个砖块的位置
                self.block = Sprite(self.screen)
                self.block.load("pic/blocks.png", 58, 29, 4)
                x = 5 + bx * (self.block.frame_width + 1)
                y = 30 + by * (self.block.frame_height + 1)
                self.block.set_pos((x, y))
                #检测不需要加载砖块的位置
                num = cfg.levels[cfg.level][by * 10 + bx]
                self.block.first_frame = num - 1
                self.block.last_frame = num - 1
                if num > 0:
                    self.block_group.add(self.block)
Esempio n. 31
0
	def __init__(self,xpos,ypos,filename,callsign):
		Sprite.__init__(self,xpos,ypos,filename)
		self.x = xpos
		self.y = ypos
		self.x_vel = 0
		self.y_vel = 0
		self.loaded_image = image.load(filename)
		self.loaded_image.set_colorkey((0,0,0))
		self.ac_speed = 0
		self.rotate =  0
		self.ac_heading = 0
		self.strVelocity = ""
		self.namefont = font.Font(None, 15)
		self.nametext = []		
		self.speedfont = font.Font(None, 15)
		self.speedtext = []
		self.callsign = callsign
		self.nametext = self.namefont.render(self.callsign, True, (0,255,0),(0,0,0))
Esempio n. 32
0
class World:
    def __init__(self,size,rm):
        self.player = None
        self.rm=rm
        self.size=size
        self.s = size
        self.reset()
    def reset(self):
        self.sprites=[]
        #for x in range (20):
         #   self.sprites.append(Sprite(self.rm.getAnimation("ahhh"),self.size))
        #for x in range (20):
         #   self.sprites.append(Sprite(self.rm.getImage("cronoflip"),self.size))
        for x in range(1):
            self.player = Sprite(self.rm.getAnimation("left"), self.size)
    def update(self,dtime):
        self.player.update(dtime)
        for s in self.sprites:
            s.update(dtime)
    def draw(self,screen):
        for s in self.sprites:
            s.draw(screen)
            
        self.player.draw(screen)




    def jump(self):
        """Causes the player to start jumping"""
        pass

    def left(self):
        """starts the player from moving to the left"""
        self.player.velocity[0] = -30.0


    def right(self):
        """starts moving the player to the right"""
        self.player.velocity[0] = 30.0

    def stop(self):
        """stops the player sprite from moving horizontally"""
        self.player.velocity[0] = 0.0
Esempio n. 33
0
 def __init__(self, xpos, ypos, filename, callsign):
     Sprite.__init__(self, xpos, ypos, filename)
     self.x = xpos
     self.y = ypos
     self.x_vel = 0
     self.y_vel = 0
     self.loaded_image = image.load(filename)
     self.loaded_image.set_colorkey((0, 0, 0))
     self.ac_speed = 0
     self.rotate = 0
     self.ac_heading = 0
     self.strVelocity = ""
     self.namefont = font.Font(None, 15)
     self.nametext = []
     self.speedfont = font.Font(None, 15)
     self.speedtext = []
     self.callsign = callsign
     self.nametext = self.namefont.render(self.callsign, True, (0, 255, 0),
                                          (0, 0, 0))
Esempio n. 34
0
    def __init__(self, pos: numpy.array, angle: float, model: str,
                 parent: Spaceship, bulletSpeed: float, killOnImpact: bool,
                 bulletCache: Dict[Path, pygame.Surface], speedLim):
        self.pos = pos + Cs.BULLETSPAWNDIST * numpy.array(
            [sin(radians(angle)), cos(radians(angle))])
        self.angularDisplacement = angle
        self.parent = parent
        self.spritePath = Path('Assets') / Path('Images') / Path(
            'Sprites') / Path('Bullet') / Path(model) / Path('Solid')
        self.bloomSpritePath = Path('Assets') / Path('Images') / Path(
            'Sprites') / Path('Bullet') / Path(model) / Path('Bloom')
        self.bulletCache = bulletCache

        def imageLoader(inPath: Path):
            image = self.bulletCache[inPath]
            return image

        self.Images = imageGroup.ImageGroup(imageFolderPath=self.spritePath,
                                            imageLoader=imageLoader)
        self.Sprite = Sprite.Sprite(self.Images, Cs.bulletScaleConst,
                                    Cs.bulletUpdateInterval, (pos[0], pos[1]))

        self.bloomImages = imageGroup.ImageGroup(
            imageFolderPath=self.bloomSpritePath, imageLoader=imageLoader)
        self.bloomSprite = Sprite.Sprite(self.bloomImages, Cs.bulletScaleConst,
                                         Cs.bulletUpdateInterval,
                                         (pos[0], pos[1]))

        self.bulletHalfHeight = self.Sprite.currentRect.h / 2
        self.angularDisplacement = angle

        self.damage = parent.damagePerBullet
        self.offScreen = False
        self.killOnImpact = killOnImpact

        super().__init__(posVector=self.pos,
                         velVector=bulletSpeed * self.headDirectionVector,
                         sprite=self.Sprite,
                         angularDisplacement=angle,
                         angularSpeed=0,
                         angularAcc=0,
                         limVelScalar=speedLim)
Esempio n. 35
0
    def __init__(self, w, h):
        super().__init__(w, h)

        self.title = Sprite.Text(
            320, 80, pygame.font.Font('assets/fonts/Bungee-Regular.ttf', 48),
            "Typing Adventure", (255, 255, 255))
        self.title.set_draw_to_center()

        self.startbutton = Sprite.TextButton(
            320, 180, pygame.font.Font('assets/fonts/Bungee-Regular.ttf', 24),
            "Start Game", (255, 255, 255))
        self.startbutton.set_draw_to_center()
        self.statsbutton = Sprite.TextButton(
            320, 230, pygame.font.Font('assets/fonts/Bungee-Regular.ttf', 24),
            "Player Stats", (255, 255, 255))
        self.statsbutton.set_draw_to_center()
        self.exitbutton = Sprite.TextButton(
            320, 280, pygame.font.Font('assets/fonts/Bungee-Regular.ttf', 24),
            "Exit", (255, 255, 255))
        self.exitbutton.set_draw_to_center()
Esempio n. 36
0
 def showActionPerformed(self, abilityID):
     action = engine.Ability.Ability.get[abilityID]
     unit = self.unit
     self.setTopText(action.name())
     Sound.action(action.sound(unit.attack()))
     # FIXME: don't compare against the string name! Will break
     # when "Attack" is translated
     if action.name() == "Attack":
         ud = self.unitDisplayer(unit)
         attDisp = Sprite.AttackDisplayer(unit, 0.0)
         ud.addAnimation(attDisp)
Esempio n. 37
0
 def showEffect(self, targetID, effect, delay):
     target = self.scenario.unitFromID(targetID)
     ud = self.unitDisplayer(target)
     if isinstance(effect, engine.Effect.MissResult):
         dd = Sprite.DamageDisplayer(_("Miss"), Sprite.NEUTRAL, delay)
         ud.addAnimation(dd)
     elif (isinstance(effect, engine.Effect.DamageResult) or
           isinstance(effect, engine.Effect.DamageSPResult)):
         dd = Sprite.DamageDisplayer(effect.damage, Sprite.NEGATIVE, delay)
         ud.addAnimation(dd)
     elif isinstance(effect, engine.Effect.HealResult):
         dd = Sprite.DamageDisplayer(effect.damage, Sprite.BENEFICIAL,
                                     delay)
         ud.addAnimation(dd)
     elif isinstance(effect, engine.Effect.StatusResult):
         effectName = engine.Effect.Status.effectNames[effect.type]
         effectType = Sprite.NEGATIVE
         if engine.Effect.Status.beneficial(effect):
             effectType = Sprite.BENEFICIAL
         dd = Sprite.DamageDisplayer(effectName, effectType, delay)
         ud.addAnimation(dd)
Esempio n. 38
0
    def drawSidebar(self):
        sidebarX = UserInterface.windowSize[0] - 240 / 2
        sidebarY = UserInterface.windowSize[1] / 2

        self.shipY = UserInterface.windowSize[1] - 30

        for team in self.simulation.world.combatTeams:
            Sprite.draw("team-display-%d" % (team,), position=(sidebarX, self.shipY - 3), hud=True)
            Sprite.drawText(
                "Battle Fleet %d" % (team,),
                position=(sidebarX, self.shipY - 5),
                bold=True,
                align="center",
                color=(0, 0, 0, 255),
            )
            self.shipY -= 35

            for ship in self.simulation.world.combatTeams[team]:
                self.drawSidebarShip(ship)
                self.shipY -= 30

            self.shipY -= 25
Esempio n. 39
0
    def inicializa(self,jogadores):
        """Inicializa elementos do menu"""
        self.width = pygame.display.get_surface().get_width()
        self.height = pygame.display.get_surface().get_height()
        pygame.mixer.Sound(os.path.join('.','Sons',"entradamenu.wav")).play()
        pygame.mixer.music.load(os.path.join('.','Musicas','menu.mp3'))
        pygame.mixer.music.set_volume(0.3)
        pygame.mixer.music.play(-1)
        self.font = pygame.font.Font(os.path.join('.','Imagens',"fonte.ttf"), int(self.height*0.08))
        retratos = []
        linha = []
        pos = [self.width*0.2375,self.height*0.45]
        self.postitulo = [self.width*0.32,self.height*0.34]
        self.cor = 120
        self.incrcor = 3
        self.configcontrole = 0
        #define posicoes dos retratos na tela
        for i in [string for string in os.listdir(os.path.join('.','Personagens')) if not string.startswith(".")]:
            x = pos[0]
            y = pos[1]
            linha.append(Retrato(i,(x,y)))
            pos[0] = pos[0] + 120
            if (pos[0]+90) >= self.width:
                pos[1] = pos[1] + 160
                pos[0] = self.width*0.2375
                retratos.append(linha[:])
                linha = []
                #se o numero de personagens ultrapassa o limite de tamanho da tela para de ler
                if (pos[1] + 120) >= self.height:
                    break

        if len(linha) > 0: retratos.append(linha[:])
        self.retratos = retratos
        self.retratos[0][0].seleciona(1)
        self.retratos[0][0].seleciona(2)
        self.selecionadop1 = [0,0]
        self.selecionadop2 = [0,0]
        self.numcolunas = int((self.width-50)/120)
        self.fundo = Sprite(os.path.join('.','Imagens','menu.png'),(0,0),0,(self.width,self.height))
        self.botoesp1 = jogadores[2]
        self.botoesp2 = jogadores[3]
Esempio n. 40
0
 def setWidth(self, width):
     self.imageReset = Sprite.scaleImage(self._imageReset, width, self.height)
     self.imageHover = Sprite.scaleImage(self._imageHover, width, self.height)
     self.imagePress = Sprite.scaleImage(self._imagePress, width, self.height)
     self._rect.width = self.imageReset.get_width()
     self.refresh()
Esempio n. 41
0
 def setHeight(self, height):
     self.imageReset = Sprite.scaleImage(self._imageReset, self.width, height)
     self.imageHover = Sprite.scaleImage(self._imageHover, self.width, height)
     self.imagePress = Sprite.scaleImage(self._imagePress, self.width, height)
     self._rect.height = self.imageReset.get_height()
     self.refresh()
Esempio n. 42
0
def gameLoop():
	#Score
        count = 0
        
	randIndex = random.randrange(0,3)
        level_obj = Level(randIndex)
        level = level_obj.levels()
	brickList = []
	#Set up a color for each row of the bricks.
	for y in range(len(level)):
		color = (random.randrange(50,200),random.randrange(50,200),random.randrange(50,100))
    		for x in range(len(level[y])):
        		if (level[y][x] == 1):
        	    			brickList.append(Brick(x*32, y*32,color))
	
	gameExit = False
	gameOver = False
	
	cur_x_1 = 400
	cur_y_1 = 550

	cur_x_2 = 20
	cur_y_2 = 300

	x_change_1=0
	y_change_1=0


	x_change_2=0
	y_change_2=0

	ball_x=random.randrange(250,400)
	ball_y=random.randrange(250,500)
	
	#To initialize the sprite object.
	spriteball = Sprite(ball_x, ball_y)
	#dx=random.randrange(3,5)
	#dy=random.randrange(3,5)
	dy = 7
	dx = 7
    	
	while not gameExit:
	        pygame.draw.circle(gameDisplay, white, (0,0),10,0)
		if gameOver == True:
			message_to_screen("Game over",(0,255,150),-50,size = "large")
			message_to_screen("Press S to play again or Q to quit",white,50,size = "small")
			pygame.display.update()

		while gameOver == True:
			for event in pygame.event.get():
				if event.type == pygame.KEYDOWN:
					if event.key ==	pygame.K_q:
						gameExit = True
						gameOver = False
					if event.key == pygame.K_s:
						gameLoop()	

		for event in pygame.event.get():
			if event.type == pygame.QUIT:
				gameExit = True
		#Keyboard events.
			if event.type == pygame.KEYDOWN:
				if event.key == pygame.K_LEFT:
					x_change_1=-15
					y_change_1=0
				elif event.key == pygame.K_RIGHT:
					x_change_1=15
					y_change_1=0
				
				elif event.key == pygame.K_UP:
					x_change_2=0
					y_change_2=-15
				elif event.key == pygame.K_DOWN:
					x_change_2=0
					y_change_2=15
				elif event.key == pygame.K_p:
					pause()
		
			if event.type == pygame.KEYUP:
				if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
					x_change_1 = 0
					y_change_1 = 0
       				if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
              				x_change_2 = 0
               				y_change_2 = 0
	
		
		cur_x_1+=x_change_1
		cur_y_1+=y_change_1
   		cur_x_2+=x_change_2
		cur_y_2+=y_change_2
		if cur_x_1 >= 720:
			cur_x_1 = 720
		if cur_x_1 <= 0:
			cur_x_1 = 0
		if cur_y_2 >= 520:
			cur_y_2 = 520
		if cur_y_2 <= 0:
			cur_y_2 = 0
			
		#Collision with the sliders.
		a1,b1=detectCollisions(ball_x, ball_y, 10,10,cur_x_1, cur_y_1-12,80,10)
		
		if (ball_y + 10) > cur_y_1 and (ball_x+10 < cur_x_1 or ball_x > cur_x_1+80):
			a1 == False
			gameOver = True
		if a1 == True:
			dy*=-1
			dx = dx + (ball_x - cur_x_1-40)/20 - x_change_1/3
       		#pygame.mixer.music.load('Sounds/Boing.mp3')
           	#pygame.mixer.music.play(1)
		
		a2,b2 = detectCollisions(ball_x, ball_y, 10,10, cur_x_2,cur_y_2, 25,80)
		if a2==True:
			dx*=-1
			dy = dy + (ball_y - cur_y_2 -40)/20 - y_change_2/3
			#pygame.mixer.music.load('Sounds/Boing.mp3')
            		#pygame.mixer.music.play(1)
			
		if ball_x<=0: 
			gameOver = True
		elif ball_x>=790:
			dx*=-1
		if ball_y>=590:
			gameOver = True
		elif ball_y<0:
			dy*=-1

		#ball_x+=dx
		#ball_y+=dy
		gameDisplay.fill(black)
	 	gameDisplay.blit(slider, (cur_x_1, cur_y_1))
	   	gameDisplay.blit(slider2, (cur_x_2, cur_y_2))
	   	for brick in brickList:
		#If the ball collides with the brick, then remove the brick from brickList.
		     a,b = detectCollisions(ball_x, ball_y, 10,10,brick.x, brick.y, brick.width, brick.height)
	       	     if a == True and b == 3:
			    brickList.remove(brick)
			    dy *= -1
			    dx *= 1
            	   	    count+=1
                            #pygame.mixer.music.load('Sounds/Brick.mp3')
                     	    #pygame.mixer.music.play(1)
			    #ball_y+=dy

	       	     elif a == True and b == 4:
			    brickList.remove(brick)
			    dx *= -1
		            dy *= 1
	                    count+=1
                     	   # pygame.mixer.music.load('Sounds/Brick.mp3')
                     	    #pygame.mixer.music.play(1)
			    #ball_x+=dx
		ball_x+=dx
		ball_y+=dy
		#Update the x and y coordinates of the sprite.
		spriteball.x=ball_x
		spriteball.y=ball_y
		spriteball.update(gameDisplay)
		
	        if len(brickList)==0:
        	    levelcomplete(count)

		#Update the bricks and display the score accordingly.
		for brick in brickList:
	            brick.render(gameDisplay)
	       	    score(count)
		pygame.display.update()
		fps.tick(30)
	
	pygame.quit()
	quit()	
Esempio n. 43
0
missileno = 1
score = 0
lives = 3
soundmute = 0


#for count in range(5):
	#ourmissiles.append(Sprite(0,480, 'data/ac1missile.bmp',"ourmiss"))


for count in range(5):
	enemies.append(Sprite(50 * x + 50, 50, 'data/baddie.bmp'))
	x += 1

ac1 = Aircraft(200, 200, 'data/aircraft.bmp', "ZH-837")
enemymissile = Sprite(0, 480, 'data/baddiemissile.bmp')
alien = Sprite(640,480,'data/alien.bmp')


clock 	= pygame.time.Clock()
#cloud = AnimatedSprite(500,500,'storm.bmp', 15)

scorefont = font.Font(None, 30)
livesfont = font.Font(None, 30)


zapsound = load_sound('ZAP3.WAV')
explodesound = load_sound('BOOM1.WAV')
warpsound = load_sound('WARP.WAV')

quit = 0
Esempio n. 44
0
class GameMenu(object):
    """Menu de escolha de personagens"""
    def __init__(self,jogadores = ["","",[pygame.K_w,pygame.K_s,pygame.K_a,pygame.K_d,pygame.K_y,pygame.K_u,pygame.K_i],[pygame.K_UP,pygame.K_DOWN,pygame.K_LEFT,pygame.K_RIGHT,pygame.K_KP7,pygame.K_KP8,pygame.K_KP9]]):
        self.inicializa(jogadores)
        
    def inicializa(self,jogadores):
        """Inicializa elementos do menu"""
        self.width = pygame.display.get_surface().get_width()
        self.height = pygame.display.get_surface().get_height()
        pygame.mixer.Sound(os.path.join('.','Sons',"entradamenu.wav")).play()
        pygame.mixer.music.load(os.path.join('.','Musicas','menu.mp3'))
        pygame.mixer.music.set_volume(0.3)
        pygame.mixer.music.play(-1)
        self.font = pygame.font.Font(os.path.join('.','Imagens',"fonte.ttf"), int(self.height*0.08))
        retratos = []
        linha = []
        pos = [self.width*0.2375,self.height*0.45]
        self.postitulo = [self.width*0.32,self.height*0.34]
        self.cor = 120
        self.incrcor = 3
        self.configcontrole = 0
        #define posicoes dos retratos na tela
        for i in [string for string in os.listdir(os.path.join('.','Personagens')) if not string.startswith(".")]:
            x = pos[0]
            y = pos[1]
            linha.append(Retrato(i,(x,y)))
            pos[0] = pos[0] + 120
            if (pos[0]+90) >= self.width:
                pos[1] = pos[1] + 160
                pos[0] = self.width*0.2375
                retratos.append(linha[:])
                linha = []
                #se o numero de personagens ultrapassa o limite de tamanho da tela para de ler
                if (pos[1] + 120) >= self.height:
                    break

        if len(linha) > 0: retratos.append(linha[:])
        self.retratos = retratos
        self.retratos[0][0].seleciona(1)
        self.retratos[0][0].seleciona(2)
        self.selecionadop1 = [0,0]
        self.selecionadop2 = [0,0]
        self.numcolunas = int((self.width-50)/120)
        self.fundo = Sprite(os.path.join('.','Imagens','menu.png'),(0,0),0,(self.width,self.height))
        self.botoesp1 = jogadores[2]
        self.botoesp2 = jogadores[3]

    #eventos de input
    def input(self,eventos):
        """ Trata eventos de input """
        for event in eventos:
            #Botao de fechar
            if event.type == QUIT:
                return True
            #Eventos de teclado
            elif event.type == KEYDOWN:
                if (event.key == pygame.K_ESCAPE):
                    return True
                elif (event.key == pygame.K_RETURN):
                    pygame.display.toggle_fullscreen()

                #Controles do P1                    
                elif (event.key == self.botoesp1[3]):
                    if not self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].escolhidop1:
                        self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].deseleciona(1)
                        self.selecionadop1[0] =  (self.selecionadop1[0] + 1) % len(self.retratos[self.selecionadop1[1]])
                        self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].seleciona(1)
                elif (event.key == self.botoesp1[2]):
                    if not self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].escolhidop1:
                        self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].deseleciona(1)
                        self.selecionadop1[0] =  (self.selecionadop1[0] - 1) % len(self.retratos[self.selecionadop1[1]])
                        self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].seleciona(1)
                elif (event.key == self.botoesp1[1]):
                    if not self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].escolhidop1:
                        self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].deseleciona(1)
                        self.selecionadop1[1] =  (self.selecionadop1[1] + 1) % len(self.retratos)
                        if len(self.retratos[self.selecionadop1[1]]) <= self.selecionadop1[0]:
                            self.selecionadop1[0] = len(self.retratos[self.selecionadop1[1]]) - 1
                        self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].seleciona(1)
                elif (event.key == self.botoesp1[0]):
                    if not self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].escolhidop1:
                        self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].deseleciona(1)
                        self.selecionadop1[1] =  (self.selecionadop1[1] - 1) % len(self.retratos)
                        if len(self.retratos[self.selecionadop1[1]]) <= self.selecionadop1[0]:
                            self.selecionadop1[0] = len(self.retratos[self.selecionadop1[1]]) - 1
                        self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].seleciona(1)
                elif (event.key == self.botoesp1[4]):
                    if not self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].escolhidop1:
                        self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].escolhe(1)
                elif (event.key == self.botoesp1[5]):
                    self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].desescolhe(1)

                #Controles do P2                    
                elif (event.key == self.botoesp2[3]):
                    if not self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].escolhidop2:
                        self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].deseleciona(2)
                        self.selecionadop2[0] =  (self.selecionadop2[0] + 1) % len(self.retratos[self.selecionadop2[1]])
                        self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].seleciona(2)
                elif (event.key == self.botoesp2[2]):
                    if not self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].escolhidop2:
                        self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].deseleciona(2)
                        self.selecionadop2[0] =  (self.selecionadop2[0] - 1) % len(self.retratos[self.selecionadop2[1]])
                        self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].seleciona(2)
                elif (event.key == self.botoesp2[1]):
                    if not self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].escolhidop2:
                        self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].deseleciona(2)
                        self.selecionadop2[1] =  (self.selecionadop2[1] + 1) % len(self.retratos)
                        if len(self.retratos[self.selecionadop2[1]]) <= self.selecionadop2[0]:
                            self.selecionadop2[0] = len(self.retratos[self.selecionadop2[1]]) - 1
                        self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].seleciona(2)
                elif (event.key == self.botoesp2[0]):
                    if not self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].escolhidop2:
                        self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].deseleciona(2)
                        self.selecionadop2[1] =  (self.selecionadop2[1] - 1) % len(self.retratos)
                        if len(self.retratos[self.selecionadop2[1]]) <= self.selecionadop2[0]:
                            self.selecionadop2[0] = len(self.retratos[self.selecionadop2[1]]) - 1
                        self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].seleciona(2)
                elif (event.key == self.botoesp2[4]):
                    if not self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].escolhidop2:
                        self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].escolhe(2)
                elif (event.key == self.botoesp2[5]):
                    self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].desescolhe(2)

                elif (event.key == pygame.K_F1) and (self.configcontrole == 0):
                    self.configcontrole=1
                    self.botoesp1 = []
                elif (event.key == pygame.K_F2) and (self.configcontrole == 0):
                    self.configcontrole=2
                    self.botoesp2 = []

        return False
        
    def update(self,dtempo,eventos):
        """Atualiza elementos do menu"""
        self.cor = self.cor + self.incrcor
        if self.cor >= 255:
            self.incrcor = -3
            self.cor = 255
        if self.cor <= 100: self.incrcor = 3
        
        #caso um jogador esteja configurando os controles
        if self.configcontrole == 1:
            for event in eventos:
                if (event.type == KEYDOWN): self.botoesp1.append(event.key)
                if len(self.botoesp1) >= 7:
                    self.botoesp1 = self.botoesp1[:7]
                    self.configcontrole = 0
            return False
        elif self.configcontrole == 2:
            for event in eventos:
                if (event.type == KEYDOWN): self.botoesp2.append(event.key)
                if len(self.botoesp2) >= 7:
                    self.botoesp2 = self.botoesp2[:7]
                    self.configcontrole = 0
            return False
        else:
            self.fundo.update(dtempo)
            for i in self.retratos:
                for n in i:
                    n.update(dtempo)
    
            #Se os 2 jogadores ja escolheram
            if self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].escolhidop1 and self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].escolhidop2:
                return [self.retratos[self.selecionadop1[1]][self.selecionadop1[0]].nome,self.retratos[self.selecionadop2[1]][self.selecionadop2[0]].nome,self.botoesp1,self.botoesp2]
            else:
                return self.input(eventos)

    def render(self,screen):
        """Renderiza os elementos da tela atual"""
        self.fundo.render(screen,(0,0))
        screen.blit(self.font.render("Faça Sua Matrícula", True, (self.cor,0,0)),(self.postitulo[0],self.postitulo[1]))
        for i in self.retratos:
            for n in i:
                n.render(screen)

        if self.configcontrole:
            superficieescura = pygame.Surface((self.width, self.height), pygame.SRCALPHA)
            superficieescura.fill((0,0,0,210))
            screen.blit(superficieescura,(0,0))
            screen.blit(self.font.render("Configurando Controles:", True, (self.cor,0,0)),((self.width/2)-(self.font.size("Configurando Controles:")[0]/2),self.height*0.1))
            screen.blit(self.font.render("Pressione:", True, (self.cor,0,0)),((self.width/2)-(self.font.size("Pressione:")[0]/2),self.height*0.4))
            
            if self.configcontrole == 1:
                screen.blit(self.font.render("Jogador 1", True, (self.cor,0,0)),((self.width/2)-(self.font.size("Jogador 1")[0]/2),self.height*0.2))
                listabotoes = self.botoesp1
            elif self.configcontrole == 2:
                screen.blit(self.font.render("Jogador 2", True, (self.cor,0,0)),((self.width/2)-(self.font.size("Jogador 2")[0]/2),self.height*0.2))
                listabotoes = self.botoesp2

            if len(listabotoes) == 0: screen.blit(self.font.render("Cima", True, (self.cor,0,0)),((self.width/2)-(self.font.size("Cima")[0]/2),self.height*0.5))
            elif len(listabotoes) == 1: screen.blit(self.font.render("Baixo", True, (self.cor,0,0)),((self.width/2)-(self.font.size("Baixo")[0]/2),self.height*0.5))
            elif len(listabotoes) == 2: screen.blit(self.font.render("Esquerda", True, (self.cor,0,0)),((self.width/2)-(self.font.size("Esquerda")[0]/2),self.height*0.5))
            elif len(listabotoes) == 3: screen.blit(self.font.render("Direita", True, (self.cor,0,0)),((self.width/2)-(self.font.size("Direita")[0]/2),self.height*0.5))
            elif len(listabotoes) == 4: screen.blit(self.font.render("Soco", True, (self.cor,0,0)),((self.width/2)-(self.font.size("Soco")[0]/2),self.height*0.5))
            elif len(listabotoes) == 5: screen.blit(self.font.render("Chute", True, (self.cor,0,0)),((self.width/2)-(self.font.size("Chute")[0]/2),self.height*0.5))
            elif len(listabotoes) == 6: screen.blit(self.font.render("Especial", True, (self.cor,0,0)),((self.width/2)-(self.font.size("Especial")[0]/2),self.height*0.5))                
            

    def unload(self,):
        """Descarrega tela"""
        pygame.mixer.music.stop()
        pygame.time.delay(1500)
        pygame.mixer.stop()
        return True
Esempio n. 45
0
    def drawSidebarShip(self, ship):
        sidebarX = UserInterface.windowSize[0] - 240 / 2

        Sprite.draw("ship-display", position=(sidebarX, self.shipY), hud=True)

        if ship.inWorld and not ship.destroyed:
            color = (0, 0, 0, 255)

            exponentialSize = 1.0 - (1.0 / (ship.maxDeflectorPower - 1))
            deflectorWidth = 12 + (exponentialSize * (50 - 12))

            power = scalarBound(0, ship.availableDeflectorPower / ship.maxDeflectorPower, 1.0)
            delta = int(power * deflectorWidth)

            statusAlpha, status = ship.status
            Sprite.draw(
                "ship-deflector", position=(UserInterface.windowSize[0] - 10 + 25 - delta, self.shipY), hud=True
            )

            if not ship.hasTakenDamage:
                Sprite.draw("ship-ok", position=(UserInterface.windowSize[0] - 5, self.shipY), hud=True)
            else:
                Sprite.draw("ship-damage", position=(UserInterface.windowSize[0] - 5, self.shipY), hud=True)

            statusColor = (0, 0, 0, int(scalarBound(0.2, statusAlpha, 1.0) * 255))

            Sprite.drawText(ship.name, position=(sidebarX - 110, self.shipY), bold=True, color=color)
            Sprite.drawText(status.lower(), position=(sidebarX - 20, self.shipY), bold=False, color=statusColor)