Пример #1
0
    def __init__(self, name, val, min_max, pos, window, dim=[150, 30]):
        self.name = name
        self.val = val
        self.min_v, self.max_v = min_max
        self.xpos, self.ypos = pos
        self.window = window
        self.width, self.height = dim
        self.hit = False

        #Slider background
        self.surf = pygame.surface.Surface((self.width, self.height))
        self.surf.set_alpha(200)
        self.surf.fill((100, 100, 100))

        pygame.draw.rect(self.surf, (255, 255, 255),
                         [1, 1, self.width - 2, self.height - 2], 1)
        pygame.draw.rect(self.surf, (0, 0, 0),
                         [5, self.height - 9, self.width - 10, 2], 0)
        pygame.draw.rect(self.surf, (255, 255, 255),
                         [5, self.height - 10, self.width - 10, 4], 1)

        #Slider text
        self.FONT = Font('NotoSansMono-Regular.ttf', 10)
        self.txt_surf, self.txt_rect = self.FONT.render(
            self.name + f'{self.val:.4}', (255, 255, 255))

        #Slider button
        self.button_surf = pygame.surface.Surface((20, 20))
        self.button_rect = self.button_surf.get_rect()
        self.button_surf.fill((1, 1, 1))
        self.button_surf.set_colorkey((1, 1, 1))
        pygame.draw.circle(self.button_surf, (255, 255, 255), (10, 10), 3)
        pygame.draw.circle(self.button_surf, (0, 0, 0), (10, 10), 2)
Пример #2
0
def main():
    parser = argparse.ArgumentParser(description='test font')
    parser.add_argument('-f', '--font_dir', type=str, required=True)
    parser.add_argument('-o', '--output_dir', type=str, required=True)
    args = parser.parse_args()

    files = filter((lambda x: x.lower().endswith('.ttf')),
                   os.listdir(args.font_dir))

    pygame.init()

    for file in files:
        try:
            font = Font(os.path.join(args.font_dir, file), size=24)
            font.strong = True
            font.oblique = True
            font.antialiased = True
            font.origin = True
            font.strength = 0.01
            surface, _ = font.render(RENDER_TEXT,
                                     fgcolor=Color(255, 255, 255, 255),
                                     bgcolor=Color(0, 0, 0, 0))
            img = pygame.surfarray.array3d(surface)
            img = np.transpose(img, [1, 0, 2])
            # print(img.shape)
            # cv2.imshow('test', img)
            # cv2.waitKey()
            cv2.imwrite(os.path.join(args.output_dir, file + ".png"), img)
            # print(file, img.shape)
        except Exception:
            print(file, "Exception")
Пример #3
0
def render_inline_text(surface: Surface,
                       text: str,
                       size: int,
                       text_color: Tuple[int, int, int],
                       start_x: int = 0,
                       end_x: int = None,
                       start_y: int = 0,
                       end_y: int = None):
    width, height = surface.get_size()
    end_x = end_x or width
    end_y = end_y or height

    font = Font(None, size)
    font.origin = True

    line_spacing = font.get_sized_height() + 2
    x, y = start_x, line_spacing + start_y
    space = font.get_rect(' ')
    words = text.split(' ')

    # render word by word
    for word in words:
        bounds = font.get_rect(word)
        if x + bounds.width + bounds.x >= end_x:
            x, y = start_x, y + line_spacing
        if x + bounds.width + bounds.x >= end_x:
            raise ValueError(f"word too wide for the surface: {text}")
        if y + bounds.height - bounds.y >= end_y:
            raise ValueError(f"text to long for the surface: {text}")
        font.render_to(surface, (x, y), None, text_color)
        x += bounds.width + space.width
    return x, y
Пример #4
0
def render_multiline_text(surface: Surface,
                          text: List[str],
                          size: int,
                          text_color: Tuple[int, int, int],
                          start_x: int = 0,
                          end_x: int = None,
                          start_y: int = 0,
                          end_y: int = None):
    font = Font(None, size)
    font.origin = True
    x, y = start_x, start_y
    for line in text:
        x, y = render_inline_text(surface, line, size, text_color, start_x, end_x, y, end_y)
    return x, y
