游戏背后是数学,看这20行代码有什么

还好没有受伤,我的飞船失去动力,加速坠落,让我大脑一片空白。这是哪里?烧掉数学书。我没有意见,看这些植物的长相,难道我到了潘多拉?现在我百分百确定这本书正在像人参果一样钻到土里。

来看一下这本书,它为什么会像人参果一样钻到土里去?因为它被一行很简单的代码控制,这行代码大概是20行。在看这一段20行代码的时候就发现其实整个一篇可以说是一篇代数。

比如第一行定义叫degram per second,就是每秒旋转的度数的时候,它事实上就跟x等于2是一样,只不过它用了一个更实在的名字,变换的角度,每秒变换的角度等于2,整篇就是一个代数。

然后还用到了随机数,随机数是red range,因为想让图书进入土壤的速度,每一次打开这个游戏都不一样,如果每一次都一样,大家就很容易产生厌烦,每次看到都一样,这跟看电影有什么区别?所以它有一个随机数,会给旋转的速度,进入土壤的速度增加了一个5到-5的偏差值,有时候会快一点,有时候会慢一点。

随机数在数学里面有一门专门的学科去学,它就是概率。再来看括号里面括住的这三个数,它是一个项量,项量在游戏中无处不在,特别在游戏编程的过程里面,项量研究向量,研究矩阵。在数学里面也专门有一个学科叫做线性代数,就是专门研究向量和矩阵。

所以看到这短短的20行代码里面就涉及到了数学领域里面的代数,随机数,概率还有矩阵,也就是线性代数,所以游戏的背后就是数学。

这个游戏用到了Unity引擎,手机上看到的很多小游戏都是用Unity引擎编写的,这是一个很老套的冒险游戏,它与众不同,就是旁边有本书叫做烧掉数学,这本书正在以一个极慢的速度,像人参果一样,它陷入到土壤里面去,意识到了,这个是一个和数学相关的游戏,也许以后会出现各种各样的和数学相关的内容。比如打了一个小怪会掉树,掉下来一种解题工具或者什么东西,暂时还没想好。

神操作!一行Python代码搞定一款游戏?给力

来源:pypl编程榜

一直以来Python长期霸占编程语言排行榜前三位,其简洁,功能强大的特性使越来越多的小伙伴开始学习Python 。甚至K12的同学都开始学习Python 编程。新手入门的时候趣味性其实最重要的。那么一行Python 代码到底能玩出什么花样,有什么趣味的游戏用一行代码就能搞定了,快来跟着小编一起大开眼界。

一行代码能干啥?这一款的迷宫游戏厉害了

迷宫游戏,不知道大家有没有玩过,以前非常风靡,各种大小的迷宫设计,尤其是Web版的迷宫早些年的时候非常流行,但是Python一行代码就能搞定,真的是酷毙了!

来看一下效果:

(盯住看5秒)

代码非常非常的简洁,用短单线创建无限迷宫,虽然跟真正的迷宫比还差一些,但是也算是有点感觉了。算法其实很好理解,用一个while来无限循环,整个程序设计的亮点就在虽然 import 语句在循环内移动,但是Python 并不需要每次重新导入它。代码从迷宫绘图字符之一中选取一个随机字符并进行刷屏打印。

所以Python的火不无道理,不仅简单易学,节约工作效率,重点程序员就业状况也非常可观,下面用一张图来一窥究竟:

此时此刻

Python的内心:

Python爆红的原因是?

在GitHub 2018年度报告中,Python超越Java成第一受欢迎语言。所有这些“刷榜”,都离不开最近人工智能尤其是机器学习的火热。Python被誉为最好人工智能的语言,因为:

  • 在数据科学和AI中占据主导地位;

  • 拥有优质的文档和丰富的库,对于科学用途的广泛编程任务都很有用;

  • 设计非常好,快速,坚固,可移植,可扩展;

  • 开源,而且拥有一个健康、活跃、支持度高的社区。

  • 有一些很棒的公司赞助商,YouTube、谷歌、Yahoo!NASA都在内部大量地使用Python,尤其是谷歌;Facebook开源PyTorch后也更有利于Python的推广

现在,Python 的这把火已经烧到了程序员的圈子外。所以,你想学了Python了?准备好如何学习 了吗?这里推荐大家来了解一下CSDN开设的《Python闯关特训营》,这是一个能够带你玩转Python全栈的学习路径~

划重点:送你Python试学课,这些内容足够你自测难易度,同时能与Python老师实时沟通,他将解答你疑问!

