中国推出新型三体船 有没有可能推出一款三体的游戏?

Time Line:
0920早:发布原答案
0920晚:第一次更新
0923早:第二次更新(更新完毕)&写在后面的话


1004晚:补充来源
by Abhishek Padmasale

获得优势最简单的方式可能是——把两个看似不相关的技能结合起来。

中国推出新型三体船 有没有可能推出一款三体的游戏?

比如说:做世上最好的计算机工程师非常难,做世界上最了解海豚的人也非常难。但做一个既知道电脑知识,又对海豚有所了解的人还是可以达到的。


你可以试着写一个软件纪录海豚的迁徙轨迹,或者从海豚和同类交流的方式收到启发,开发出一种新的软件。

===========以下是原答案===========
去年做的,请无视一大片的Text1文本框(调试用的)以及丑陋不堪的代码。去年做的,请无视一大片的Text1文本框(调试用的)以及丑陋不堪的代码。
简单的说,它的功能是:
1. 三颗恒星模拟最简单的三体运动(绕同一圆周运动);(update:说错了,应当是绕8字形运动)
2. 行星的位置和速度随机生成,根据与三颗恒星的距离计算温度;
3. 玩家的任务是,在被烫死或冻死之前,发展物理学和生物学;研发需要一定的时间,期间可以选择脱水,脱水则研究停止,下次需重新开始。
4. 物理学和生物学都分为10个阶段,物理学发展到最高阶段则制造出光速飞船逃离三体星系,生物学每发展一个阶段可以提高一定的抗冷/热能力。
5. 若发展到一定阶段之后被烫死或冻死,一定几率发展的科技保留一部分,重新开始文明。


马上考G,今晚更。
================================
0920晚更新
所有文件已打包上传: 工程需要用VB打开,或者只看“代码.txt”也够了,反正界面揍是这么丑……

来详细说明一下整个游戏:
PART 1:界面
游戏名称:三体Offline(和小说第一部中的三体Online相对……)
第X号文明:游戏重新开始的次数(参见第一部)
XX时间微粒:时间微粒是三体人计时的单位(参见第一部)
XX三体度:三体度是我杜撰的,就是一个温度的单位,具体内容见下面关于温度的计算部分。
状态:一般情况下就是“无所事事中”,脱水就是脱水中,发展相应的学科就提示XX学发展中。
物理学发展/生物学发展:按一下开始发展,再按一下中断(需重头开始),目前的版本右边的文本框显示的就是数字,但本来计划的是给每一个阶段取个名字,比如物理学可以是(亚里士多德力学-牛顿力学-相对论-量子力学-……-光速飞船)。
开始:开始游戏,如果已经挂了的话就随机生成行星的位置和速度;
暂停:暂停游戏,此时不能进行操作,但是你可以考虑一下下一步要做什么。
脱水:脱水会强行中断物理学和生物学发展。
LOGO:消灭人类暴政,世界属于三体!(PS我是拯救派)

下面的文本框是我用来调试的(VB的Watch能用?),之所以是3*4,是因为我本来做的是三个恒星和一个行星在三维空间中的运动,后来发现好难啊……就改成了二维,所以现在是这样的:12和13、22和23、32和33分别是三颗恒星的xy坐标,14和24是行星的xy坐标。
还有一个时间控件,每1毫秒运行一次(实际上大概接近100ms运行一次吧……毕竟运算量还是很大的……)这个就是控制恒星和行星运动的。

PART 2 关于恒星和行星的运动
正如上面所说的,我一开始用的是三维空间中,三个恒星和一个行星在一定范围内随机位置、随机速度开始运动,然后么……反正大概就是各种duang、duang、duang就对了……
实际上,我对大刘在《三体》中的这段描述颇有微辞,这是魏成所说的话:
“……三球宇宙一下子变得复杂起来,三个被赋予了初始运动的球体在太空中进行着复杂的、似乎永不重复的运动,描述方程如暴雨般涌现,无休无止。我就这样进入梦乡,三球在梦中一直舞蹈着,无规律的永不重复的舞蹈。”这句话有一定的误导性,实际上,如果魏成是在三个位置随即放了球体并随即赋予了初始运动的话,最有可能发生的绝对不是进行永不重复的三体运动,而是很快就有两个球体发生碰撞。
我经常要说,大刘所描述的是一个限制性四体问题,三体人站在行星上进行观察,必须考虑到自己的行星也在运动(虽然本质上说,限制性四体问题中不考虑引力的这颗行星不影响另外三体的解,但是如果你意识到三体人一开始应当也和托勒密时代的地球人一样是以自己为坐标系的话……)
(顺带一提,我觉得文中提到的三星连珠使行星受到过大引力而灭亡也不太可能,要注意这三颗星在连珠之前不在一直线上,连珠之后也不在一直线上,何况行星本身也是有法向速度的,被甩出去的可能性更大一点)
离题了,总之,突然有一天我就意识到,我的问题出在,其实不需要随机,即使是一个确定的重复的三体运动,站在行星上我们也不一定能够依据已有的信息推断它的运动规律(更何况我只给了你们温度参数,而且你要推断的是行星与三颗恒星的距离关系,而不单单是三颗恒星怎么动)。所以我就直接去这里: 找了这个稳定的周期解,因为它是平面的,所以我就转到了二维平面上来。
这个8字形的稳定解的相关信息:
INITIAL POSITIONS: (-1,0), (1,0), (0,0)
INITIAL VELOCITIES: (p1,p2), (p1,p2), (-2p1,-2p2)
p1: 0.347111
p2: 0.532728大家在代码里可以看到我直接把这部分放在Form_Load里了,所以恒星的运动每次打开的时候都是确定的哦~
然并卵,因为行星是随机的,行星的随机范围是
xp = Rnd() * 2 - 1
yp = Rnd() * 2 - 1
vxp = Rnd() * 2 - 1
vyp = Rnd() * 2 - 1反正都标准化了。

