注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
youxinweizhi的个人空间 https://home.eeworld.com.cn/space-uid-836817.html [收藏] [复制] [分享] [RSS]
日志

贪吃蛇 for esp32(是时候表演真正的技术了)

已有 475 次阅读2018-10-24 14:44 |个人分类:esp8266

效果图:



[hide=d365]



  1. import random
  2. import machine
  3. from machine import Pin,I2C,ADC
  4. import ssd1306
  5. from time import sleep
  6. import framebuf


  7. i2c = I2C(scl=Pin(18), sda=Pin(19), freq=900000)
  8. oled = ssd1306.SSD1306_I2C(128,64, i2c)
  9. oled.poweron()
  10. oled.init_display()
  11. oled.fill(0)
  12. oled.show()

  13. w=8
  14. h=8
  15. st=8

  16. base_x=20
  17. base_y=20
  18. snoke=[[10,10],[20,10],[30,10]]
  19. by="right"
  20. oled.fill(0)
  21. oled.fill_rect(snoke[0][0],snoke[0][1],w,h,1)
  22. oled.fill_rect(snoke[1][0],snoke[1][1],w,h,1)
  23. oled.fill_rect(snoke[2][0],snoke[2][1],w,h,1)
  24. oled.show()
  25.   
  26. def suiji():
  27.   global base_x
  28.   global base_y
  29.   base_x = random.randint(10,100)
  30.   base_y = random.randint(10,50)

  31. def base():
  32.   oled.fill_rect(base_x,base_y,w,h,1)
  33. def check():

  34.   if (abs(base_x-snoke[0][0]))<=2 and (abs(base_y-snoke[0][1]))<=2:
  35.     if by=="up":
  36.       new=[snoke[-1][0],snoke[-1][1]+st]
  37.       snoke.append(new)
  38.       suiji()
  39.     if by=="down":
  40.         new=[snoke[-1][0],snoke[-1][1]-st]
  41.         snoke.append(new)
  42.         suiji()
  43.     if by=="left":
  44.         new=[snoke[-1][0]+st,snoke[-1][1]]
  45.         snoke.append(new)
  46.         suiji()
  47.     if by=="right":
  48.         new=[snoke[-1][0]-st,snoke[-1][1]]
  49.         snoke.append(new)
  50.         suiji()
  51. def right():
  52.   global snoke
  53.   oled.fill(0)
  54.   base()
  55.   new=[snoke[0][0]+st,snoke[0][1]]
  56.   snoke.insert(0,new)
  57.   snoke.pop()
  58.   for x in range(len(snoke)):
  59.     oled.fill_rect(snoke[x][0],snoke[x][1],w,h,1)
  60.   oled.show()
  61.   
  62. def up():
  63.   global snoke
  64.   oled.fill(0)
  65.   base()
  66.   new=[snoke[0][0],snoke[0][1]-st]
  67.   snoke.insert(0,new)
  68.   snoke.pop()
  69.   for x in range(len(snoke)):
  70.     oled.fill_rect(snoke[x][0],snoke[x][1],w,h,1)
  71.   oled.show()
  72.    
  73.   
  74.   
  75. def down():
  76.   global snoke
  77.   oled.fill(0)
  78.   base()
  79.   new=[snoke[0][0],snoke[0][1]+st]
  80.   snoke.insert(0,new)
  81.   snoke.pop()
  82.   for x in range(len(snoke)):
  83.     oled.fill_rect(snoke[x][0],snoke[x][1],w,h,1)
  84.   oled.show()
  85. def left():
  86.   global snoke
  87.   oled.fill(0)
  88.   base()
  89.   new=[snoke[0][0]-st,snoke[0][1]]
  90.   snoke.insert(0,new)
  91.   snoke.pop()
  92.   for x in range(len(snoke)):
  93.     oled.fill_rect(snoke[x][0],snoke[x][1],w,h,1)
  94.   oled.show()  

  95. a1=ADC(Pin(35))
  96. a2=ADC(Pin(34))
  97.   
  98. def test():
  99.   global by
  100.   x=a1.read()
  101.   y=a2.read()
  102.   if x==0:
  103.     by="left"
  104.   elif x==4095:
  105.     by="right"
  106.   elif y==0:
  107.     by="up"
  108.   elif y==4095:
  109.     by="down"


  110. while 1:
  111.   check()
  112.   test()
  113.   if by=="right":
  114.     right()
  115.   elif by=="left":
  116.     left()
  117.   elif by=="up":
  118.     up()
  119.   elif by=="down":
  120.     down()
  121.   sleep(0.5)
  122.   print('snoke:%s,%s' %(snoke[0][0],snoke[0][1]))
  123.   print('base:%s,%s' %(base_x,base_y))

复制代码


[/hide]


此内容由EEWORLD论坛网友youxinweizhi原创,如需转载或用于商业用途需征得作者同意并注明出处


本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章