programming-bongocat/main.py

103 lines
2.7 KiB
Python

# pylint:disable=E1101
import pygame
import sys
from input_manager import InputManager
from bongocat import Bongocat
from clackmanager import Clackmanager
class Main:
font = None
input_manager = InputManager()
bongocat = Bongocat()
clackmanager = Clackmanager()
debug = len(sys.argv) > 1 and sys.argv[1] == '--debug'
sounds = False
def init(self, linux):
if linux:
from pyxhook import HookManager
else:
from pyHook import HookManager
hooks_manager = HookManager()
hooks_manager.KeyDown = self.OnKeyDown
hooks_manager.KeyUp = self.OnKeyUp
hooks_manager.HookKeyboard()
if linux:
hooks_manager.start()
pygame.init()
pygame.mixer.init(buffer=1024)
pygame.mixer.set_num_channels(4)
size = (499, 374)
background = 255, 0, 255
pygame.display.set_caption("Bongocat")
bongo_ico = pygame.image.load("img/bongo.ico")
pygame.display.set_icon(bongo_ico)
screen = pygame.display.set_mode(size)
self.font = pygame.font.SysFont('Iosevka', 15)
self.bongocat.load()
self.clackmanager.load()
self.input_manager.init(linux)
self.input_manager.on_update = self.update_bongocat
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
if linux:
hooks_manager.cancel()
sys.exit()
self.input_manager.timer_update()
font_surface = self.font.render("Pressed keys: " + str(self.input_manager.currently_pressed_keys),
True, [0, 0, 0], [255, 255, 255])
textpos = font_surface.get_rect()
screen.fill(background)
self.bongocat.draw(screen)
if self.debug:
screen.blit(font_surface, textpos)
pygame.display.flip()
if linux:
hooks_manager.cancel()
def OnKeyDown(self, event):
self.input_manager.press_key(event.Key)
return True
def OnKeyUp(self, event):
self.input_manager.release_key(event.Key)
return True
def update_bongocat(self, down):
self.bongocat.is_left_paw_pressing = self.input_manager.left_keys_pressed()
self.bongocat.is_right_paw_pressing = self.input_manager.right_keys_pressed()
if down and self.sounds:
self.clackmanager.play_clack()
if __name__ == "__main__":
from sys import platform
if platform == "linux" or platform == "linux2":
linux = True
else:
linux = False
main = Main()
main.init(linux)