但是有了初始值还没完,关键是要给出它是怎么动的,那么作为一个被物理竞赛血虐过的学生,我反正觉得自己是求不出参数方程的(貌似是18个方程的常微分方程组……?每个恒星的位置分量导数是速度分量,速度分量导数是加速度分量,加速度由相互位置给出,3*2*3=18)所以就采用了笨办法,那就是模拟!
大家可以看到上图中有一个时间增量dt=1/st/1000,而st我设置的是10000,也就是每隔1/10000000时间单位计算一次加速度,在dt很小时积分可以用内接梯形近似,得到速度,然后速度积分得到位置就直接用矩形近似了(诶我刚回过去读代码才发现,想不起来我为什么速度没有用内接梯形近似了……)
这个计算还是达到了预期的目的,我试过跑了很久恒星运动都是相对稳定的。
然而行星就问题大了,时间增量很小的时候,相当于运动的很慢,如果我们把运动速度稍微加快一点,行星要么就duang的一下撞进恒星,就算没有撞进(一方面是因为恒星目前还是质点没有体积,另一方面是因为当行星和恒星非常接近时,近似算法非常成问题),也会立即被甩出去,然后就看着温度一个劲儿地往下掉,然后就冻死了……
目前我也没什么解决办法,因为我不想解常微分方程组……

=============================
0923更新
PART 3 如何确定温度
温度的确定面临的一个问题是,行星不是完全笼罩在恒星光芒下的,针对每颗恒星,它都只有一半在接收这颗恒星的照射(不考虑大气层的偏折),而恒星相对的位置又不一样,可能行星的某一部分能够接收到三颗恒星的照射,有些地方则完全不被照射到。
所以我决定再次偷懒一下,单纯从热平衡的角度出发进行计算,参考的是这里(再次表示高中物理没学好) :
太陽表面溫度約 5800K,假設其為理想黑體則單位面積輻射能 = σTs4
太陽表面總 輻射能 為 σTs4 (4πRs2) ,其中 Rs 為太陽半徑
太陽輻射能向四面八方輻射出去,當抵達地表時 單位面積的輻射能變為
σTs4 (4πRs2)/(4πd2) ,其中 d 為 地球與太陽間 平均距離。
地球表面只有半面面向太陽 ,若地表溫度為 Te,平衡時
地球所吸收總能量 = 地球所輻射總能量
σTs4 (4πRs2)/(4πd2)*πRe2 = σTe4 (4πRe2 )
因此 Te4 = Ts4 ( Rs2/ d2)/4 , 2Rs/ d 為地球上所見太陽的視角。
將數值帶入 可得 Te = 278 K。实际上,我并不需要真的计算这个温度,关键之处其实是一个相对的关系,从最后这个式子我们得知,给定恒星的温度、大小,行星的温度和行星与恒星的距离的平方成反比,而三颗恒星意味着地球吸收的总能量是三者相加,所以代码中出现了三次这个东西:
invd = invd + 1 / dsp / dsp
最后这个invd就是温度的相对量度,姑且称为原三体度。
但是,界面上面显示的温度不是三体度吗?的确如此,实际上原三体度的起伏实在是太过剧烈了,尤其是因为在模拟恒星和行星运动的部分做了标准化,也就是把一切常数都设成1,很多参数能记为1也记为1(比如恒星的质量是1,注意用万有引力公式求出引力再计算行星的加速度时行星的质量会被除掉,所以行星的质量和计算无关),最后大部分情况下行星和恒星都在[-1..1,-1..1]这个范围内移动,这时候距离相差0.1,平方的倒数可就是好几倍的关系,尤其是行星离恒星很近的时候更是如此,面对从几百开始然后突然上升到几万然后立刻(被甩出去而)变成零点几然后苟延残喘一会儿变成0的温度,我觉得这玩意儿真是太可怕了……
所以现在看到的三体度,已经不是原来那个从热平衡导出的有实际意义的温度量度了,而是一个纯粹为了让游戏和我们的常识比较相符的数字(取对数是把变化放平缓,乘25再减35是调整到地球常见气温的区间,乘10取int再除以10就是保留1位小数啦):
Temp.Text = Int(25 * Log(invd) * 10) / 10 - 35
对了这里的Temp不是Temporary的意思而是Temperature的意思……总之目前这个温度还是很顺眼的……
才怪!现在的这个三体度的设计,还面临着一个非常恶心的问题,这也是直接导致我放弃了这个坑的原因,或者起码是放弃了用VB做这个游戏的原因(但我并不是很习惯用C或者Pascal的面向对象编程……都是作为面向过程的语言学的)。
问题是什么呢?其实很简单,我希望这个温度是连续变动的,起码是看起来连续变动的,因此大家现在看到的计算三体度的那一行代码,原来其实是在函数FindTempSub当中的,然而运行的时候发现还是不连续变动的,也就是说,其实只有在每次Timer的事件整个都完成之后,才真正的修改一次Temp.Text的值,期间的所有对Temp.Text的操作都是存在临时变量里,后一次操作覆盖了前一次操作。不解决这个问题,温度就永远是在跳而不是在连续变化的。
实际上,上述对于温度的诡异变换,调整每次的步进(本来一个FindTempSub就是10000个dt),还有拉长时间Time_Count.Text = Int(time / 20),都在企图让温度变化显得更加缓和或者说让人能够接受,但是这些终究都还是治标不治本的。因此到了这一步果断弃坑,如果有朝一日又不幸成了码农我再填吧。