Пример #5
0
class Score(object):
    def __init__(self, asset):
        self.score = 0
        self.old_score = self.score

        self.collect = asset["effects"]["collects-effects"]
        self.font = Font(asset["fonts"]["CursedTimerUlil-Aznm"], 20)

    @property
    def getScore(self):
        return self.score

    def check(self):
        if self.score < 0:
            return True

    def add_score(self):
        self.score += 1
        new_score = self.old_score + 10
        if self.score == new_score:
            self.collect.play()
            self.old_score = self.score

    def rescore(self):
        self.score -= 1

    def draw(self, screen):
        text, rect = self.font.render("Skor: " + str(self.score),
                                      (133, 230, 159))
        screen.blit(text, rect)
Пример #6
0
class Score(object):
    def __init__(self, font_path):
        self.collect = Sound(COLLECT_BACKSOUND)
        self.font = Font(font_path, 24)
        self.score = 0
        self.old_score = self.score

    def add_score(self):
        self.score += 1
        new_score = self.old_score + 10
        if self.score == new_score:
            self.collect.play()
            self.old_score = self.score

    def rescore(self):
        self.score -= 1

    def check(self):
        if self.score < 0:
            return True
        else:
            return False

    def draw(self, screen):
        text_surface, rect = self.font.render("Score: " + str(self.score),
                                              (133, 230, 159))
        screen.blit(text_surface, (10, 10))
Пример #7
0
 def __init__(self, screen, rect, background):
     init()
     self.screen = screen
     self.rect = rect
     self.background = background
     self.font = Font(TITLE_FONT, 40)
     self.font_start = Font(PRESS_START_FONT, 15)
     self.font_author = Font(PRESS_START_FONT, 12)
     self.font_information = Font(INFORMATION_FONT, 8)
     self.gamelan_music = music.load(GAMELAN_BACKSOUND)
     self.click_sound = Sound(CLICK_BACKSOUND)
Пример #8
0
def _get_font(font, bold, italic) -> Font:
    if not font:
        if DEFAULT_FONT:
            font = DEFAULT_FONT
        else:
            font = SysFont('', 0, bold, italic)
    elif isinstance(font, str):
        font = SysFont(font, 0, bold, italic)
    else:
        font = Font(font, 0, 4)
    return font
Пример #9
0
    def __init__(self, disk_images: List[str] = []):
        self.disk_images: List[str] = disk_images

        self.buffer: bytearray = bytearray([32 for _ in range(80 * 24)])
        self.cursor: int = 0
        self.esc_sequence: bytes = b''

        pygame.init()
        pygame.display.set_caption('CP/M')
        pygame.key.set_repeat(1000, 100)

        self.screen: Surface = pygame.display.set_mode(
            (80 * 10 + 2 * self.margin, 24 * 20 + 2 * self.margin))
        self.font: Font = Font('BmPlus_Rainbow100_re_80.otb', 24)
        self.blink_rate: int = 750
 def word_wrap(self, text, size, text_color, margin):
     font = Font(None, size)
     font.origin = True
     words = text.split(' ')
     width, height = self.image.get_size()
     line_spacing = font.get_sized_height() + 2
     x, y = 0, line_spacing + margin
     space = font.get_rect(' ')
     for word in words:
         bounds = font.get_rect(word)
         if x + bounds.width + bounds.x >= width:
             x, y = 0, y + line_spacing
         if x + bounds.width + bounds.x >= width:
             raise ValueError("word too wide for the surface")
         if y + bounds.height - bounds.y >= height:
             raise ValueError("text to long for the surface")
         font.render_to(self.image, (x, y), None, text_color)
         x += bounds.width + space.width
     return x, y
Пример #11
0
 def font(cls, fontname, size, foreground, background=None, font_index=0, resolution=0, ucs4=False):
     font = Font(fontname, size, font_index, resolution, ucs4)
     return cls(font, foreground, background)
Пример #12
0
import sys
import pygame.freetype
from pygame import Surface
from pygame.freetype import Font
from pygame.locals import *

import tween

pygame.init()
DISPLAY_SURF: Surface = pygame.display.set_mode((500, 400), 0, 32)
pygame.display.set_caption("Best game")

FPS = 60
clock = pygame.time.Clock()

