From aa3d3c4576e3d00afb613ae443e9981dc99e006a Mon Sep 17 00:00:00 2001 From: Skullheadx <94652084+Skullheadx@users.noreply.github.com> Date: Thu, 29 Dec 2022 22:31:38 -0500 Subject: [PATCH] working now --- main.py | 6 +++--- typer_game.py | 51 ++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 45 insertions(+), 12 deletions(-) diff --git a/main.py b/main.py index 20b40a1..00242ea 100644 --- a/main.py +++ b/main.py @@ -1,11 +1,10 @@ import threading import time -import pyautogui from pygame import mixer from pynput import keyboard -with open("test.txt", "r") as f: +with open("YoshikageKira.txt", "r") as f: script = f.read() mixer.init() @@ -19,8 +18,9 @@ def typer(): mixer.music.play(-1) k = keyboard.Controller() for char in script: - if char == keyboard.Key.enter: + if char == "\n": char = keyboard.Key.enter + # print(f"{char=}, {keyboard.Key.enter}", end='') k.press(char) time.sleep(delay) k.release(char) diff --git a/typer_game.py b/typer_game.py index a640cff..02db396 100644 --- a/typer_game.py +++ b/typer_game.py @@ -2,7 +2,7 @@ import pygame pygame.init() -WIDTH, HEIGHT = 720, 720 +WIDTH, HEIGHT = 1080, 640 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Bee Movie Typer") @@ -22,47 +22,80 @@ class Words: with open("BeeMovieScript.txt", "r") as f: script = f.read() - font = pygame.font.Font("MonospaceTypewriter.ttf", 10) + font = pygame.font.Font("MonospaceTypewriter.ttf", 35) lines = script.split('\n') def __init__(self): - self.words = [self.font.render(word, True, GRAY) for word in self.lines] + self.left_bound, self.right_bound = WIDTH * 0.05, WIDTH * 0.8 + + self.words = [] + for l in self.lines: + line = "" + l = l.split() + for i, word in enumerate(l): + line += word + ' ' + rendered = self.font.render(line, True, GRAY) + if rendered.get_width() >= self.right_bound or i == len(l) - 1: + self.words.append(rendered) + line = "" + for i in self.words: + if i.get_width() > self.right_bound: + self.right_bound = i.get_width() + self.index = 0 self.typed_words = [""] self.display_words = [self.font.render("", True, BLACK)] + self.position = pygame.Vector2(self.left_bound, HEIGHT/2) + + self.draw_cursor = True + self.time = 0 def update(self, delta): for event in pygame.event.get(): - print(event) if event.type == pygame.QUIT: return COMMAND_EXIT elif event.type == pygame.TEXTINPUT: char = event.text + if self.display_words[-1].get_width() >= self.words[len(self.display_words) - 1].get_width(): + self.add_new_line() + self.typed_words[-1] += char self.display_words[-1] = self.font.render(self.typed_words[-1], True, BLACK, WHITE) if char == self.script[self.index]: self.index += 1 - elif event.type == pygame.KEYDOWN: if event.key == pygame.K_BACKSPACE: self.typed_words[-1] = self.typed_words[-1][:-1] self.display_words[-1] = self.font.render(self.typed_words[-1], True, BLACK, WHITE) elif event.key == pygame.K_RETURN: - self.typed_words.append("") - self.display_words.append(self.font.render("", True, BLACK)) + self.add_new_line() + + if self.time >= 500: + self.draw_cursor = not self.draw_cursor + self.time = 0 + self.time += delta + def add_new_line(self): + self.position.y -= self.display_words[-1].get_height() + self.typed_words.append("") + self.display_words.append(self.font.render("", True, BLACK)) + def draw(self, surf): surf.fill(WHITE) - prev = pygame.Vector2(0, 0) + prev = self.position.copy() for word in self.words: surf.blit(word, word.get_rect(topleft=prev)) prev.y += word.get_height() - prev = pygame.Vector2(0, 0) + prev = self.position.copy() for word in self.display_words: surf.blit(word, word.get_rect(topleft=prev)) prev.y += word.get_height() + # pygame.draw.line(surf, BLACK, (self.left_bound, 0), (self.left_bound, HEIGHT)) + # pygame.draw.line(surf, BLACK, (self.right_bound, 0), (self.right_bound, HEIGHT)) + if self.draw_cursor: + pygame.draw.line(surf, BLACK, (prev.x + self.display_words[-1].get_width(),prev.y - self.display_words[-1].get_height()),(prev.x + self.display_words[-1].get_width(),prev.y)) game = Words() -- 2.54.0