程序员技术宅万圣节自制“南瓜俄罗斯方块”

  南瓜灯是万圣节必备的东西,但如果把南瓜和经典视频游戏俄罗斯方块结合在一起,会产生什么新东西呢?Pumpktris(南瓜俄罗斯方块)!国外程序员技术宅 Nathan 童鞋就 DIY 了一个 Pumpktris,把做好的电路板放在南瓜中,南瓜柄当游戏控制器,完全可以打一把!

  Nathan 还把制作“南瓜俄罗斯方块”的过程制作成文,星密码货源网编译如下。

  

  创意

  写下所有疯狂、一闪而过的想法,这是我的习惯之一,然后回头再检查,而不是当时做判断,这样也不会把创意忘掉。在10月份初,我在回想去年的一个创意,制作“南瓜俄罗斯方块”。我的最初计划是给南瓜塑形,在南瓜成长的过程中,把南瓜整成俄罗斯方块游戏中的各种形状,然后在万圣节把这些整形后的南瓜拼堆在一起。因为离万圣节也没多少周了,想种南瓜,也晚了,所以我想:为什么做一个可以玩俄罗斯方块的南瓜呢?

  我还有一块没有用过的 LOLShield(译注:一种 9×14 的 LED 板),我也知道之前有人在这个板子上编写过俄罗斯方块游戏。,所以我有了个简单想法,南瓜上钻一些洞,放 LED 灯,再做一个控制器,就差不多了。噢,不对,那样会不会太简陋了。LED 灯又小,并且都集中在 2×3″ 大的地方。这样不行!

  B 计划:还是用 LOLshield,但不把LED灯安装在板子上,我将在外部把它们连接起来,这样我就能在南瓜上把它们隔的更开了。还好我在这条路上没有走太远,就发现方法不对了。因为我发现,在LED灯之间,将会有又电线束,如果板子会搞得太厚,那我焊接和整理板子将会太麻烦了。

  所以我打算自己做一个 LED 灯板子,自己重新写程序。决定已下,我从 Mouser 买了 140 个黄色的 LED 灯,从 Adafruit 买了一对 LED 板子(LED Matrix I2C “backpacks”),这个带了一个 8*8 的 LED matrix。

  焊接时间

  第一步就是做 LED matrix,还好我在Hackaday上找到了一篇制作 70 LED 矩阵的文章。虽然我的步骤基本上差不多,但我都会过一遍。如果你要更多的理论知识,去看他们的文章吧。

  我切割了 112 段 2.5″ 和 16 段 8″ 的电路线。短线用来连接各个 LED,长线用于连接 LED 到控制器。整一个切割垫,可以轻松、快速、准确地测量出的长度。

  

  下一步,我把7条短线和1条长线焊接到一起了做了 1 条菊花链(如下图)。然后再做 15 条这样的长线,8*8 矩阵的长线就够了。

  

  然后制作夹板(jig),和Hackaday上的方式不同,我没有用硬质板,改用了1/4″的泡沫板。用锥子在上面戳孔了,这比在硬板上用钻头要快点。另外用泡沫板的好处是,孔洞可先弄小点,把LED灯塞进去还更稳定哦。

  

  在一排孔洞上安上 LED 灯,每个 LED 的阳极镀锡后简短,然后拿一条前面做好的菊花链长线,在这排灯上焊接好。在焊接之前,我在菊花链的每个连接处包上了半英寸的热缩管(heat-shrink tubing)。有几次次我忘了热缩管,不得不回头再加。注意:焊接处还烫时,别着急把热缩管套下去。否则热缩管就开始收缩,在 LED 连接处就会套不牢了。

  

  把八行LED灯(阳极)都串联好后,就开始把它们的阴极连起来了。过程一样,记得热缩管。搞定后,从泡沫夹板上取下来。

  

  看看!下面就是完工后的 LED 矩阵!

  

  咦?还差什么呢?这是一个8×8的矩阵,想玩俄罗斯方块,空间还不够哦。所以我又做了一个8×8的矩阵。

  Adafruit 的 LED Matrix Backpack 是要求其 LED 矩阵得正确焊接在板子上,但我是焊接了阴极(female header),如此一来,我可以单独给每块 8×8 LED 矩阵加电,也可以给整个 8×16 LED 大矩阵加电。有人可能会和我说,我应该要在这里或哪里加个电阻什么的,否则我会把芯片弄爆,也许他们是对的,但目前来看工作正常的。

  为了把我自己做的 LED 矩阵连接到 I2C Backpack,我切掉了部分原型板,然后焊接了阳极。然后把最后一行一列的8″ 线连接到板子上。

  

  这个能正常运行么?我得编写代码来验证了。

  编程时间

  I did all coding with the hardware mounted on my bamboo prototyping board. The mini matrices in the I2C backpack sockets fit on the desk much better than the big, floppy matrices I built would have.

  所有代码写入安装在我 Bamboo 原型板上的硬件上。

  

  There are seven Tetrominos—yes, that’s what they’re called—in the game. Each has four points, as implied by the “tetra” prefix. A three-dimensional array stores the location of every pixel of every shape, in each of four possible rotations. Storing each rotation is a lot easier (for my brain at least) than calculating it on the fly. As an example, here’s the T shape:

  俄罗斯游戏中共有七种形状(Tetromino),每种形状都只有四个方块(点),这也就是为什么会用上 tetra 前缀的原因。用一个三维数组来存储各种形状每个点的位置,有四种可能的旋转角度。存储每个旋转角度要比在下降时计算其角度更简单(至少我是这样想的)。下面是 T 形状的例子:

  /* T */ {

  /* angle 0 */ { {0,1}, {1,1}, {2,1}, {1,2} },

  /* angle 90 */ { {1,0}, {1,1}, {2,1}, {1,2} },

  /* angle 180 */ { {1,0}, {0,1}, {1,1}, {2,1} },

  /* angle 270 */ { {1,0}, {0,1}, {1,1}, {1,2} }

  }

  为了绘制活动块,程序设置有一个 activePiece 变量(形状数组的索引)和一个转动角度变量(形状转动角度描述索引),然后设置每个像素对,每个像素对引出两个偏量:yOffset 和 xOffset,分别指活动块离屏幕底边的距离和离屏幕左边的距离。

  It also keeps an array describing the status of each “fixed” piece. With every move of the active piece, whether by gravity or by user control, it checks against that fixed-piece array to see if the requested move can be made without a collision. If the forbidden movement is left, right, or a rotation, it simply doesn’t make the move. If the forbidden movement is vertical it considers the piece to have landed and writes the piece to the array of fixed pieces, then launches a new active piece. Along the way it keeps score, tracks the level, speeds up the drop of the active piece as the game goes on, etc.

  还要有一个描述每个“固定块”状态的数组。

  加工南瓜

  这个工程需要一个完美的容器,呃,我说的就是南瓜。南瓜得足够高,得装下8英寸高的 LED 矩阵,还得有个长又直的南瓜柄。我开始买了 3 个南瓜,以为都是完美品,回家才知道一瓜不如一瓜。最后总算有个合适的,其他几个我就用来联系打孔和练刀工了。

  进南瓜里面,我在背面开了一个大口。注意:千万别从南瓜柄那下刀,南瓜柄还得留着做游戏控制刊。放 LED 灯,从背面比从上面放更容易。

  拿一张纸,仿照 8×16 LED 矩阵大小再画一个矩阵,做好标记。

  

  做好标记后,我用 13/64″ 钻头打孔了。

  

  因为圆孔不怎么适合用来做俄罗斯方块游戏,所以我在每个洞眼旁边,用 X-Act 刀戳出了方形。

  

  为了把南瓜柄改造成控制杆,我小心翼翼地从根部锯开了南瓜柄,然后再钻了一个 1/8″ 大小的孔眼,游戏杆得穿过这个孔。

  

  在南瓜内部,瓜柄下方要整平出一个正方形。把锚钉切短了些(过长会穿透南瓜),然后拧紧。稍后再螺丝把控制杆固定在锚钉上。

  

  控制杆的话,我买了SparkFun的短柄操作杆,把红球拧下来,换上南瓜柄。我在南瓜柄上钻了一个孔,给 6mm 的螺栓上胶,然后放进南瓜柄,然后再把南瓜柄拧上操作杆。

  

  然后把 LED 灯塞进南瓜孔洞。中间有个小插曲,从南瓜外边看着是打了16行的孔,从里面看却是15行。因为南瓜不够长,有弧度,导致上上面有两行洞眼打到一行去了。最上一排就只好直接把 LED 灯强行摁进合适的位置去了。

  

  最后把每块电路线接好,电源是8节充电电池。

  是时候来玩一把南瓜俄罗斯方块了!!!

  

  除了上面那块 8×8 的矩阵有时候会有些小故障,其他部分运行的都很好。也许是电源供给问题,但应该是一些间断的短路,因为这么多电路连接点都在南瓜肉中。操作杆在上面,而显示屏却在下方,玩起来也觉得怪怪的。如果我重新做一个的话,我会把控制杆放在另外一个独立的南瓜上,或者用无线操作杆,或者把控制杆外接线路打扮成南瓜藤。

  我的一些数据:

  128 个LED灯

  256个热缩管

  313个焊接处

  大约每天12小时,用了一周半

  目前最高得分是 9800

  下一步做什么?打算移植到西瓜上哦~(这个是逗你玩的)