text: Font = Font("assets/fonts/Chunkfive/Chunkfive.otf", 32)
textSurface, textRect = text.render("Hello there", Color(120, 0, 120))
textRect.center = (100, 100)

tw = tween.Tween(textRect, 800)
tw.set_attr("centery", 100, 200)
tw.set_attr("centerx", 100, 200)
tw.set_pingpong()
tw.start()

while True:
    delta = clock.tick_busy_loop(FPS)
    tw.update(delta)
    DISPLAY_SURF.fill(WHITE)
    DISPLAY_SURF.blit(textSurface, textRect)
Пример #13
0
from pygame.freetype import Font
import pygame
from math import sqrt

pygame.freetype.init()
WINDOW_WIDTH, WINDOW_HEIGHT = 1280, 800
FPS = 60
FONT = Font('fonts/slkscr.ttf')


def rotate_center(surface, angle, pos):
    to_draw = pygame.transform.rotate(surface, angle)
    new_rect = to_draw.get_rect(center=surface.get_rect(
        topleft=(pos[0], pos[1])).center)
    return to_draw, new_rect


def convert_to_prefix(number, decimal=True):
    if number >= 1e9:
        return f'{round(number/1e9, 2)}B'

    elif number >= 1e6:
        return f'{round(number/1e6, 2)}M'

    elif number >= 1e3:
        return f'{round(number/1e3, 2)}k'

    return float(number) if decimal else number


def distance_two_points(x1, y1, x2, y2):
Пример #14
0
    def __init__(self, asset):
        self.score = 0
        self.old_score = self.score

        self.collect = asset["effects"]["collects-effects"]
        self.font = Font(asset["fonts"]["CursedTimerUlil-Aznm"], 20)
Пример #15
0
title_bar_rect = (0, 0, WIDTH, 30)
mini_ship = shipsheet.get_image_advanced((0, 192, 32, 50), (20, 20))
mini_bomb = SpriteSheet(osp.join(IMAGES_FOLDER, "powerups", "bomb.png")
                        ).get_image_advanced(size=(15, 25))


SOUNDS = {}
for f in glob(osp.join(SOUNDS_FOLDER, "sound_tracks", "**")):
    sound = pg.mixer.Sound(f)
    sound.set_volume(0.3)
    SOUNDS[osp.basename(f).split('.')[0]] = sound

# fonts
font_file = osp.join(GAME_FOLDER, "fonts", "a_Concepto.ttf")
aconcepto100 = Font(font_file, 100)
aconcepto26 = Font(font_file, 26)
aconcepto20 = Font(font_file, 20)
aconcepto14 = Font(font_file, 14)

# delete unused names
del f, font_file, sound, info, Font


# the game
class Game:

    def __init__(self):
        with open("highscore.txt", 'r') as hsf:
            try:
                self.highscore = int(hsf.read())
Пример #16
0
class Slider():
    """
    Slider code lifted from
    https://www.dreamincode.net/forums/topic/401541-buttons-and-sliders-in-pygame/
    """
    def __init__(self, name, val, min_max, pos, window, dim=[150, 30]):
        self.name = name
        self.val = val
        self.min_v, self.max_v = min_max
        self.xpos, self.ypos = pos
        self.window = window
        self.width, self.height = dim
        self.hit = False

        #Slider background
        self.surf = pygame.surface.Surface((self.width, self.height))
        self.surf.set_alpha(200)
        self.surf.fill((100, 100, 100))

        pygame.draw.rect(self.surf, (255, 255, 255),
                         [1, 1, self.width - 2, self.height - 2], 1)
        pygame.draw.rect(self.surf, (0, 0, 0),
                         [5, self.height - 9, self.width - 10, 2], 0)
        pygame.draw.rect(self.surf, (255, 255, 255),
                         [5, self.height - 10, self.width - 10, 4], 1)

        #Slider text
        self.FONT = Font('NotoSansMono-Regular.ttf', 10)
        self.txt_surf, self.txt_rect = self.FONT.render(
            self.name + f'{self.val:.4}', (255, 255, 255))

        #Slider button
        self.button_surf = pygame.surface.Surface((20, 20))
        self.button_rect = self.button_surf.get_rect()
        self.button_surf.fill((1, 1, 1))
        self.button_surf.set_colorkey((1, 1, 1))
        pygame.draw.circle(self.button_surf, (255, 255, 255), (10, 10), 3)
        pygame.draw.circle(self.button_surf, (0, 0, 0), (10, 10), 2)

    def draw(self):
        """
        Draws the slider.
        """
        surf = self.surf.copy()
        x = 5 + int((self.val - self.min_v) / (self.max_v - self.min_v) *
                    (self.width - 10))
        y = self.height - 8
        self.button_rect = self.button_surf.get_rect(center=(x, y))
        surf.blit(self.button_surf, self.button_rect)
        self.button_rect.move_ip(self.xpos, self.ypos)

        x, y = self.surf.get_rect().center
        self.txt_rect = self.txt_surf.get_rect(center=(x, y - 4))

        surf.blit(self.txt_surf, self.txt_rect)
        self.window.blit(surf, (self.xpos, self.ypos))

    def move(self):
        """
        Moves the slider handle and updates text.
        """
        self.txt_surf, _ = self.FONT.render(self.name + f'{self.val:.4}',
                                            (255, 255, 255))
        self.val = ((pygame.mouse.get_pos()[0] - self.xpos - 5) /
                    (self.width - 10) * (self.max_v - self.min_v)) + self.min_v
        self.val = np.clip(self.val, self.min_v, self.max_v)
