Rozdział 17 · Interfejs gry
Sterowanie klawiaturą
1-9 to te same ruchy co kliknięcie myszką, przez ten sam kod.
Mysz i klawiatura spotykają się w jednym punkcie
keyboard_control.py
def on_key(self, event):
if event.keysym in ("r", "R"):
self.new_round()
return
if event.char and event.char.isdigit():
n = int(event.char)
if 1 <= n <= 9:
self.attempt_move(n - 1) # klawisz 1 -> indeks 0, ... 9 -> indeks 8
Klawiatura nie otrzymuje swojej kopii zasad
Obsługa klawiatury TYLKO przekształca wciśnięty klawisz na numer pola i wywołuje
attempt_move() jest tą samą funkcją, która powoduje kliknięcie myszką. Jeśli ścieżka klawiatury kopiowała sprawdzenie zwycięzcy osobno, oba zestawy zasad ostatecznie się rozdzieliły (Debug Lab 9, sekcja 17.29 – podobny błąd z literówką w linijce).| Klawisz | Indeks Komórki |
|---|---|
| 1 | 0 |
| 2 | 1 |
| 3 | 2 |
| 4 | 3 |
| 5 | 4 |
| 6 | 5 |
| 7 | 6 |
| 8 | 7 |
| 9 | 8 |
keysym przeciwko char – char jest tu wybierany
Rozdział 17.8 pokazała różnicę:
event.char to faktyczny wpisany znak. Dla klawiszy numerycznych w górnym rzędzie jest on przewidywalnie równy samej liczbie; z dodatkową klawiaturą numeryczną (NumPad) zachowanie jest zwykle takie samo, jeśli NumLock jest włączone, ale może się różnić w zależności od platformy, układu i stanu NumLock — jeśli klawiatura jest ważna dla Twojego projektu, przetestuj obie opcje na docelowym systemie. Tutaj event.char jest nadal wygodniejsze niż porównanie przez event.keysym.Praktyka: Klucze 1-9 i R
Moduł tkinter otwiera natywne okno Python — wykonaj lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie