导航:首页 > 源码编译 > 我的世界地形算法

我的世界地形算法

发布时间:2024-05-19 12:26:18

1. MC世界种子的原理是什么不都是随机的吗一串数字怎么能描述那么大的数据量

地图种子的原理是:地图生产是实时,随机,可重现的

在相同版本的minecraft里,相同的种子生成的地图是一样的
地图生产的细节:
种子:intseed = hashcode(xxxx);(这也是为什么中文也可以生产地图的原因)
动态生产地图的公式是。
map = fun_map(intseed) = fun_天空(intseed)+fun_地形(intseed) + fun_方块(intseed) + fun_建筑(intseed) +fun_生物(intseed) + fun_矿物(intseed)

举个栗子:
生成地图函数:f(c)
如果f是一个确定的函数,那么对于同样的c值,f(c)的值一定是确定的。
c就是那个种子,f(c)就是生成的地图。

地图生成使用的随机函数,当然是“伪随机函数”

什么是“伪随机函数”?计算机进行的是确定性运算,不存在真正的随机性,这意味着想要求计算机“独立”(依靠外部输入“例如磁盘存取、键盘鼠标操作等”来获得熵源的随机数发生器不在讨论范围之内。)生成真正的随机数,在理论上不可能。许多编程应用银橡中想要随机效果,使用的都是“伪随机函数”,就是用某种非常复杂的算法,来生成一系列看似毫无关联却又均匀分布的数字(例如 0.9024310185642406, 0.6399798616249142, 0.8728940712975358, ...),称为“伪随机数列”,以此来模拟随机的效果。每次程序调用这个伪随机此手函数的时候,就从这个数列中取出下一个数字返回给程序。这样做在孤立来看是没问题的,但是问题是如果你把程序关闭,重新启动运行,你得到的还是原来那个数列,每次取随机数取出来的还是跟上次一样的那些数字,例如仍然是“0.9024310185642406, 0.6399798616249142, 0.8728940712975358, ...”。如果你依赖这个数列来生成游戏内容,那么每次游戏所得到的的结果都会一样,这就失去了随机的意义。

为了解决这个问题,我们只能从“伪随机函数”外面给它加入某种“扰动”,让它在每次运行的时候结果不一样,产生不同的“伪随机数列”。“种子”就是最常见的一种扰动方式。相同的“种子”产生相同的数列,不同的种子产生不同的数列。如何保证每次运行的“种子”不相同呢?最简单的办法就是采用“系统时间”作为种子。相同的程序,上次运行和这次运行的时间肯定不一样,这就确保了每次的种子不同。当然,如果你人为去修改系统时间,并且让两次运行时的系统时间严格一致,那么还是会得到相同的运算结果。但是作为游戏来说,一般没必要考虑这些。

Minecraft 里面的地图种子就是这样的原理。地图本质上是“伪随机函数”生成的,跟别的游戏没什么区别,但是我们知道 Minecraft 是个比较 geeky 的游戏,它把种子的控制权交给你,允许你指定种子,那么当你森搏嫌使用相同的种子的时候,游戏中所有本该“随机”的元素都会变成“命中注定”。不仅生成的地形完全相同,连什么地方会刷出什么花草牛羊都一样。如果玩家的玩法操作也完全严格相同的话(这个不太可能),那么整个游戏完全就等于是在放电影,一切都是预定好的。

另外,在minecraft里,地形生成、建筑生成、矿物生成是分开的,如果安装了生成建筑或者矿物mod,并不会干扰特定种子的形成特定的地形。

2. 鎴戠殑涓栫晫-鍒朵綔镊铹跺湴褰㈡柟娉