Пример #17
0
class StartGame(object):
    def __init__(self, screen, rect, background):
        init()
        self.screen = screen
        self.rect = rect
        self.background = background
        self.font = Font(TITLE_FONT, 40)
        self.font_start = Font(PRESS_START_FONT, 15)
        self.font_author = Font(PRESS_START_FONT, 12)
        self.font_information = Font(INFORMATION_FONT, 8)
        self.gamelan_music = music.load(GAMELAN_BACKSOUND)
        self.click_sound = Sound(CLICK_BACKSOUND)

    def load_image(self, path, convert_alpha=False, convert=True):
        try:
            resource = PyGameImageLoad(path)
        except PyGameErrorException:
            print("duarrr")
            exit(0)
        if convert:
            return resource.convert()
        elif convert_alpha:
            return resource.convert_alpha()
        else:
            return resource

    def run(self):
        clock = Clock()
        music.play()
        text_surface, rect = self.font.render("Pocong Runner", (150, 51, 51))
        author_surface, author_rect = self.font_author.render(
            "@billalxcode", (255, 255, 255))
        author_rect.center = self.rect.center
        author_rect.bottom += 165

        start_text_surface, start_rect = self.font_start.render(
            "Tekan enter untuk memulai...", (255, 255, 255))
        info_surface, info_rect = self.font_information.render(
            "* Jika anda mengklaim pemilik dari font/gambar silahkan chat pembuat. Terima kasih telah mendukung saya.",
            (255, 255, 255))
        info_rect.bottom += self.rect.height - 20
        blink_rect = start_rect
        blink_rect.center = self.rect.center
        blink_rect.bottom += 150

        while True:
            for event in get():
                if event.type == QUIT:
                    return True
                elif event.type == KEYDOWN:
                    self.click_sound.play()
                    if event.key == K_SPACE or event.key == 13:
                        return False
            self.screen.blit(self.background, (0, 0))
            self.screen.blit(author_surface, author_rect)
            self.screen.blit(text_surface.convert_alpha(),
                             (self.rect.width / 2, 100))
            self.screen.blit(start_text_surface, blink_rect)
            self.screen.blit(info_surface, info_rect)
            clock.tick(60)

            update()
Пример #18
0
 def __init__(self, font_path):
     self.collect = Sound(COLLECT_BACKSOUND)
     self.font = Font(font_path, 24)
     self.score = 0
     self.old_score = self.score
Пример #19
0
def set_default_font(font):
    global DEFAULT_FONT
    if not font:
        DEFAULT_FONT = None
    else:
        DEFAULT_FONT = Font(font, 0)
