tic_tac_toe.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import time
  2. import flipperzero as f0
  3. def init_grid():
  4. return [
  5. [" ", " ", " "],
  6. [" ", " ", " "],
  7. [" ", " ", " "],
  8. ]
  9. m_exit = False
  10. m_grid = init_grid()
  11. m_x = 1
  12. m_y = 1
  13. m_is_cross = True
  14. @f0.on_input
  15. def input_handler(button, type):
  16. global m_exit
  17. global m_grid
  18. global m_x
  19. global m_y
  20. global m_is_cross
  21. if button == f0.INPUT_BUTTON_BACK and type == f0.INPUT_TYPE_LONG:
  22. m_exit = True
  23. elif button == f0.INPUT_BUTTON_BACK and type == f0.INPUT_TYPE_SHORT:
  24. m_grid = init_grid()
  25. elif button == f0.INPUT_BUTTON_LEFT and type == f0.INPUT_TYPE_SHORT:
  26. m_x = (m_x - 1) % 3
  27. elif button == f0.INPUT_BUTTON_RIGHT and type == f0.INPUT_TYPE_SHORT:
  28. m_x = (m_x + 1) % 3
  29. elif button == f0.INPUT_BUTTON_UP and type == f0.INPUT_TYPE_SHORT:
  30. m_y = (m_y - 1) % 3
  31. elif button == f0.INPUT_BUTTON_DOWN and type == f0.INPUT_TYPE_SHORT:
  32. m_y = (m_y + 1) % 3
  33. elif button == f0.INPUT_BUTTON_OK and type == f0.INPUT_TYPE_SHORT:
  34. m_grid[m_x][m_y] = "X" if m_is_cross else "O"
  35. m_is_cross = not m_is_cross
  36. def draw_grid():
  37. global m_grid
  38. global m_x
  39. global m_y
  40. f0.canvas_clear()
  41. f0.canvas_draw_frame(2, 2, 60, 60)
  42. f0.canvas_draw_line(22, 2, 22, 62)
  43. f0.canvas_draw_line(42, 2, 42, 62)
  44. f0.canvas_draw_line(2, 22, 62, 22)
  45. f0.canvas_draw_line(2, 42, 62, 42)
  46. px = m_x * 20 + 4
  47. py = m_y * 20 + 4
  48. f0.canvas_draw_frame(px, py, 16, 16)
  49. f0.canvas_set_text_align(f0.ALIGN_CENTER, f0.ALIGN_CENTER)
  50. for x in range(0, 3):
  51. for y in range(0, 3):
  52. px = x * 20 + 10 + 2
  53. py = y * 20 + 10 + 2
  54. f0.canvas_set_text(px, py, m_grid[x][y])
  55. f0.canvas_update()
  56. while not m_exit:
  57. draw_grid()
  58. time.sleep_ms(25)