main_snake_LCD.py 2.7 KB

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