Пример #20
0
def introGame(screen, asset, data):
    #=== Background image ===#
    logs.info("Mengatur latar belakang...")
    bg = scale(asset["backgrounds"]["intro"], (config.getRect.size))

    #=== Button play image ===#
    logs.info("Mengatur button...")
    btn_play = asset["other"]["btn-play2"]
    btn_play = scale(
        btn_play, (int(btn_play.get_width() / 2), btn_play.get_height() - 100))
    btn_play_center = btn_play.get_rect()
    btn_play_center.center = config.getRect.center

    #=== button keluar  image ===#
    btn_keluar = asset["other"]["btn-keluar2"]
    btn_keluar = scale(
        btn_keluar,
        (int(btn_keluar.get_width() / 2), btn_keluar.get_height() - 100))
    btn_keluar_center = btn_keluar.get_rect()
    btn_keluar_center.center = config.getRect.center
    btn_keluar_center.bottom += 100

    #=== Button settings image ===#
    btn_settings = asset["other"]["btn-settings2"]
    btn_settings = scale(
        btn_settings,
        (int(btn_settings.get_width() / 2), btn_settings.get_height() - 100))
    btn_settings_center = btn_settings.get_rect()
    btn_settings_center.center = config.getRect.center
    btn_settings_center.bottom += 50

    #=== Button credits image ===#
    btn_credits = asset["other"]["btn-credits"]
    btn_credits = scale(btn_credits, (100, 100))
    btn_credits_center = btn_credits.get_rect()
    btn_credits_center.center = config.getRect.center
    btn_credits_center.bottom = config.getRect.height
    btn_credits_center.right = config.getRect.width

    btn_close = asset["other"]["btn-close"]
    btn_close = scale(btn_close, (100, 100))
    btn_close_center = btn_close.get_rect()
    btn_close_center.center = config.getRect.center
    btn_close_center.bottom = config.getRect.height
    btn_close_center.right = config.getRect.width

    #=== Settings coint image ===#
    coint_image = asset["other"]["coint"]
    coint_image = scale(coint_image, (40, 40))
    coint_image.set_colorkey("black")
    coint_rect = coint_image.get_rect()

    #=== Window credit image ===#
    win_credits = asset["other"]["credits2"]
    win_credits = scale(win_credits, (500, 500))
    win_credits.set_colorkey("black")
    win_credits_center = win_credits.get_rect()
    win_credits_center.center = config.getRect.center

    #=== Font warning ===#
    logs.info("Mengatur teks peringatan")
    info = Font(asset["fonts"]["AboveDemoRegular-lJMd"], 10)
    info_text, info_rect = info.render(
        "*Jika anda mengklaim pemilik dari asset game ini, silahkan hubungi pembuat.",
        (255, 255, 255))
    info_rect.bottom = config.getRect.height

    #=== Font coint ===#
    logs.info("Mengatur teks coint")
    id, coint, name = data
    font_coint = Font(asset["fonts"]["PressStart2P"], 20)
    coint_text, coint_text_rect = font_coint.render(str(coint),
                                                    (255, 255, 255))
    coint_text_rect.bottom = 28
    coint_text_rect.right += 45

    credit_window = False

    running = True
    while running:
        events = core.events()
        if events["type"]["quit"]:
            return False
        elif events["type"]["mousedown"]:
            if events["keys"]["button"] == 1:
                if not credit_window:
                    if btn_play_center.collidepoint(get_pos()):
                        asset["effects"]["click-effects"].play()
                        return True
                    elif btn_settings_center.collidepoint(get_pos()):
                        asset["effects"]["click-effects"].play()
                        credit_window = True
                    elif btn_keluar_center.collidepoint(get_pos()):
                        asset["effects"]["click-effects"].play()
                        return False
                    elif btn_credits_center.collidepoint(get_pos()):
                        asset["effects"]["click-effects"].play()
                        credit_window = True
                else:
                    if btn_close_center.collidepoint(get_pos()):
                        asset["effects"]["click-effects"].play()
                        credit_window = False

        screen.blit(bg, (0, 0))
        if credit_window:
            screen.blit(win_credits, win_credits_center)
            screen.blit(btn_close, btn_close_center)
        else:
            screen.blit(btn_play, btn_play_center)
            screen.blit(btn_keluar, btn_keluar_center)
            screen.blit(btn_settings, btn_settings_center)
            screen.blit(btn_credits, btn_credits_center)
            screen.blit(coint_image, coint_rect)
            screen.blit(coint_text, coint_text_rect)
        screen.blit(info_text, info_rect)
        update()