main_snake_LCD.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import PikaStdLib
  2. import machine
  3. # hardware init
  4. lcd = machine.LCD()
  5. lcd.init()
  6. lcd.clear('white')
  7. key = machine.KEY()
  8. key.init()
  9. time = machine.Time()
  10. x_max = 120
  11. y_max = 150
  12. # snake init
  13. s = machine.Point()
  14. w = 9
  15. h = 9
  16. s.x = 50
  17. s.y = 10
  18. len = 0
  19. while len < 3:
  20. b = s
  21. i = 0
  22. while i < len:
  23. b = b.next
  24. i = i + 1
  25. b.next = machine.Point()
  26. b.next.x = b.x - 10
  27. b.next.y = b.y
  28. b.next.prev = b
  29. len = len + 1
  30. # ring link
  31. b.next = s
  32. s.prev = b
  33. i = 0
  34. b = s
  35. while i < len:
  36. lcd.fill(b.x, b.y, w, h, 'blue')
  37. b = b.next
  38. i = i + 1
  39. print('snake lengh')
  40. print(len)
  41. # fruit init
  42. f = machine.Point()
  43. f.x = 30
  44. f.y = 20
  45. lcd.fill(f.x, f.y, w, h, 'green')
  46. # memory check
  47. mem = PikaStdLib.MemChecker()
  48. print('mem used max:')
  49. mem.max()
  50. # main loop
  51. d = 0
  52. isUpdate = 1
  53. isEat = 0
  54. while True:
  55. time.sleep_ms(50)
  56. if isUpdate:
  57. # isUpdate = 0
  58. # check eat fruit
  59. if f.x == s.x and f.y == s.y:
  60. # have eat fruit
  61. isEat = 1
  62. f.x = f.x + 30
  63. if f.x > x_max:
  64. f.x = f.x - x_max
  65. f.y = f.y + 30
  66. if f.y > y_max:
  67. f.y = f.y - y_max
  68. lcd.fill(f.x, f.y, w, h, 'green')
  69. # move snake by the direction
  70. if d == 0:
  71. x_new = s.x + 10
  72. y_new = s.y
  73. if x_new > x_max:
  74. x_new = 0
  75. elif d == 1:
  76. x_new = s.x
  77. y_new = s.y - 10
  78. if y_new < 0:
  79. y_new = y_max
  80. elif d == 2:
  81. x_new = s.x
  82. y_new = s.y + 10
  83. if y_new > y_max:
  84. y_new = 0
  85. elif d == 3:
  86. x_new = s.x - 10
  87. y_new = s.y
  88. if x_new < 0:
  89. x_new = x_max
  90. if isEat:
  91. isEat = 0
  92. b_new = machine.Point()
  93. b_new.x = x_new
  94. b_new.y = y_new
  95. b_new.prev = s.prev
  96. b_new.next = s
  97. s.prev.next = b_new
  98. s.prev = b_new
  99. s = b_new
  100. len = len + 1
  101. print('snake lengh')
  102. print(len)
  103. print('mem used max:')
  104. mem.max()
  105. # drow the snake and fruit
  106. # clear last body
  107. lcd.fill(s.prev.x, s.prev.y, w, h, 'white')
  108. # new body
  109. s.prev.x = x_new
  110. s.prev.y = y_new
  111. # head is last body
  112. s = s.prev
  113. lcd.fill(s.x, s.y, w, h, 'blue')
  114. b = s
  115. i = 0
  116. # scan key
  117. key_val = key.get()
  118. if key_val == 0:
  119. d = 0
  120. isUpdate = 1
  121. elif key_val == 1:
  122. d = 1
  123. isUpdate = 1
  124. elif key_val == 2:
  125. d = 2
  126. isUpdate = 1
  127. elif key_val == 3:
  128. d = 3
  129. isUpdate = 1