
词语与文字
KillJUMP
这个作者很懒,什么都没留下…
展开
-
随便画画的
随便画画原创 2022-06-24 01:53:42 · 136 阅读 · 0 评论 -
光照相关 shader
物体的漫反射=环境色+kd*灯光强*max(0,dot(n,l))环境色=用一个常数来表示kd=物体对光的反射系数n,l分别是单位向量,n需要用UnityObjectToWorldNormal处理,最后normalize,l如果是平行灯无位置概念,可以直接用_WorldSpaceLightPos0来获取。高光反射=高光的颜色*ks*pow((max(0,dot(R,V)),gloss)ks反射系数R反射单位向量,是L根据N对称过去的量,=2*dot(N,L)*N-L或者=reflect(-L,N)V顶点到观原创 2022-06-19 16:38:18 · 577 阅读 · 0 评论 -
通用泛型 列表 实现map max min
通用泛型 列表 实现map max min原创 2022-06-06 22:36:49 · 260 阅读 · 0 评论 -
用户控制 键盘鼠标自定义 脚本
设计模式,不同的输入的自定义,接口原创 2022-06-06 21:35:54 · 1729 阅读 · 0 评论 -
【莫尔条纹】自定义条纹宽度 代码 python numpy matplotlib
莫尔条纹的实现原创 2022-05-16 22:10:40 · 1568 阅读 · 0 评论 -
奇异推格子算法2
LinePush(box,box,box……)1. 检查box是否隶属于什么组groupA、groupB……。2. 如果属于组,则返回outcomeGroupPush()。3. 如果不属于组,则返回outcome BoxPush()。4. 2和3为递归,如果返回outcome都为true,则提取outcome后面的内容进行现实效果推移。outcomes记录为多条outcome链,每个链的形式如下,只有全部的链都返回true时,才开始往后执行。根据最近的记录开始处理现实效果。记录.原创 2021-10-06 10:12:48 · 162 阅读 · 0 评论 -
奇异推格子算法
这个奇异推格子和普通的推格子游戏的区别在于2点:1. 有些格子是连在一起的家具块。这些家具块如果连在一起(没有裂缝),则被推一个会整个被推。2. 格子有可能破裂。如果它的形变承受力较弱的话。这很好理解,就是指我们推一个塑料到一个墙上,塑料有可能就扁了。事先声明:想过很多自然界的模型,但与推格子的抽象程序不符合。1,2两点是模拟了我们推箱子中的两个自然情况:一是黏着的东西整体被推。二是东西也有可能被推碎了。只需要实现这两种情况即可,其他元素仍然是非常抽象的推箱子。算法示意原创 2021-09-25 21:54:57 · 697 阅读 · 0 评论 -
occurs-free
(define occurs-free?(lambda (var exp)(cond((symbol? exp) (eqv? var exp))((eqv? (car exp) ’lambda)(and(not (eqv? var (car (cadr exp))))(occurs-free? var (caddr exp))))(else(or(occurs-free? var (car exp))(occurs-free? var (cadr exp)))))))检测一个符号v原创 2021-05-26 16:07:31 · 134 阅读 · 0 评论 -
Monad和CPS之间有什么关系?《The Mother of all Monads》翻译
摘自知乎,亞首的回复原文地址:http://blog.sigfpe.com/2008/12/mother-of-all-monads.html很好的文章,分享一下,可以去以上地址阅读。**原创 2021-02-01 12:19:56 · 212 阅读 · 0 评论 -
continuation-passing style cps学习
cps-of-exps接受两个参数:一个【表达式的list】和一个【procedure builder】。它在第一个参数中找到第一个不是【最简化单元】的表达式,如果找到了,就创建一个continuation K,这个K命名这个表达式的结果为一个新的变量,比如v1,然后递归调用被修改过(就是把那个【不是最简化单元】的表达式文字替换为v1)的【表达式的list】。如果没有找到,则我们就把第二个参数【procedure builder】apply到【表达式的list】中去。但遗憾的是,哪怕已经没有【非最简单原创 2021-01-18 23:41:42 · 177 阅读 · 0 评论 -
《EOPL》学习之解释器的不同写法对比。尾递归和cont的原理。
interp注意,不带cont的a的轻如果是val是常数constex.不带cont的情况,也不带状态state,即无法赋值,传入形式是*(lambda (exp env)*(const-exp (num) (num-val num))a. 不带cont的情况,传入形式是*(lambda (exp env)*(const-exp (num) (num-val num))b. 带cont的情况,传入形式是*(lambda (exp env cont)*(const-exp (num) (a原创 2021-01-06 01:12:54 · 702 阅读 · 0 评论 -
纸片游戏 clojure写法
纸片玩法数据结构数据每一格的信息:[ 0 1 {:player 0 :paper:0 movebox:0} ]位置获胜信息:[本关的胜利位置 呆了几次],比如[6 1 0]表示6 1呆了0次,3次获胜Papergame {:levelmap [每一格的信息] ;游戏地图:currentmap ;当前关:winpoint; [获胜位置信息] :actionpoint ;行动点数:turn ;已进行回合数。默认为1:mapsize [[5 5]] ;每轮地图大小逻辑;生成游戏函数原创 2020-12-24 19:37:16 · 171 阅读 · 1 评论 -
Clojure学习笔记
来源:B站weimillhttps://www.bilibili.com/video/BV165411579Z?from=search&seid=17229269713159468355原创 2020-12-24 15:21:51 · 114 阅读 · 0 评论 -
关于sicp stream流的相关思考
SICP-STREAM关于流所具有的性质以及它和惰性求值的关系。文章目录SICP-STREAM什么可以代替惰性求值什么可以代替惰性求值惰性求值提到了delay 和force,它们的实现方法也比较简单,无非就是把函数求值的那个瞬间,用lambda表达式标记了,然后让force来触发即可。它的引申意义是非常有趣的。它是在数据本身要做的事情功能之上,又提升了一层,这个提升的意义概括了所有的数据。这个提示的维度实在是有点有趣。我努力说清楚。比如SICP中文书上p62的那个(define (原创 2020-12-20 19:25:51 · 275 阅读 · 0 评论 -
CPS是否是将语句代码的必然
题目中的“语句代码”,我的意思是:将代码作为自然语言一样去解释的能力。当然,这个表述又有些太广泛了。我宁可定义为,按照序列不断解读一段序列文字符号,并在任何一个位置停下都具有意义效力的这样的一种程序。比如:我写一个叫做吃 饭或者妈妈 吃饭打 三碗 米饭就这样的文字,它是一段程序,哪怕它是打 三碗,还没有读入米饭,它仍然有它的效力。这件事是非常重要的。同时,先 打 三碗 米饭 后 妈妈 吃饭这样的句子在任何地方分开,也必须是有意义的。我之前以为一一种局部的灵活就可以做到这件事:比如我原创 2020-12-19 13:54:09 · 108 阅读 · 1 评论 -
函数式编程学习-SICP-LISP-流STREAM的实现-流编程思路和惰性/延时求值2
如何与时间解耦流式程序看待流的方法:即一下子处理了整个流。准备例子:第一个例子:将两个流相加。第二个例子:运用到流上的所有项目一个由1组成的无尽列表如何定义整数:定义斐波那契数列何做到不要显式定义很多delay?让整个底层都延时。让delay自动内建在语言之中。这种语言叫做“正则序求值”(normal order)语言。而我们一直用的语言叫做application-order语言。即先求参数,再求值。而前者把整个参数放到函数中。如果这样做了,cons也会自动变成cons-原创 2020-10-19 23:31:15 · 408 阅读 · 2 评论 -
函数式编程学习-SICP-LISP-流STREAM的实现-流编程思路和惰性/延时求值
原教学视频如何实现流:在流的这一课,重新构造了CONS比如(CONS-STREAM X Y)(HEAD S)(TAIL S)THE-EMPTY-STREAM对于任意的x和y,有HEAD (CONS-STREAM X Y) =XTAIL (CONS-STREAM X Y) =Y以上可以是表的另外一种说法。有了以上内容,我们可以定义很多函数:可以说,流是你设计的用来满足你约定的接口的一个工具。回溯搜索问题上,我们的方法会获得全部的解。但实际情况中,我们不需要获得那么原创 2020-10-18 22:10:21 · 329 阅读 · 0 评论 -
提出一个问题:《纪念碑谷》
看了onelei的https://blog.youkuaiyun.com/onelei1994/article/details/100544457文章,下载了可以跑的小原型总结一下实现纪念碑谷中的(最基础问题)魔法的关键所在:1. 正交相机:没有正交的相机的话,是这样的:在Isometirc Game这篇文章里,发现这种特殊角度的奇妙之处:https://blog.youkuaiyun.com/turingbooks/article/details/7102299?utm_medium=distribute.pc_r原创 2020-10-14 02:14:21 · 245 阅读 · 0 评论 -
为什么说计算机其实是逻辑机器?《逻辑的引擎》阅读笔迹
《逻辑的引擎》阅读笔迹p27在英国,当布尔开始自己的工作时,人们以及渐渐认识到代数的力量来自于这样一个事实,即代表着量和运算的符号服从不多的几条基本规则或定律。这就暗示着,同样的力量也可适用于形形色色的对象和运算,只要它们也服从着其中某些同样的定律。yy=y.布尔对这个的理解简直神了。x(1-x)=0意思时:没有任何东可以既属于又不属于一个给定的类xp40也许可以认为数学极为系统地概况了极为复杂的逻辑推理,所以想要对一种以完备性味目标的逻辑理论进行最终的检验,就要看它是否包含了一切数学原创 2020-10-11 22:17:05 · 405 阅读 · 0 评论 -
函数式编程学习-SICP-LISP-求值器
摸索实现CURRY化的思想的学习过程还是重新看了https://www.bilibili.com/video/BV1Xx41117tr?p=13。这一套视频从2年前发现到现在,已经看了2遍了。里面不懂的课程也会一直重复看,这次倒是看懂了。觉得神奇。看到LISP中的call/cc,觉得似乎和柯里化有所关联,但是它的描述却多是一些结构控制的用法,包括知乎上的大神说的 scheme的艺术的第16章,看了一下,也是以这个目的为出发点的……就像第一次遇到monad一样,遇到call/cc真的是感觉又要开原创 2020-09-17 23:49:35 · 656 阅读 · 0 评论 -
ML函数式编程程序设计笔记-第五章 函数和无穷数据
这一章里这样说道:如果一个函数是作用在其他函数上的画,那么它就是高阶的。(或称为 算子,functional),例如算子map将一个函数应用到表中的每个元素上,由此建立一个新表。算子可以用来构造语法分析器!(第9章)无穷表,它的元素在需要的时候才会进行求值,也可以用过把函数作为数据来实现。一个惰性表的表尾是一个函数,当这个函数被调用时会产生另一个惰性表。惰性表可以是无限长的,而它的任何有限数目的元素都是可以求值的。惰性求值!!先说说无穷表。无穷表在传统上称为”流“stream,在这本书里称为序列原创 2020-09-14 22:03:03 · 268 阅读 · 0 评论 -
语法分析器-LR(1)-FOLLOW集、NULLABLE集、FIRST集、以及分析表的python实现
看了B站卡布同学的【编译原理复习笔记】程序如何识别数学表达式(文法分析,LL1,LR0,SLR分析法)https://www.bilibili.com/video/BV1tJ411k7h7?from=search&seid=12553938159732964604实在是太棒了。于是用python按照他的原理实现了一个LR语法分析器,可以自动生成分析表。除了多出了一个的状态,其他都是对的。(多出的状态是由于卡布没有把S’=>S$这个也放进去处理)我的acc这个应该是在7状态的终结符原创 2020-09-08 22:51:28 · 1686 阅读 · 3 评论 -
一个通用游戏引擎的设想:把语言刻入世界,还是把世界刻入语言?
花了一点时间完成了语法分析器。现在它应该可以实现自定义的语法。我一直都在想,如果要做这方面的一个设计模式,应该怎么处理我的游戏架构的接口呢?现在我觉得有趣的是现在觉得有趣的是,语法树处理一个战斗,结果在语法中是得到一个新的东西,还是返回一个已经改变的旧的?这件事一直在困扰我。新的和旧的有很多的含义,首先它们是区分,何时触发你想要触发的那个功能?其次可以这样想,它们只是将这个过程包裹起来而已,比如用一个action来包裹(a和b),然后把这个action返回出去。这个action是哪个类别?无所原创 2020-09-08 22:26:32 · 169 阅读 · 0 评论 -
最简单的词法分析器中的扫描部分 SCAN
//读入一个字符,存在peek中void readch() throw IOException {peek =(char)Systen.in.read()}//检查下一个字符是否是c。boolean readch(char c) throw IOException{readch();//读入一个输入if(peek!=c)return false;peek='';return true;//如果是C,把peek制空。}public Token scan() throw IOExcep原创 2020-08-30 23:29:42 · 401 阅读 · 0 评论 -
《游戏编程模式》阅读笔记 02 更新方法模式和子类沙盒模式
更新方法模式涉及到我们平日设计模式时用的最多的一种东西,类似unity3d里面的update函数,在超级玛丽里,它可以模拟小乌龟小蘑菇在出现后的行为。哪怕是像象棋一样的游戏,我们不用随时更新它的行为(因为是由玩家触发的),但我们也需要更新它的动画。所以非常常见。这里的默认设定是由一个数组储存着这些需要update的对象。问题在于:为了让多个对象同时独立的运转,我们也许也要使用多线程。(需要参考11章 字节码模式)独立过程中的顺序问题,一个已经在A更新中死去的动物,不应该去读它的更新。这怎么办?标记原创 2020-06-24 12:34:27 · 153 阅读 · 0 评论 -
《游戏编程模式》阅读笔记 01 命令模式的扩展-子类沙盒模式
说到命令模式,本书中记录了它如何实现倒退,以及实现用流的方式将命令用在任何怪物,以及任何AI触发的情景上。在2.5参考中,作者提到了子类沙盒这个概念。听上去非常有趣。忍不住预先看看第12章。第12章看完了,这个子类沙盒似乎是一种思考方式(做游戏的平日里会经常思考的那种,书中说它很像是外观模式),里面最后有几个点很有帮助,问题:当基类的内容很多,难以调试时怎么办?回答:新建一个总结了某一块内容的类,比如音乐类,让基类去获得。这样可以在音乐类中维护一些音乐接口。问题:要外部调用时,每一个子类都需要初原创 2020-06-24 11:06:06 · 188 阅读 · 0 评论 -
框架挑战*1 继承树改装饰模式(Decorator)
装饰模式:动态地给一个对象添加一些额外的职责,就扩展功能而言,该模式比生成子类方式更为灵活。如果我按照继承树的方式来处理,那我生成一个实体【石榴树】,类与类之间的结构会帮我把所有内容处理好。但我如果要更改其中一个步骤,比如创造一种石榴树,保留其他特性,但不能存在!(好吧,非常抽象,大概理解为,这个石榴树是非存在物,是一种灵体),那我就要重新做一个这样的区别。如果我用装饰器的方法,我可以一层一层去包裹这个石榴树,最后建成它。比如【石榴树!【树【植物【生物【物体【存在】】】】】】这两个之间有什么区别原创 2020-06-23 14:53:20 · 1383 阅读 · 0 评论 -
框架挑战*1 模板方法模式(Template Method)的!非常好用!
模板方法模式,可变性在于算法中的某些步骤。力量在于确定多样的顺序。它的解释如下:定义一个操作中算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重新定义该算法。这说实话,哪里都能用。子类中的写好的具体方法终究会以一些固定的顺序被调用(而父类规定了这个顺序)。我想到一个地方可以用——框架挑战*序中的7。试试看可不可以。首先是最基础的继承链条。【存在】-【物体】-【生物】-【植物】-【树】-石榴树其他链条有 -【花】-玫瑰【存在】-【物品】-【果实】-苹果它们分原创 2020-06-23 12:36:29 · 222 阅读 · 0 评论 -
框架挑战*序
为了设计一个比较妥善的框架来支持我底层的一个游戏公式。我想借用一下设计模式的威力。现在来分析一下我的需求:基本实现:玩家&砍&石榴树 =(-1精力的)玩家&砍&(木块+木块+木块)初步构架:【砍】继承一个【动作】类。砍的结果与砍的对象的类、实例数值有关【策略模式】,且有随机性。【模板方法模式】【砍】支持多种参数,如(玩家、石榴树、翻倍石)或(玩家、石榴树),使用多态完成。动作的多样性支持【装饰模式】,方便对简单的行为进行扩展。比如高级【砍原创 2020-06-23 10:19:20 · 136 阅读 · 0 评论