################################## # # Sight Words - For Kids by Kids # ################################## # TODO: # - Add Scene to Pick Wordlists # - Create CheckBox Object # - Add Image to main screen # - Add Image to Word Game # - Make the Colors easier to change # - Add Delay 'animation' to word changing # - Add alphabet list import random import pygame import pygame.freetype import os FONT = "resources/fonts/iosevka-regular.ttf" HEIGHT = 600 WIDTH = 800 DISPLAY = (WIDTH, HEIGHT) DEPTH = 0 FLAGS = 0 CORRECT = 0 MISSED = 0 class Scene(object): def __init__(self): pass def render(self, screen): raise NotImplementedError def update(self): raise NotImplementedError def handle_events(self, events): raise NotImplementedError class GameScene(object): def next_word(self): return self.words[random.randint(0,len(self.words)-1)] def write_word(self, screen, text): # blank the word area pygame.draw.rect(screen, (20,20,20), (0,0,WIDTH*0.75, HEIGHT), 0 ) # Write the current word text_surface, _ = self.font.render(text, pygame.Color("DeepPink")) text_rect = text_surface.get_rect(center=((WIDTH//8)*3, HEIGHT//2)) screen.blit(text_surface, text_rect) pygame.display.update() def __init__(self): super(GameScene, self).__init__() self.font = pygame.freetype.Font(FONT, 72) self.sfont = pygame.freetype.Font(FONT, 24) self.sound_correct = pygame.mixer.Sound('resources/sounds/MENU A_Select.wav') self.sound_missed = pygame.mixer.Sound('resources/sounds/ALERT_Error.wav') self.CORRECT = 0 self.MISSED = 0 self.updating = False self.words = [] # Load all the words in the wordlists path = "resources/wordlists/" filelist = os.listdir(path) for wordlistf in filelist: with open(path+wordlistf) as f: for line in f: self.words.append(line.rstrip()) print(self.words) self.current_word = self.next_word() pass def render(self, screen): # Blank the Screen screen.fill((20,20,20)) if self.updating: self.write_word(screen, "...") pygame.time.wait(200) self.updating = False self.write_word(screen, self.current_word) # Write the Correct Score yes_surface, _ = self.font.render(str(self.CORRECT), pygame.Color("Green")) yes_rect = yes_surface.get_rect(center=((WIDTH//8)*7, (HEIGHT//3))) screen.blit(yes_surface, yes_rect) # Write the Missed Score no_surface, _ = self.font.render(str(self.MISSED), pygame.Color("Red")) no_rect = no_surface.get_rect(center=((WIDTH//8)*7, (HEIGHT//3)*2)) screen.blit(no_surface, no_rect) def update(self): pass def handle_events(self, events): for e in events: if e.type == pygame.KEYDOWN: if e.key == pygame.K_q: pygame.quit() elif e.key == pygame.K_m: self.current_word = self.next_word() pygame.mixer.Sound.play(self.sound_correct) self.CORRECT += 1 self.updating = True elif e.key == pygame.K_z: self.current_word = self.next_word() pygame.mixer.Sound.play(self.sound_missed) self.MISSED += 1 self.updating = True class TitleScene(object): def __init__(self): super(TitleScene, self).__init__() self.font = pygame.freetype.Font(FONT, 72) self.sfont = pygame.freetype.Font(FONT, 24) def render(self, screen): # beware: ugly! screen.fill((20, 20, 20)) text1, _ = self.font.render('Sight Words', pygame.Color("DeepPink")) text1_rect = text1.get_rect(center=(WIDTH//2,HEIGHT//2)) screen.blit(text1, text1_rect) text2, _ = self.sfont.render('> press space to start <', pygame.Color("Purple")) text2_rect = text2.get_rect(center=(WIDTH//2,(HEIGHT - 50))) screen.blit(text2, text2_rect) def update(self): pass def handle_events(self, events): for e in events: if e.type == pygame.KEYDOWN and e.key == pygame.K_SPACE: self.manager.go_to(GameScene()) #pygame.quit() class SceneMananger(object): def __init__(self): self.go_to(TitleScene()) def go_to(self, scene): self.scene = scene self.scene.manager = self def main(): pygame.init() screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH) pygame.display.set_caption("Sight Words - For Kids By Kids") clock = pygame.time.Clock() running = True manager = SceneMananger() while running: clock.tick(30) if pygame.event.get(pygame.QUIT): running = False return manager.scene.handle_events(pygame.event.get()) manager.scene.update() manager.scene.render(screen) pygame.display.flip() if __name__ == "__main__": main()