包含一些自己写的小玩意儿
- 钻石棋
- 生命游戏
- 迷宫算法
- 以及一个隐藏的,某司题库抓题&搜题脚本(需借助本地油猴脚本,实现了浏览器跨窗口跨域名信息交互)
钻石棋是早期看人家解的一个Puzzle玩具,觉得挺有意思,然后自己动手做了一个web版的,能在网页上玩的版本。
基本规则是,首先选择一个棋子直接消去。之后再任意选择一个符合条件的棋子往空出来的位置跳跃,这里的符合条件是指空格位置和起跳位置中间必须有一个存在的棋子,可以是横向的、可以是纵向的、也可以是斜线方向的。
跳跃过来之后,中间隔着的这个棋子会被消去
直到最终无法移动的情况。所求最优情况为整个棋盘上最终只剩下一个棋子
第二个生命游戏来源于https://leetcode.cn/problems/game-of-life/,另外有百度百科页面康威生命游戏。
生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。它最初于1970年10月在《科学美国人》杂志中马丁·葛登能(Martin Gardner,1914年11月21日-2010年5月22日。又译:马丁·加德纳)的“数学游戏”专栏出现。
这个页面只是做了个演示,也是一个非常有意思的话题,任何一个杂乱无章的初始状态,按照既定的规则一直运行下去,最终都会处于两种状态
- 在某几个状态之间一直无限循环下去
- 一直停留在某个状态,并不再继续产生新的变化
个人觉得非常有意思,就特地写了个页面来展示下
迷宫算法页面是写来给我家小朋友玩的,起因是小朋友那段时间的全脑课上拿了几张走迷宫的图,小朋友非常喜欢玩。虽然一开始非常吃力、不大会玩,但是经过几番指导之后也算有所领悟了。就比如走过的路不记得,碰壁后回来可能还会再走进之前走过的岔路,于是我就教她,让她拿一支笔划出走过的线路,如果碰壁了,则沿着之前的线往回走,往回走的过程中遇到没有划过线的岔路口再进去。这其实就是很明显的递归回溯的思想了。
在这样的情况下,我写了第一版的迷宫程序,迷宫生成算法的选择上,再看了不少资料之后选择了普⾥姆算法(Prim算法),相比其他的算法生成出来的结果而言,这个算法生成出来的结果在视觉效果上更加显得杂乱有迷惑性。
而在求解路径的方法中,自然还是回溯实现,不过在浏览器这样的环境中实现递归回溯还是需要了问题。起因还是我讲迷宫的最大格数设置到100*100这样的量级,按照原版的回溯实现,直接就报了栈溢出,显然浏览器中不支持这样的栈深度。思索之后于是换个了方法来实现,本质还是回溯,但是不再是递归调用,而是改为数组的方法模拟递归实现
在上述基本问题解决之后,又做了一些改进
- 新增了大小窗口展示,大地图展示全局地图,小地图只展示当前位置周围NxN格子内的内容
- 新增了迷雾系统,没有走到过的区域不展示相关信息
- 步数统计,统计当前关卡中一共移动了多少步数
- 完成当前关卡后自动跳转到下一难度关卡
- 键盘上下左右键以及WASD键的移动相应设置,并在页面上新增了虚拟移动键盘,方便移动端使用
其实能改能加的东西还是挺多的,有了地图,有了当前角色,如果角色再赋予一些属性,再配上一个故事的话,那么感觉一个基本的RPG的元素就勉强凑齐了
另外,没有放链接在外面的
http://next.cheungq.com/leetCode/solution/
之前写的LeetCode刷题的题解集合,另外写了个脚本抓下来然后在这里集中展示了
后续继续完善
以上内容都是基于Next.js这个框架完成的,使用React开发