PART 4 生物学和物理学(的一些设想)
由于温度问题弃坑的结果是,生物学和物理学如何发展,如何保留,我还没有完全写出来(实际上,对于文明的重生我也没有考虑,目前我都没有做什么情况下是烫死了什么时候是冻死了的判定,之前写过一个当温度(那会儿还是原三体度)超过10000时发个alert,结果发现开始之后没过几秒就alert了,然后行星就被甩出去了……)
所以关于生物学和物理学,我在后面加了个括号,主要都还只是设想部分;由于整个游戏除了依靠恒纪元乱纪元进行时空调配外,游戏性和平衡性主要就是如何选择生物学和物理学的发展,所以这部分设想还需要大量的论证和实验才行。
关于两者的定位,最原始的想法是,生物学决定生物耐冷耐热的程度,比如生物学完全没有发展时,只能忍受-10~40,脱水时可以扩大到-20~80,发展一级,则比如平时能忍受-15~45,脱水时可以扩大到-30~90,诸如此类;而物理学则是完全没有逐级回报的,只有等你升到了最后一级,造出光速飞船逃离三体世界才有回报,也就是说,如果恰好碰到温度适宜的恒纪元,完全不发展生物学而只发展物理学也是能够获胜的。
其次是一些现实的考虑:
1. 学科发展的速度是稳定的吗?
我在这里假定的是学科发展的速度是逐渐加快的,从这两段代码中可以看出来:
phy_pro = Int(Exp(phyd * Log(2) + (10 - phyd) * Log(3)) / 100) + 1
bio_pro = Int(Exp((11 - biod) * Log(2)) / 10) + 2 * biod实际的科学发展史上,学科发展的速度就是逐渐加快的,这一点从几次工业革命或者科学革命之间的时间间隔就可以看出来。
但是,我一开始的设定是学科发展速度越来越慢的,这主要还是出自一个游戏性的考虑,大家玩过的游戏,不都是越到后面越难吗?而且,如果低级阶段花费了很长时间,而高级阶段花费的时间较少,整个游戏就变成了靠运气熬过低级阶段然后基本上就能赢了(当然仍不是100%)。
大家来比较一下,一个游戏是CS,第一局是手枪局,你赢了第一局,换把好点的枪,再赢两三局,能拿上AK,和另一个游戏是CF,你有钱就能买AK,然后拿着AK大杀四方……选一个?
当然,还有一个选择是先快后慢再快,这是地球在小说中实际面临的状况,中间的慢主要是因为智子锁死了科技,后面的快可以认为是大低谷结束后的科学文化复兴,也可以认为是智子解除了科技锁定。
2. 学科之间是否有交叉呢?
物理学和生物学的研究并不是完全独立的,比如说,生物学中DNA的发现是观察的X射线衍射图样的结果,再比如……呃……我暂时想不出来生物学影响物理学的例子……
总之,如果学科之间是有交叉的,那么在不同的物理学(生物学)发展阶段,生物学(物理学)的发展速度也是不一样的。
3. 学科发展进程的保留
在文明毁灭之后,是否有可能保留下来一些遗迹?我觉得这是和物理学/生物学都有关系的一个问题,比如物理学发展到一定程度之后,出现一些能够长期保存的技术(比如旅行者号上的纯金光盘?),再加上红岸的自译解系统(没法保证新文明使用的文字和语言与原来的文明一样)也需要一定的科技发展水平(起码要有计算机);或者生物学发展到一定程度之后,考虑到三体人自己的特性(脱水),可以给后世保存一个漂浮在三体星系的脱水人小飞船,等待后来的文明捕获这个脱水人(就像三体人捕获云天明那样)然后获取它的知识(记得三体人是如何出生的了吗?父母的知识直接传递给了孩子)
4. 学科的抉择
最后还是回到平衡性的问题,这其实与其说是一个技术问题更是一个游戏哲学的问题。我个人的倾向是,不希望游戏有一个固定的策略能够确保胜利;举例来说,我一开始考虑的是,生物学程度会决定学科发展进程的保留,那么很有可能一开始大家就努力把生物学刷到10级,再开始升物理学,那么为了平衡,生物学的发展就要变得更难(其实就是一个收益和成本的考虑,由于生物学此时的收益高,所以其成本也要更高,否则就会使得大家都选择生物学),或者干脆就放弃这个设定。
===============================
写在最后:
非常感谢目前的700+位赞我的童鞋,我记得刚看到这个问题的时候,最高票的答案(现在近3000赞的那个回答)的赞数已经超过了我目前的赞数,但是很快我的答案就爬到了第一还牢牢把握住了这个位置。
为什么要回答这个问题?一方面,是因为我写过这样一个简陋的程序,不过还是半成品(四分之一成品?);另一方面,是因为我,相信和大家一样,对于这个问题下的很多答案不满意。
对抖机灵的答案不满意,更准确地说,是对国产游戏的这种大氛围不满意。为什么我们的游戏,都是“油腻的师姐在哪里?”,是“你的时间非常值钱”,是“屠舰水滴,首充即送”?我想很多玩游戏的人,就是想玩游戏,不是想被游戏玩。
对很多宏大的设想的答案不满意,是因为,这种宏大紧接着就跟出一个结论,那就是这样的事情我们做不来。这可以做一个怎样的类比呢?我觉得就好像现在像韭菜一样割一茬长一茬的创业公司,和过去那些传统行业的初创公司。创业公司的Business Plan,说得肯定比传统公司美好100倍,1000倍,但是他们真的能做到吗?不能做到,烧钱烧完了,就留下一堆骨灰。那么,还不如一开始先从一些简单的事情做起,在能力范围之内做起。