领取Python试学课+课程咨询CSDN学院推出「Python闯关特训营」,就是为了让更多转型的学习者可以学习到Python的全栈内容,从容应对职场考验,在工作中实际应用。本套课程Python+人工智能分为六大模块,分别是Python基础、Python全栈、Python爬虫、数据分析、机器学习与机器学习项目实战模块。

采用录播课与直播课结合的方式,并配合助教答 疑、进度追踪、作业辅导等服务,激发学员的学习热情,并为学员的学习进度保驾护航。 以市场就业为导向,通过企业真实项目驱动,无缝对接就业出口,帮助学员在短时间学习有价值 的知识、快速提升技能。

CSDN实训营更注重培养扎实的基础理论和项目实战,学成之时,更有知名企业推荐就业机会。

领取Python试学课+课程咨询

为什么选择CSDN学院?

相比于其他学习班,CSDN学院有着自己的服务体系和课程质量管理,因为学习任何一种编程语言,都需要专业的导师、科学的课程、实战演练项目和学习辅导,这不仅能节省大量时间,还能保证不会半途而废:

开源项目:2048程序!C语言编程练手小游戏,400行源码分享

《2048》是最近比较流行的一款数字游戏。原版2048首先在github上发布,原作者是Gabriele Cirulli。它是基于《1024》和《小3传奇》(Threes!)的玩法开发而成的新型数字游戏。

游戏的规则很简单,你需要控制所有方块向同一个方向运动,两个相同数字的方块撞在一起之后合并成为他们的和,每次操作之后会在空白的方格处随机生成一个2或者4(生成2的概率要大一些),最终得到一个“2048”的方块就算胜利了。

1、方块移动和合并算法

主要思想:把游戏数字面板抽象成4行4列的二维数组a[4][4],值为0的位置表示空方块,其他位置表示对应数字方块。把每一行同等对待,只研究一行的移动合并算法,然后可以通过遍历行来实现所有行的移动合并算法。在一行中,用b[4]表示一行的一位数组,使用两个下标变量来遍历列项,这里使用j和k,其中j总在k的后面,用来寻找k项后面第一个不为0的数字,而k项用于表示当前待比较的项,总是和j项之间隔着若干个数字0,或者干脆紧挨着。不失一般性,考虑往左滑动时,初始情况下j等于1,而k等于0,接着判断j项数字是否大于0,若是,则判断j项和k项数字的关系,分成3种情况处理,分别是P1: ,P2: b[k]==0和P3: b[k]!=0且b[k]!=b[j];若否,则j自加1,然后继续寻找k项后面第一个不为0的数字。其中P1,P2和P3分别对应如下:

P1:b[k]==b[j],则b[k] = 2 * b[k](说明两数合并了),且b[j] = 0(合并之后要将残留的j项值清零),接着k自加1,然后进行下一次循环。

P2:b[k]==0,则表示b[j]之前全是空格子,此时直接移动b[j]到k的位置,也就是b[k] = b[j],然后b[j] = 0(移动后将残留的j项值清零),接着k值不变,然后进行下一次循环。

P3:b[k]!=0且b[k]!=b[j],则表示两数不相等且都不为0,此时将两数靠在一起,也就是b[k+1] = b[j]。接着分两种小情况,如j!=k+1,则b[j] = 0(移动后将残留的j项值清零);若否,则表示两数原先就靠在一起,则不进行特殊处理(相当于未移动)。接着k字加1,然后进行下一次循环。

2、判断游戏是否结束算法

核心思想:遍历二维数组,看是否存在横向和纵向两个相邻的元素相等,若存在,则游戏结束,若不存在,则游戏结束。

3、生成随机数算法

核心思想:根据生成的随机数,对一定的值进行取模,达到生成一定概率的数。在本游戏中,设定出现2的概率是4的两倍,于是可以利用系统提供的随机数函数生成一个数,然后对3区域,得到的数若小于2则在游戏面板空格处生成一个2,若余数等于2,则生成4。在选择将在哪一个空格出生成数的时候,也是根据系统提供的随机函数生成一个数,然后对空格数取余,然后在第余数个空格出生成数字。

4、绘制界面的算法

核心思想:利用系统提供的控制台界面清屏功能,达到刷新界面的效果,利用控制制表符位置,达到绘制游戏数字面板的效果。

由于绘制界面不算是本游戏的本质,且代码段相对较长,所以算法描述在这里省略,读者可以参考完整源代码。

效果示例:

希望大家能够很好地利用所学知识完成本项目!

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

编程学习视频分享:

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。