コード例 #1
0
ファイル: game.py プロジェクト: MareikeBurg/vscode-sample
class Game:
    """
    main gameloop class
    """
    def __init__(self):
        """
        setup pygame and prepering a new game
        """
        pygame.init()

        try:
            # hardcoded values for diffrent monitor resolutions
            self.width, self.height, self.scale = (
                {
                    1920: 1280,
                    2560: 1920
                }[pygame.display.Info().current_w],
                {
                    975: 720,
                    1335: 1080
                }[pygame.display.Info().current_h],
                {
                    1920: 2,
                    2560: 3
                }[pygame.display.Info().current_w],
            )
        except KeyError:
            # else takes default values
            self.width, self.height, self.scale = 1280, 720, 2
            logging.warning("using default screen resolution")

        # pygame window
        self.window = pygame.display.set_mode((self.width, self.height))
        self.window.blit(
            pygame.image.load(os.path.join("assets/sprites",
                                           "background.png")), (0, 0))
        # sprites
        self.tile_list = create_sprite_list(self.scale)

        # map
        self.feld = Field(self.window, self.scale, self.tile_list)

        # entities
        self.enemys = []
        self.neutrals = []
        self.projectiles = []

        # ressources
        self.food: int = 10
        self.cost: int = 1
        self.wood: int = 5
        self.stone = 0
        self.year = 0
        self.day = 0

        self.textdraw()
        self.feld.drawall()

        # manual drawings
        # self.feld.draw(500, 500, 41)
        # self.feld.draw(400, 400, 42)
        # self.feld.draw(300, 500, 43)
        self.enemys.append(
            Enemy(300, 300, self.tile_list[42], self.window, 5, 10,
                  self.scale))
        """
        self.enemys.append(
            Enemy(150, 170, self.feld.getSpritebyNumber(42), self.window, 5, 10, self.scale)
        )"""

        self.projectiles.append(
            Projectile(350, 456, self.tile_list[43], self.window, 1, 10,
                       (300, 300), self.scale))
        """
        self.projectiles.append(
            Projectile(
                450,
                200,
                self.feld.getSpritebyNumber(43),
                self.window,
                1,
                10,
                (150, 170),
                self.scale,
            )
        )"""
        """
        self.enemys.append(
            Enemy(300, 400, self.feld.getSpritebyNumber(42), self.window,30)
        )
        self.enemys.append(
            Enemy(400, 400, self.feld.getSpritebyNumber(42), self.window)
        )"""

    def run(self):
        run = True

        clock = pygame.time.Clock()
        while run:
            clock.tick(10)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False

                pos = pygame.mouse.get_pos()

                if event.type == pygame.MOUSEBUTTONDOWN:
                    print(pos)

            self.day += 1

            if self.day % 10 == 0:
                self.textdraw()

            if self.day == 1000:
                self.year += 1
                # self.textdraw()

            self.feld.drawall()

            # TODO also update for enemie
            for enemy in self.enemys:
                enemy.update()
                for projectile in self.projectiles:
                    if detectCircularCollision(enemy, projectile):
                        if enemy.hit(projectile):
                            self.enemys.remove(enemy)
                        self.projectiles.remove(projectile)

            for projectile in self.projectiles:
                projectile.update()

            pygame.display.update()

        pygame.quit()

    def textdraw(self):
        """
        draws the ressource bar at the top
        """
        self.window.blit(
            pygame.image.load(os.path.join("assets/sprites",
                                           "background.png")), (0, 0))
        myfont = pygame.font.SysFont("monospace", 10 * self.scale)
        text = myfont.render("Food: " + str(self.food), 1, (0, 0, 0))
        self.window.blit(text, (50, 50))
        text = myfont.render("- " + str(self.cost), 1, (255, 0, 0))
        self.window.blit(text, (50 + 75 * self.scale, 50))
        text = myfont.render("Wood: " + str(self.wood), 1, (0, 0, 0))
        self.window.blit(text, (50 + 200 * self.scale, 50))
        text = myfont.render("Stone: " + str(self.stone), 1, (0, 0, 0))
        self.window.blit(text, (50 + 300 * self.scale, 50))
        text = myfont.render("Year: " + str(self.year), 1, (0, 0, 0))
        self.window.blit(text, (50 + 400 * self.scale, 50))

        self.window.blit(myfont.render("Day: " + str(self.day), 1, (0, 0, 0)),
                         (50 + 500 * self.scale, 50))

    def clicked(self, pos):
        """