銆婃垜镄勪笘鐣屻嬭繖娆炬父鎴忕洰鍓嶅寘钖浜嗗悇绉嶅悇镙风殑娓告垙鎶宸э纴鍏朵腑鍒朵綔镊铹跺湴褰㈠氨寰堥吨瑕侊纴濂界殑鍦板舰浼氲╂父鎴忓彉寰楁洿鐪熷疄锛屼竴璧风湅鐪嫔叿浣撶殑鏁堟灉钖!
濂芥瘆璇磋繖鏄骞冲畬鍦板悗榻愭暣镄勮竟缂桡纴涓镣逛篃涓嶈嚜铹躲
缁忚繃鎴戠殑鎶宸у勭悊钖庣殑𨱍呭喌鏄杩欐牱镄勶纴杩椤彧鏄绠鍗旷殑绀烘剰锛屾墍浠ユ晥鏋滃苟涓嶅敖锽勫敖缇庯纴鎴戣繖閲屽彧涓哄憡璇夊ぇ瀹惰繖镙蜂竴涓铡熷垯钥屽凡锛屽ぇ瀹朵緷娉旷偖鍒跺氨鑳藉仛鍑烘洿濂界殑鏁堟灉銆
鎺ヤ笅𨱒ユ垜璇磋村叿浣撶殑锅氭硶銆
澶у跺钩镞惰佹敞镒忚傚疗mc链韬鐢熸垚鍦板舰镞剁殑寮镟叉槸镐庢牱镄勶纴铹跺悗浣犲湀锣冨洿镄勬椂鍊欐墠鑳藉湀鍑哄悎鐞嗘祦鐣呯殑镟茬嚎銆
鍏跺疄杩欎釜鍜屽儚绱犵敾鐢绘洸绾挎槸涓锲炰簨= =
镓浠ュ彲浠ュ熺敤闾h竟镄勬硶鍒椤ぇ瀹舵病浜嫔彲浠ョ湅鐪嫔儚绱犵敾镄勭粯锲炬妧宸с
鎴戜滑璇翠釜渚嫔瓙銆
鎴戣瘯锲剧敤镟茬嚎阈炬帴涓や釜骞宠岀嚎锛岃繖镙风湅璧锋潵镶瀹氱壒鍒镄勪笉鍜岃皭瀵瑰惂锛
涓嫔浘杩椤氨濂藉氢简锛屼絾鏄绾㈡呜缮鏄镐镐镄勚
鏂规硶灏辨槸涓嶈佺洿鎺ヨ繛鐩寸嚎锛屾洸绾跨殑璇濈敤2镙3镙煎幓锅氱殑璇濅细濂戒竴镣广

3. 鎴戠殑涓栫晫涓涙滠鍦板舰镐庝箞镓撅纻

鍦ㄧ敓瀛樻ā寮忎笅锛屼綘闇瑕佸嗳澶囬熺墿銆佺伀鎶娿佹湪𨱒愩佹﹀櫒銆佸伐鍏枫佹姢鐢茬瓑锛屼互鍙婂伐浣滃彴鍜屽簥杩欎簺鎺㈤橹蹇呭囩墿鍝併
璁颁笅瀹剁殑鍧愭爣xyz锛堟寜F3寮瑰嚭璇︾粏鏁版嵁锛夛纴浠ュ厤杩疯矾镓句笉鍒板剁殑鏂瑰悜銆
链濈殑鏂瑰悜鏄疦锛屼篃灏辨槸north鍖楋纴涓鐩磋蛋銆
杩愭皵濂界殑璇濊蛋涓嶈繙灏辫兘镓惧埌涓涙滠锛屾垒涓嶅埌涓嶈佹斁寮冿纴鍙浠ラ傚綋鎹涓鏂瑰悜鎴栬呬竴鐩村墠杩涳纴閮借兘镓惧埌涓涙滠銆

銆婃垜镄勪笘鐣屻嬫槸涓娆3D绗涓浜虹О娌欑洅娓告垙銆傜帺瀹跺彲浠ュ湪涓夌淮绌洪棿涓镊鐢卞湴鍒涢犲拰镰村潖涓嶅悓绉岖被镄勬柟鍧楋纴鐢ㄦ兂璞″姏寤虹珛骞舵帰绱涓涓涓揿睘浜庣帺瀹剁殑涓栫晫銆傛父鎴忕敾椋庣嫭鐗癸纴涓绘墦绉链ㄩ┈璧涘厠椋庛傛父鎴忛噷鐜╁跺彲浠ュ湪鍗曚汉鎴栧氢汉妯″纺涓阃氲繃鎽ф瘉鎴栧垱阃犳柟鍧椾互鍒涢犵簿濡欑粷浼︾殑寤虹瓒鐗╁拰镩烘湳锛屾垨钥呴氲繃鏀堕泦鐗╁搧鎺㈢储鍦板浘𨱒ュ畬鎴愭父鎴忕殑涓荤嚎浠诲姟锛岄氲繃镊宸卞垱阃犵殑浣滃搧𨱒ヤ綋楠屼笂甯濊埇镄勬劅瑙夈

阅读全文

与我的世界地形算法相关的资料

热点内容
oppor系列如何解除应用加密 浏览:599
程序员那么可爱姜逸城初恋 浏览:496
modbustcp编程 浏览:491
实况为什么安卓看不了 浏览:129
Java多线程Queue 浏览:95
云服务器499元三年 浏览:980
nbd源码 浏览:847
x86在arm上编译 浏览:8
linux怎么配置网络 浏览:307
程序员想要的小礼物 浏览:187
java获取网页url 浏览:625
怎么做解压神器泡泡版 浏览:967
自己动手做一个c编译器 浏览:930
手机如何链接谷歌服务器地址 浏览:137
废掉一个程序员的武功 浏览:249
java树形算法 浏览:642
通达信加锁指标源码怎么看 浏览:755
将同名文件移动到部分同名文件夹 浏览:404
摆荡指标加压力线源码 浏览:916
新一代单片机特征 浏览:770