时间: 2024-10-10 09:55:10

程序员技术宅万圣节自制“南瓜俄罗斯方块”的相关文章

被swoole坑哭的PHP程序员

本文主要记录一下学习swoole的过程.填过的坑以及swoole究竟有多么强大! 首先说一下对swoole的理解:披着PHP外衣的C程序.很多PHPer朋友看到swoole提供的强大功能.外界对其的崇拜便跃跃欲试的安装.调试其demo.编写新功能,然后兴奋的奔走相告.没过几天当你按照自己的理解继续用swoole时,发现代码并没有按照自己的预期运行,然后开始破口大骂,什么破东西呀,代码跟demo基本一样,为啥运行不通呢?什么狗屁work.task.共享内存.ipcs.异步,各种问题涌现,然后迅速去

我的程序员之路:一.从步兵到骑兵

13年六月份毕业. 加上毕业前在 NEC 的实习,现在算是工作两年了.小小的回顾一下. 自己进入编程这一行,实属无奈,却又是自己的喜欢的选择.很矛盾对吧. 一事无成的大学 话说自己毕业的时候,是个连任意语言的 Hello World 都写不出来的超级菜鸟,而自己还是计算机专业的科班出身.真是丢死人了.那么大学期间干什么去了呢? 自己臆想去跨专业考研,而考研科目的选择是:什么专业不考高数,咱考啥专业.于是在大学期间自学了会计,英语,新闻等许多专业的专业课.然后,被自己全盘否定了. 得过去的大学成绩

