Migration from GitHub
This commit is contained in:
182
game.py
Normal file
182
game.py
Normal file
@@ -0,0 +1,182 @@
|
||||
##################################
|
||||
#
|
||||
# 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()
|
||||
Reference in New Issue
Block a user