pygame.init()
-WIDTH, HEIGHT = 720, 720
+WIDTH, HEIGHT = 1080, 640
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Bee Movie Typer")
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()