5474浏览
查看: 5474|回复: 0

[项目] 3步做一个基于树莓派Pico的“九子贤棋游戏机”

[复制链接]
本帖最后由 nemon 于 2024-1-8 13:56 编辑

一、项目简介
最近接触到一种据说是很古老的“九子棋游戏”,搞明白规则之后,就用树莓派Pico做了出来。
“九子贤棋”又名LuckyStar,是中国西部的一种在五角星形棋盘上玩的单人益智游戏。玩法是,开始时在五角星形棋盘的每个直线交叉点各放一枚棋子,然后按玩家意愿,移除一个棋子。之后,玩家可以像跳棋那样,移动一颗棋子到空白的位置,同时可以移除移动过程中跳过的棋子。移动棋子必须沿着直线,一次必须跳过一枚棋子,且只能跳过一枚棋子。当按前述规则无法移动任何棋子时,游戏结束。如果游戏结束时,棋盘上只剩下一枚棋子,则玩家获胜。


二、硬件&软件清单:
1、Pico(PicoW也可以)
3步做一个基于树莓派Pico的“九子贤棋游戏机”图1
2、OLED屏,我用的是Seeed Studio的Grove OLED Display 0.96,它的控制芯片是SSD1315,用SSD1306的库也可以兼容:3步做一个基于树莓派Pico的“九子贤棋游戏机”图4

3、按钮用的是Grove-Dual-Button v1.0,也是Seeed Studio的;
3步做一个基于树莓派Pico的“九子贤棋游戏机”图3

4、还用到一块转接板,型号是 Grove shield for PI PICO v1.0,当然只要把线接对了,不用也可以;
3步做一个基于树莓派Pico的“九子贤棋游戏机”图2

5、电脑上的编辑器用的是Thonny,如果你喜欢其他支持micro python硬件的IDE也可以;
下载附件thonny-3.3.13_20240107133448.rar
6、还有就是树莓派Pico的micro python固件:
下载附件rp2-pico-20230426-v1.20.0_20240107133235.rar

三、制作过程(和把大象装冰箱里一样,真的只有3步)
第1步:连接外设
如果用转接板,照图连接:
3步做一个基于树莓派Pico的“九子贤棋游戏机”图7
如果不用转接板,那么根据前面各模块附的文档,只要把模块的红线连到VCC,黑线连到GND,其他的线按图连接即可:
3步做一个基于树莓派Pico的“九子贤棋游戏机”图8


第2步:刷树莓派Pico的micro python固件:按着boot上电,就会出来U盘,拷贝进去就行:


第3步:烧代码
一共有3个文件——OLED库、字库、主程序,烧写的方法是,用Thonny连上Pico,之后新建空白文件,把文件的内容拷贝进去,然后保存。保存的时候,会提问是保存到本机还是Pico上。选择Pico后,会提示你输入文件名,这时把文件名输入后保存(注意不要忘了“.py”扩展名)。

四、技术原理:
因为模块化所以也没啥高深的好讲的,主要就是OLED用I2C协议通信,所以注意SDA和SCL两根线别接反了。还有,按钮用中断来响应,那么就要先研究下模块的电路图,才能决定是响应下降沿还是上升沿。

五、代码注释:
超级长的部分来啦。先收一下代码压缩包吧:
下载附件src_20240107143808.rar
共有3个文件:
1、OLED库ssd1306.py,不解释。
2、字模文件char_cn.py,注意所有的字都是转了90度的8x8像素。汉字的变量名是拼音,比如:
  1. #欢
  2. CHAR_CN_BITMAP_HUAN1 = b'\x94\x64\x9C\x08\x86\x74\x8C'
复制代码
而数字的变量名就包含他自己。但是只有4像素宽:
  1. # 0
  2. CHAR_NUM_BITMAP_0 = b'\x00\x3C\x42\x3C'
复制代码
最后用一个list装下所有的数字,这样可以用CHAR_NUM_BITMAP_ARRAY[x]的形式来引用,方便很多。
  1. CHAR_NUM_BITMAP_ARRAY=[
  2.   CHAR_NUM_BITMAP_0,
  3.   CHAR_NUM_BITMAP_1,
  4.   CHAR_NUM_BITMAP_2,
  5.   CHAR_NUM_BITMAP_3,
  6.   CHAR_NUM_BITMAP_4,
  7.   CHAR_NUM_BITMAP_5,
  8.   CHAR_NUM_BITMAP_6,
  9.   CHAR_NUM_BITMAP_7,
  10.   CHAR_NUM_BITMAP_8,
  11.   CHAR_NUM_BITMAP_9,
  12. ]
复制代码
3、主函数的文件名是lucky9star_solution_pico.py,如果想上电自动运行,要按“main.py”的名字保存。虽然代码有点长,但是注释和函数命名很友好,这里就不详细解释了。注意函数solution是个彩蛋,能够通过DFS的方式找出通关的答案,但是在这个项目里,并没有UI配合。

六、图片/视频展示:
实物接好线是这样:


喜欢玩的同学可以动手试试,我装好后的效果是这样的:


裸件裸跑确实不够美观,如果你喜欢可以自己做一个壳子。
再剧透一下,楼主正在研究智能识别棋子的版本,希望有大佬能够指点。

七、一些有用的文档
下载附件Grove - OLED Display 0.96 (SSD1315)_v1.0_20240108135327.rar
下载附件Grove-Dual-Button_v1_0_SCH_190916_20240108135436.rar

下载附件Grove_shield_for_PI_PICOv1.0SCH_20240108135432.rar

就到这里,休息啦。







您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail