Source code for src.chip8.keyboard

"""
::

        Keyboard                    Chip-8
    +---+---+---+---+           +---+---+---+---+
    | 1 | 2 | 3 | 4 |           | 1 | 2 | 3 | C |
    +---+---+---+---+           +---+---+---+---+
    | Q | W | E | R |           | 4 | 5 | 6 | D |
    +---+---+---+---+     =>    +---+---+---+---+
    | A | S | D | F |           | 7 | 8 | 9 | E |
    +---+---+---+---+           +---+---+---+---+
    | Z | X | C | V |           | A | 0 | B | F |
    +---+---+---+---+           +---+---+---+---+

"""


import sys
import pygame

from typing import List

_KEYS = {
    pygame.K_1: 0x1, pygame.K_2: 0x2, pygame.K_3: 0x3, pygame.K_4: 0xC,
    pygame.K_q: 0x4, pygame.K_w: 0x5, pygame.K_e: 0x6, pygame.K_r: 0xD,
    pygame.K_a: 0x7, pygame.K_s: 0x8, pygame.K_d: 0x9, pygame.K_f: 0xE,
    pygame.K_z: 0xA, pygame.K_x: 0x0, pygame.K_c: 0xB, pygame.K_v: 0xF
}


[docs]class Keyboard:
[docs] def poll_event(self, keys_pressed_buf: List[int]): for event in pygame.event.get(): if event.type == pygame.KEYDOWN or event.type == pygame.KEYUP: self.key_press(event, keys_pressed_buf) elif event.type == pygame.QUIT: pygame.quit() sys.exit()
[docs] def key_press(self, event, keys_pressed_buf: List[int]): if event.key in _KEYS: key = _KEYS[event.key] if event.type == pygame.KEYDOWN: keys_pressed_buf[key] = 1 elif event.type == pygame.KEYUP: keys_pressed_buf[key] = 0