我也想要改变世界,但是我也很清楚自己的斤两。我和很多很多人一样,有些拿手的活儿,但远远算不上是什么特别的一技之长。但是后来我看到了这样一段话,大意是:
做一名一流的程序员是很困难的,做一名一流的海洋生物专家也是很困难的;但是,如果你是一个不错的程序员,同时你又恰好是一个研究海豚的业余海洋生物学家,那么你完全可以写一个网站,跟踪海豚种族的迁徙,给海洋学家提供些数据。说不定你能够拯救一个物种呢?
沿着这个想法,我做了很多尝试:
大一,速记+对历史的兴趣=《西方文明》和《中国文明》全程讲解速记稿,20万字;
大二,脑洞+写作=近20篇小说,部分发表在
大三,
找东西+环境问题=《穹顶之下》数据溯源
翻译+趣味数学题=Project Euler全部翻译
最后,简陋的编程技术+三体迷=你现在所看的答案。
感谢阅读。   1/3    1 2 3 下一页 尾页

爱华网本文地址 » http://www.413yy.cn/a/81550103/6157.html

更多阅读

中国打造50-60万吨级三体二层巨型航母! 50万吨级巨型航母

内容提要:据日本媒体大胆臆测,中国打造一艘排水量为18万吨的双体航母这一计划只能算是中规中矩,从中国将建第二艘航母的消息传来,野心不应该满足于如此吨级排水量,从试图撼动美国航母霸主地位来看,中国军方将打造50-60万吨级三体二层巨型

怎样做清蒸鱼才好吃?也就是有没有什么诀窍? 如何做清蒸鱼好吃

怎样做清蒸鱼才好吃?也就是有没有什么诀窍? 秘诀一:鱼的重量控制在600克左右,这样大小的体积,摆在鱼盘中,看上去美观,而且生熟火候好把握; 秘诀二:将鱼收拾干净后,在鱼体两侧抹匀猪油(清油也凑合啦),再沾少许白酒(你也可以尝试沾些洋酒,也许又开

声明:《中国推出新型三体船 有没有可能推出一款三体的游戏?》为网友旧人终究不覆分享!如侵犯到您的合法权益请联系我们删除