程序员必读书单

作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文地址:http://www.cnblogs.com/figure9/p/developer-reading-list.html 关于 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读.旨在成为最好最全面的程序员必读书单. 前言 Reading makes a full man; conference a ready man; and writing

程序员技术练级攻略

以下全文来自http://coolshell.cn/articles/4990.html 前言 你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发) 建议: 不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用. 回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样. 一定要动手,例子不管多么简

打磨程序员的专属利器——文本

打磨程序员的专属利器分三个专题展示-- 1. 命令行&文件 2. 快捷键 3. 文本 (本文) 1. 记笔记 好记性不如烂笔头,对于程序员更是如此.学习某种新语言或者某个库,若事先不记点笔记,几年后再拣起来会非常地慢. 之前自己一直用“为知笔记”,但慢慢发现了几个问题. a. 这个软件喜欢升级,而每次升级都将界面改得面目全非(其实现在绝大多数软件都喜欢没事升级).我只是想一个简洁的软件界面,只想专注于笔记,而为知的每一次更新后都得花精力在熟悉界面上. b. 为知的笔记不是文本,这样笔记内容几乎只

程序员必读书

前言 Reading makes a full man; conference a ready man; and writing an exact man. Francis Bacon 优秀的程序员应该具备两方面能力: 良好的程序设计能力: 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列): 理解计算机科学的核心概念(例如计算机系统结构.操作系统.编译原理和计算机网络): 熟悉至少两门以上编程语言(例如C++,Java,C#,和Python): 专业的软件开发素养: 具备良好的编程

程序员必读书单(转)

作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://lucida.me/blog/developer-reading-list/ 关于 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读.旨在成为最好最全面的程序员必读书单. 前言 Reading makes a full man; conference a ready man; and writing an exact man.

中国现代程序员的苦B生活

程序员又名"程序猿"是从事程序开发.维护的专业人员:"干得比驴累,吃得比猪差,起得比鸡早,睡得比狗晚,看上去比谁都好,五年后比谁都老.很多程序员都曾这样感慨和抱怨过自己的生活状态." 亚健康状态是人体处于健康和疾病之间的过渡阶段,在身体上.心理上没有疾病,但主观上却有许多不适的症状表现和心理体验. 对于程序员来说上班的主要工作就是一天到晚坐在电脑前不断的编辑程序:所以程序员有八成上是近视眼,同时对于程序员来说,工作场地是不限制的,也就是说可以在家里工作,所以程序员也

程序员必读书目

作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://lucida.me/blog/developer-reading-list/ 关于 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读.旨在成为最好最全面的程序员必读书单. 前言 Reading makes a full man; conference a ready man; and writing an exact man.