粉丝3969获赞2.1万

那天周末,我在家收拾房间,翻出一个很久没打开的旧箱子。你们有没有这种感觉?一个看起来普普通通的箱子,打开之后, 里面却什么都有,旧照片、钥匙、银行卡,还有一张不知道什么时候留下的电影票。那一刻,我突然愣了一下,这不就是我们每天在用的 javascript, 你的 object 吗?你可以把 object 想象成这样一个收纳箱,它最大的特点就一个字,能装,名字、年龄、爱好,甚至一段逻辑、一段行为,它都能装进去。而且它还特别讲究,每一样东西都有自己的标签, 这个标签在代码里就叫属性名,对应的内容就是值。所以说, object 本质上就是一个带标签的收纳系统。 有了这个箱子之后,我们就可以随时往里面放东西,也可以随时把东西拿出来。你可以直接按标签去找,也可以灵活一点,通过名字去动态查找。甚至当你发现这个箱子不够用了,还可以随手再加一个格子进去。 这种自由度是很多初学者一开始低估的。但真正有意思的地方在于, object 不是 一个普通的值,它是一个引用。这句话听起来有点抽象,我给你换个说法,想象一下,你和朋友手里各拿着一把钥匙, 但这两把钥匙打开的是同一个储物柜,如果其中一个人动了里面的东西,另一个人看到的内容也会发生变化。 object 就是 这样工作的,它不是复制一份新的箱子,而是多个变量指向同一个箱子。 这也是为什么很多人一开始会踩坑,明明改的是另一个变量,结果原来的数据也变了, 其实不是数据串了,而是你们根本就在操作同一个东西。再往深一点看, object 不 仅能装数据,还能装行为。你可以把一个函数也放进这个箱子里, 让他在需要的时候执行。这个时候这个箱子就不再只是一个收纳工具,而更像一个角色,他有属性,有动作,甚至可以和外界互动。还有一个特别有意思的点是,你可以基于一个已有的箱子 创建一个新的箱子,并继承他原有的内容。就像你接手了一个家族的储物柜,在原有基础上再加入自己的东西。 这种能力其实就是很多面向对象编程思想的基础。当然,用 object 的 时候,也有一些容易踩坑的地方,比如拷贝。 很多人以为复制了一份对象,其实只是多拿了一把钥匙,指向的还是同一个箱子。如果你真的想要一个一模一样但完全独立的新箱子,就需要做一次深拷贝, 否则后面改来改去,很容易把自己绕进去。

大家好,我是金国良,今天是二零二六年的五月十七号,今天一上午就,呃,把这个推箱子的逻辑 就是基础的逻辑都写完了,然后呢?主要是用的 ai, 也不纠结用到底用什么技术了,基本都不怎么看,就跟他提需求就行了。 哎,今天还是太晒了。说回这,我这个推箱子游戏啊,其实 就是这个技术上的实现还是还是比较简单的,主要的问题是需要设计的地方还是在于这个关卡的设计, 怎么能设计出比较好的关卡呢?这也是游戏设计师更应该关注的地方。 好的关卡其实就跟啥呢?就跟一个学习,一个学习的过程是很类似的,首先就是要从易到难嘛,然后 要一点一点的让用户来学会了解一些新的东西。 关卡应该是关卡。 呃,如何设计关卡了?我现在我我了解到的就是 就是要要有一个目的,我第一的话就是每一个关卡的话要有一个侧重的点,你比如是想告诉用户一个什么新的知识点,或者呢是 考验用户的一个什么思维方式,然后我了解的用我觉得用的比较多的就是逆向思维来设计关卡是比较好的, 我现在可能就这么点想法,接下来可能花时间比较多的就在于这里, 就是看书呀,或者是跟 ai 来交流呀,想了解的更多一些,到底怎么去设计这个管球行,今天就分享这些,明天见。


学了很久的 c 加加总是感觉写不出像样的程序吗?这节带你制作一个控制台板的推箱子,可以点赞收藏反复观看哦。环境上建议大家使用 vs 二零二二或者 vs 二零二六,还在使用上古神器的我只负责点火,不负责灭火呦! 首先我们用一个二维数组来表示推箱子的地图,比如时行时列,但是这样子写是不保准的,所以说我们可以使用红定义。 接着地图上所有的元素我们也可以使用红定义,分别是空位、人箱子、目标点和墙。然后我们就可以粗尺画地图数据了,比如我们可以周边一圈都是墙,里面全是空位。刚刚还说包准,你全写数字就是包准了吗?哈哈 哈哈。哎,都是小问题。接下来我们就可以写一个函数专门用于刷新地图了。首先你需要清屏, 然后用两层负循环来访问地图中每一个元素值,然后针对不同的值打印不同的字母。空位打印两个空格,注意一定是两个空格。接着我们就可以在主函数中调用打印地图验证一下了, 这不是周边一圈都是墙呢?请问掌声在哪里?我说的是这个哈哈哈 哈哈哈哈哈。然后我们就可以在地图中添加人箱子和目标点了, 运行起来可以看到效果就有了。接着我们需要监听摁键,那么就需要添加这个头文件,然后我们就可以在主函数中用一个死循环来不断的监听摁键,这里的 key 就是 每次摁了一个键之后得到的 s k 码值。 那么我们就可以写一个函数,专门处理按键的操作,然后把刷新界面的函数放在死循环中,那么就形成了刷新界面接受按键按键操作的循环了, 只要地图数据改变,界面就会动起来了,然后我们就可以在按键操作函数中监听 w、 s、 a、 d 键代表上下左右的操作。那我们怎么样界面中的人动起来呢?那就需要先查找人在地图二维数组中的坐标, 两层循环就可以找到人的位置,并且记录下来。那么当人想往上移动时,就需要知道上面一个位置是什么,所以我们用一个时针变量指向上一个位置,接着判断如果人上面的位置是空位,就可以移动了。 接着我们运行起来,记得把输入法切换到英文输入,再摁一下 w 键,你就可以看到人动起来了,此处是不是应该再来一波掌声呢?嘿嘿嘿。 然后下左和右三个方向的操作是类似的,复制代码改一下就可以了。 接着我们再运行起来,人就可以上下左右自由的移动了,但还有个问题,还无法推动箱子, 我们以从下往上推为例,我们判断如果人上面的位置是箱子,就需要知道人上两个位置是什么,那么代码我们就可以这样子写, 那么在这里我们就可以连人带箱子一起往上移动了, 再次运行程序,就可以把箱子从下往上推动了,然后其他三个方向都是类似的操作,那么接下来就是抄作业时间了, 抄完作业我们就可以发现人就可以把箱子推来推去了,那么就剩下最后一步,把箱子推到目标点里面去了,我们可以发现人的上两个位置是空位,可以推动, 同样如果是目标点也是可以推动的,所以推动的代码是相同的。但不同的是,这里已经把箱子推到了目标点,我们就可以让这个函数返回一个布尔值 处,代表箱子推到了目标点。 boss 代表箱子没有推到目标点,那我们再回到这边给他返回处,在函数的尾部默认返回 boss, 然后我们在主函数中判断这个操作函数的返回值,如果推到了目标点,我们再刷新一下界面,如出,你赢了,再 break 一下。最后我们再运行起来。测试一下,可以发现箱子可以推到目标点了, 那剩下的三个方向逻辑是一样的,就交给你了呦。如果想系统学习 c 家的课程,可以去看我的橱窗哦!