3步做一个基于树莓派Pico的“九子贤棋游戏机”
本帖最后由 nemon 于 2024-1-8 13:56 编辑一、项目简介
最近接触到一种据说是很古老的“九子棋游戏”,搞明白规则之后,就用树莓派Pico做了出来。
“九子贤棋”又名LuckyStar,是中国西部的一种在五角星形棋盘上玩的单人益智游戏。玩法是,开始时在五角星形棋盘的每个直线交叉点各放一枚棋子,然后按玩家意愿,移除一个棋子。之后,玩家可以像跳棋那样,移动一颗棋子到空白的位置,同时可以移除移动过程中跳过的棋子。移动棋子必须沿着直线,一次必须跳过一枚棋子,且只能跳过一枚棋子。当按前述规则无法移动任何棋子时,游戏结束。如果游戏结束时,棋盘上只剩下一枚棋子,则玩家获胜。
二、硬件&软件清单:
1、Pico(PicoW也可以)
2、OLED屏,我用的是Seeed Studio的Grove OLED Display 0.96,它的控制芯片是SSD1315,用SSD1306的库也可以兼容:
3、按钮用的是Grove-Dual-Button v1.0,也是Seeed Studio的;
4、还用到一块转接板,型号是 Grove shield for PI PICO v1.0,当然只要把线接对了,不用也可以;
5、电脑上的编辑器用的是Thonny,如果你喜欢其他支持micro python硬件的IDE也可以;
6、还有就是树莓派Pico的micro python固件:
三、制作过程(和把大象装冰箱里一样,真的只有3步)
第1步:连接外设
如果用转接板,照图连接:
如果不用转接板,那么根据前面各模块附的文档,只要把模块的红线连到VCC,黑线连到GND,其他的线按图连接即可:
第2步:刷树莓派Pico的micro python固件:按着boot上电,就会出来U盘,拷贝进去就行:
第3步:烧代码
一共有3个文件——OLED库、字库、主程序,烧写的方法是,用Thonny连上Pico,之后新建空白文件,把文件的内容拷贝进去,然后保存。保存的时候,会提问是保存到本机还是Pico上。选择Pico后,会提示你输入文件名,这时把文件名输入后保存(注意不要忘了“.py”扩展名)。
四、技术原理:
因为模块化所以也没啥高深的好讲的,主要就是OLED用I2C协议通信,所以注意SDA和SCL两根线别接反了。还有,按钮用中断来响应,那么就要先研究下模块的电路图,才能决定是响应下降沿还是上升沿。
五、代码注释:
超级长的部分来啦。先收一下代码压缩包吧:
共有3个文件:
1、OLED库ssd1306.py,不解释。
2、字模文件char_cn.py,注意所有的字都是转了90度的8x8像素。汉字的变量名是拼音,比如:
#欢
CHAR_CN_BITMAP_HUAN1 = b'\x94\x64\x9C\x08\x86\x74\x8C'而数字的变量名就包含他自己。但是只有4像素宽:
# 0
CHAR_NUM_BITMAP_0 = b'\x00\x3C\x42\x3C'最后用一个list装下所有的数字,这样可以用CHAR_NUM_BITMAP_ARRAY的形式来引用,方便很多。
CHAR_NUM_BITMAP_ARRAY=[
CHAR_NUM_BITMAP_0,
CHAR_NUM_BITMAP_1,
CHAR_NUM_BITMAP_2,
CHAR_NUM_BITMAP_3,
CHAR_NUM_BITMAP_4,
CHAR_NUM_BITMAP_5,
CHAR_NUM_BITMAP_6,
CHAR_NUM_BITMAP_7,
CHAR_NUM_BITMAP_8,
CHAR_NUM_BITMAP_9,
]3、主函数的文件名是lucky9star_solution_pico.py,如果想上电自动运行,要按“main.py”的名字保存。虽然代码有点长,但是注释和函数命名很友好,这里就不详细解释了。注意函数solution是个彩蛋,能够通过DFS的方式找出通关的答案,但是在这个项目里,并没有UI配合。
六、图片/视频展示:
实物接好线是这样:
喜欢玩的同学可以动手试试,我装好后的效果是这样的:
https://www.bilibili.com/video/BV1bW4y1N7GL/
裸件裸跑确实不够美观,如果你喜欢可以自己做一个壳子。
再剧透一下,楼主正在研究智能识别棋子的版本,希望有大佬能够指点。
七、一些有用的文档
就到这里,休息啦。
页:
[1]