109 lines
3 KiB
Python
109 lines
3 KiB
Python
import board
|
|
import busio
|
|
import digitalio
|
|
import adafruit_ssd1306
|
|
import time
|
|
|
|
i2c = busio.I2C(board.GP1, board.GP0)
|
|
oled = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c)
|
|
|
|
oled.fill(0)
|
|
oled.show()
|
|
|
|
switch1 = digitalio.DigitalInOut(board.GP14)
|
|
switch1.direction = digitalio.Direction.INPUT
|
|
switch1.pull = digitalio.Pull.UP
|
|
|
|
switch2 = digitalio.DigitalInOut(board.GP13)
|
|
switch2.direction = digitalio.Direction.INPUT
|
|
switch2.pull = digitalio.Pull.UP
|
|
|
|
player1_time = 300.0
|
|
player2_time = 300.0
|
|
current_turn = 0
|
|
last_update_time = 0.0
|
|
game_over = False
|
|
|
|
last_sw1_state = True
|
|
last_sw2_state = True
|
|
debounce_delay = 0.2
|
|
last_press_time = 0.0
|
|
|
|
oled.text("PRESS ANY BUTTON", 0, 12, 1)
|
|
oled.show()
|
|
|
|
while True:
|
|
current_monotonic_time = time.monotonic()
|
|
|
|
if not game_over:
|
|
if current_turn == 1:
|
|
elapsed = current_monotonic_time - last_update_time
|
|
player1_time -= elapsed
|
|
last_update_time = current_monotonic_time
|
|
if player1_time <= 0:
|
|
player1_time = 0.0
|
|
game_over = True
|
|
current_turn = 0
|
|
elif current_turn == 2:
|
|
elapsed = current_monotonic_time - last_update_time
|
|
player2_time -= elapsed
|
|
last_update_time = current_monotonic_time
|
|
if player2_time <= 0:
|
|
player2_time = 0.0
|
|
game_over = True
|
|
current_turn = 0
|
|
|
|
sw1_current_state = switch1.value
|
|
sw2_current_state = switch2.value
|
|
|
|
if (
|
|
not sw1_current_state
|
|
and last_sw1_state
|
|
and (current_monotonic_time - last_press_time) > debounce_delay
|
|
):
|
|
if not game_over:
|
|
if current_turn == 1:
|
|
current_turn = 2
|
|
last_update_time = current_monotonic_time
|
|
elif current_turn == 0:
|
|
current_turn = 2
|
|
last_update_time = current_monotonic_time
|
|
last_press_time = current_monotonic_time
|
|
|
|
if (
|
|
not sw2_current_state
|
|
and last_sw2_state
|
|
and (current_monotonic_time - last_press_time) > debounce_delay
|
|
):
|
|
if not game_over:
|
|
if current_turn == 2:
|
|
current_turn = 1
|
|
last_update_time = current_monotonic_time
|
|
elif current_turn == 0:
|
|
current_turn = 1
|
|
last_update_time = current_monotonic_time
|
|
last_press_time = current_monotonic_time
|
|
|
|
last_sw1_state = sw1_current_state
|
|
last_sw2_state = sw2_current_state
|
|
|
|
oled.fill(0)
|
|
|
|
p1_minutes = int(player1_time // 60)
|
|
p1_seconds = int(player1_time % 60)
|
|
p1_display = "{:02d}:{:02d}".format(p1_minutes, p1_seconds)
|
|
|
|
p2_minutes = int(player2_time // 60)
|
|
p2_seconds = int(player2_time % 60)
|
|
p2_display = "{:02d}:{:02d}".format(p2_minutes, p2_seconds)
|
|
|
|
oled.text("P1: {}".format(p1_display), 0, 0, 1)
|
|
oled.text("P2: {}".format(p2_display), 0, 16, 1)
|
|
|
|
if game_over:
|
|
if player1_time <= 0:
|
|
oled.text("P2 WINS!", 70, 0, 1)
|
|
elif player2_time <= 0:
|
|
oled.text("P1 WINS!", 70, 16, 1)
|
|
|
|
oled.show()
|