泰坦之旅刷裝備與聯(lián)機(jī)的一點(diǎn)關(guān)系_第1頁
泰坦之旅刷裝備與聯(lián)機(jī)的一點(diǎn)關(guān)系_第2頁
泰坦之旅刷裝備與聯(lián)機(jī)的一點(diǎn)關(guān)系_第3頁
泰坦之旅刷裝備與聯(lián)機(jī)的一點(diǎn)關(guān)系_第4頁
泰坦之旅刷裝備與聯(lián)機(jī)的一點(diǎn)關(guān)系_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、為什么不取消掉偽隨機(jī)?因?yàn)門Q中紫色裝備的屬性是會(huì)上下浮動(dòng)的,一旦取消掉偽隨機(jī),玩家?guī)缀鯇⒂肋h(yuǎn)無法刷到屬性優(yōu)秀的紫色裝備,因此偽隨機(jī)的存在是有重大價(jià)值與意義的。關(guān)于偽隨機(jī)更加詳細(xì)的詳細(xì)闡述請查閱本貼2樓隨機(jī)數(shù)可能存在偏差但是數(shù)值應(yīng)該是固定的。簡單說就是任何任務(wù)在80級時(shí)平均刷4次哈迪斯與龜洞100%會(huì)掉落1-2件紫色裝備。偽隨時(shí)機(jī)影響掉落紫色裝備的種類比方頻繁掉落JP裝備墮落者。但是偽隨機(jī)不會(huì)影響掉落紫色裝備的數(shù)量。偽隨機(jī)常識:用計(jì)算機(jī)來模擬隨機(jī)序列都是使用“偽隨機(jī)發(fā)生器(pseudo-random variable generator)。偽隨機(jī)發(fā)生器其實(shí)就是通過函數(shù)來產(chǎn)生一系列看上去像是隨機(jī)

2、的數(shù),不過所有的偽隨機(jī)發(fā)生器都有一個(gè)周期,經(jīng)過一個(gè)周期之后,之前的序列會(huì)重復(fù)出現(xiàn)(真正的隨機(jī)序列肯定不會(huì)出現(xiàn)這種狀況)。因此,一個(gè)好的偽隨機(jī)發(fā)生器要有一個(gè)非常長的循環(huán)周期,使得同樣的序列不那么容易重復(fù)出現(xiàn)。比方下面是一個(gè)產(chǎn)生正態(tài)序列的偽隨機(jī)數(shù)發(fā)生器:1) 任意給定一個(gè)種子Seed2) 令X1 = Seed 3) 令X2 = exp ( 5 ln(X1) )4) 產(chǎn)生第一個(gè)隨機(jī)數(shù) R1 = X2 - Integer (X2)5) 令Seed = R1,重復(fù)1) - 4),生成第二個(gè)隨機(jī)數(shù)R2,依此類推下去形成一個(gè)正態(tài)的隨機(jī)序列R1, R2, .泰坦里的偽隨機(jī)數(shù)發(fā)生器的算法肯定跟這個(gè)簡單例子不一樣

3、,但是大致原理差不多,大家感覺不那么“隨機(jī)的原因可能是使用的偽隨機(jī)數(shù)發(fā)生器的周期不夠長,或者seed出了問題,這兩者都有可能。沒有源碼顯然無法對這個(gè)問題做出進(jìn)一步判斷。很多人刷了很久也出不了自己想要的裝備。這是很正常的。為何?每個(gè)角色創(chuàng)立的時(shí)候就賦予了角色一個(gè)值。該角色某些裝備可以說完全不會(huì)被打出來,而有些裝備那么頻頻出現(xiàn),就是這個(gè)值在起作用了。而這個(gè)值,是一生不變的。所以說聯(lián)機(jī)容易出裝備的道理就在這里了。因?yàn)槭嵌嗳送?,那么每個(gè)人的值是不同,出某些裝備的幾率也更隨機(jī)化。以前怎么也不會(huì)出現(xiàn)的詞綴和裝備也就更容易出現(xiàn)一些。所以,刷裝備,要么你有多個(gè)角色輪流刷,要么,就選擇聯(lián)機(jī)。一個(gè)角色不停的重復(fù)刷

4、實(shí)在是最蠢 最浪費(fèi)精神的方法了。這個(gè)理論下:拉人,盡可能不影響游戲速度情況下越多人聯(lián)機(jī),得到物品的可能性越隨機(jī)化。Lordbane:偽隨機(jī)就是在玩家建立帳號以后,其局部物品的掉率都是固定的且無法預(yù)知的,特別是紫色裝備,并非是完全依照泰坦立方上的掉率偽隨機(jī)已經(jīng)被證明確實(shí)存在。簡單說,有的帳號會(huì)頻繁刷出某件裝備,而有的裝備出現(xiàn)的概率卻微乎其微。但是,偽隨機(jī)有利有弊,并非是絕對的消極,主要表達(dá)在以下4點(diǎn):1、任何帳號只要刷裝備的時(shí)間到達(dá)大約半年之內(nèi),是幾乎可以刷到TQ中任何一件紫色裝備的已經(jīng)被測試過,也就是說,刷裝備的時(shí)間根本可以彌補(bǔ)偽隨機(jī)帶來的弊端。2、因?yàn)閭坞S機(jī)對導(dǎo)致某件裝備屢次出現(xiàn),這對于許多

5、優(yōu)秀裝備而言是非常好的有利條件,比方一個(gè)帳號頻繁刷到墮落者,那么將會(huì)大幅縮短玩家刷裝備的時(shí)間。3、偽隨機(jī)相當(dāng)于變相鼓勵(lì)玩家多建新號,不要拘泥于一種職業(yè),這一點(diǎn)是非常明智的,因?yàn)椴煌穆殬I(yè)不同的玩法不同派別才會(huì)讓玩家從各個(gè)角度了解泰坦之旅。4、偽隨機(jī)最大的特點(diǎn)是與愛因斯坦的相對論一致,簡單說就是證明了“人為規(guī)定的偶然是“客觀存在的必然的結(jié)果,愛因斯坦說過的“上帝不玩色子來證明量子力學(xué)“不確定性原理存在缺陷,愛因斯坦的相對論認(rèn)為宇宙中一切現(xiàn)象都存在其原因與原動(dòng)力游戲裝備的掉率也包含其中。1、首先需要聲明的是,計(jì)算機(jī)不會(huì)產(chǎn)生絕對隨機(jī)的隨機(jī)數(shù),計(jì)算機(jī)只能產(chǎn)生“偽隨機(jī)數(shù)。其實(shí)絕對隨機(jī)的隨機(jī)數(shù)只是一種理想

6、的隨機(jī)數(shù),即使計(jì)算機(jī)怎樣開展,它也不會(huì)產(chǎn)生一串絕對隨機(jī)的隨機(jī)數(shù)。計(jì)算機(jī)只能生成相對的隨機(jī)數(shù),即偽隨機(jī)數(shù)。 2、嚴(yán)格地說,這里的計(jì)算機(jī)是指由馮諾依曼思想開展起來的電子計(jì)算機(jī)。而未來的量子計(jì)算機(jī)或許有可能產(chǎn)生基于自然規(guī)律的不可重現(xiàn)的“真隨機(jī)數(shù)?!罢骐S機(jī)數(shù)恐怕要配合“有機(jī)物才會(huì)實(shí)現(xiàn),純“無機(jī)物的電腦是永遠(yuǎn)永遠(yuǎn)也無法產(chǎn)生基于自然規(guī)律的不可重現(xiàn)的“真隨機(jī)數(shù)的。大家可能很屢次討論過隨機(jī)數(shù)在計(jì)算機(jī)中怎樣產(chǎn)生的問題,在這篇文章中,我會(huì)對這個(gè)問題進(jìn)行更深入的探討,闡述我對這個(gè)問題的理解。 首先需要聲明的是,計(jì)算機(jī)不會(huì)產(chǎn)生絕對隨機(jī)的隨機(jī)數(shù),計(jì)算機(jī)只能產(chǎn)生“偽隨機(jī)數(shù)。其實(shí)絕對隨機(jī)的隨機(jī)數(shù)只是一種理想的隨機(jī)數(shù),即使計(jì)

7、算機(jī)怎樣開展,它也不會(huì)產(chǎn)生一串絕對隨機(jī)的隨機(jī)數(shù)。計(jì)算機(jī)只能生成相對的隨機(jī)數(shù),即偽隨機(jī)數(shù)。 偽隨機(jī)數(shù)并不是假隨機(jī)數(shù),這里的“偽是有規(guī)律的意思,就是計(jì)算機(jī)產(chǎn)生的偽隨機(jī)數(shù)既是隨機(jī)的又是有規(guī)律的。怎樣理解呢?產(chǎn)生的偽隨機(jī)數(shù)有時(shí)遵守一定的規(guī)律,有時(shí)不遵守任何規(guī)律;偽隨機(jī)數(shù)有一局部遵守一定的規(guī)律;另一局部不遵守任何規(guī)律。比方“世上沒有兩片形狀完全相同的樹葉,這正是點(diǎn)到了事物的特性,即隨機(jī)性,但是每種樹的葉子都有近似的形狀,這正是事物的共性,即規(guī)律性。從這個(gè)角度講,你大概就會(huì)接受這樣的事實(shí)了:計(jì)算機(jī)只能產(chǎn)生偽隨機(jī)數(shù)而不能產(chǎn)生絕對隨機(jī)的隨機(jī)數(shù)。嚴(yán)格地說,這里的計(jì)算機(jī)是指由馮諾依曼思想開展起來的電子計(jì)算機(jī)。而未

8、來的量子計(jì)算機(jī)有可能產(chǎn)生基于自然規(guī)律的不可重現(xiàn)的“真隨機(jī)數(shù) 那么計(jì)算機(jī)中隨機(jī)數(shù)是怎樣產(chǎn)生的呢?有人可能會(huì)說,隨機(jī)數(shù)是由“隨機(jī)種子產(chǎn)生的。沒錯(cuò),隨機(jī)種子是用來產(chǎn)生隨機(jī)數(shù)的一個(gè)數(shù),在計(jì)算機(jī)中,這樣的一個(gè)“隨機(jī)種子是一個(gè)無符號整形數(shù)。那么隨機(jī)種子是從哪里獲得的呢? 下面看這樣一個(gè)C程序: /rand01.c #include static unsigned int RAND_SEED; unsigned int random(void) RAND_SEED=(RAND_SEED*123 59)%65536; return(RAND_SEED); void random_start(void) int

9、 temp2; movedata(0x0040,0x006c,FP_SEG(temp),FP_OFF(temp),4); RAND_SEED=temp0; main() unsigned int i,n; random_start(); for(i=0;i10;i ) printf(%ut,random(); printf(n); 這個(gè)程序rand01.c完整地闡述了隨機(jī)數(shù)產(chǎn)生的過程: 首先,主程序調(diào)用random_start()方法,random_start()方法中的這一句我很感興趣: movedata(0x0040,0x006c,FP_SEG(temp),FP_OFF(temp),4);

10、 這個(gè)函數(shù)用來移動(dòng)內(nèi)存數(shù)據(jù),其中FP_SEGfar pointer to segment是取temp數(shù)組段地址的函數(shù),F(xiàn)P_OFFfar pointer to offset是取temp數(shù)組相對地址的函數(shù),movedata函數(shù)的作用是把位于0040:006CH存儲單元中的雙字放到數(shù)組temp的聲明的兩個(gè)存儲單元中。這樣可以通過temp數(shù)組把0040:006CH處的一個(gè)16位的數(shù)送給RAND_SEED。 random用來根據(jù)隨機(jī)種子RAND_SEED的值計(jì)算得出隨機(jī)數(shù),其中這一句: RAND_SEED=(RAND_SEED*123 59)%65536; 是用來計(jì)算隨機(jī)數(shù)的方法,隨機(jī)數(shù)的計(jì)算方法在不

11、同的計(jì)算機(jī)中是不同的,即使在相同的計(jì)算機(jī)中安裝的不同的操作系統(tǒng)中也是不同的。我在linux和windows下分別試過,相同的隨機(jī)種子在這兩種操作系統(tǒng)中生成的隨機(jī)數(shù)是不同的,這說明它們的計(jì)算方法不同。 現(xiàn)在,我們明白隨機(jī)種子是從哪兒獲得的,而且知道隨機(jī)數(shù)是怎樣通過隨機(jī)種子計(jì)算出來的了。那么,隨機(jī)種子為什么要在內(nèi)存的0040:006CH處取?0040:006CH處存放的是什么? 學(xué)過?計(jì)算機(jī)組成原理與接口技術(shù)?這門課的人可能會(huì)記得在編制ROM BIOS時(shí)鐘中斷效勞程序時(shí)會(huì)用到Intel 8253定時(shí)/計(jì)數(shù)器,它與Intel 8259中斷芯片的通信使得中斷效勞程序得以運(yùn)轉(zhuǎn),主板每秒產(chǎn)生的18.2次中

12、斷正是處理器根據(jù)定時(shí)/記數(shù)器值控制中斷芯片產(chǎn)生的。在我們計(jì)算機(jī)的主機(jī)板上都會(huì)有這樣一個(gè)定時(shí)/記數(shù)器用來計(jì)算當(dāng)前系統(tǒng)時(shí)間,每過一個(gè)時(shí)鐘信號周期都會(huì)使記數(shù)器加一,而這個(gè)記數(shù)器的值存放在哪兒呢?沒錯(cuò),就在內(nèi)存的0040:006CH處,其實(shí)這一段內(nèi)存空間是這樣定義的: TIMER_LOW DW ? ;地址為 0040:006CH TIMER_HIGH DW ? ;地址為 0040:006EH TIMER_OFT DB ? ;地址為 0040:0070H 時(shí)鐘中斷效勞程序中,每當(dāng)TIMER_LOW轉(zhuǎn)滿時(shí),此時(shí),記數(shù)器也會(huì)轉(zhuǎn)滿,記數(shù)器的值歸零,即TIMER_LOW處的16位二進(jìn)制歸零,而TIMER_HIG

13、H加一。rand01.c中的 movedata(0x0040,0x006c,FP_SEG(temp),FP_OFF(temp),4); 正是把TIMER_LOW和TIMER_HIGH兩個(gè)16位二進(jìn)制數(shù)放進(jìn)temp數(shù)組,再送往RAND_SEED,從而獲得了“隨機(jī)種子。 現(xiàn)在,可以確定的一點(diǎn)是,隨機(jī)種子來自系統(tǒng)時(shí)鐘,確切地說,是來自計(jì)算機(jī)主板上的定時(shí)/計(jì)數(shù)器在內(nèi)存中的記數(shù)值。這樣,我們總結(jié)一下前面的分析,并討論一下這些結(jié)論在程序中的應(yīng)用: 1.隨機(jī)數(shù)是由隨機(jī)種子根據(jù)一定的計(jì)算方法計(jì)算出來的數(shù)值。所以,只要計(jì)算方法一定,隨機(jī)種子一定,那么產(chǎn)生的隨機(jī)數(shù)就不會(huì)變。 看下面這個(gè)C 程序: /rand02.

14、cpp #include #include using namespace std; int main() unsigned int seed=5; srand(seed); unsigned int r=rand(); cout / 編輯者注:可能代碼有缺 在相同的平臺環(huán)境下,編譯生成exe后,每次運(yùn)行它,顯示的隨機(jī)數(shù)都是一樣的。這是因?yàn)樵谙嗤木幾g平臺環(huán)境下,由隨機(jī)種子生成隨機(jī)數(shù)的計(jì)算方法都是一樣的,再加上隨機(jī)種子一樣,所以產(chǎn)生的隨機(jī)數(shù)就是一樣的。 2.只要用戶或第三方不設(shè)置隨機(jī)種子,那么在默認(rèn)情況下隨機(jī)種子來自系統(tǒng)時(shí)鐘即定時(shí)/計(jì)數(shù)器的值 看下面這個(gè)C 程序: /rand03.cpp #i

15、nclude #include using namespace std; int main() srand(unsigned)time(NULL); unsigned int r=rand(); cout return 0; 這里用戶和其他程序沒有設(shè)定隨機(jī)種子,那么使用系統(tǒng)定時(shí)/計(jì)數(shù)器的值做為隨機(jī)種子,所以,在相同的平臺環(huán)境下,編譯生成exe后,每次運(yùn)行它,顯示的隨機(jī)數(shù)會(huì)是偽隨機(jī)數(shù),即每次運(yùn)行顯示的結(jié)果會(huì)有不同。 3.建議:如果想在一個(gè)程序中生成隨機(jī)數(shù)序列,需要至多在生成隨機(jī)數(shù)之前設(shè)置一次隨機(jī)種子。 看下面這個(gè)用來生成一個(gè)隨機(jī)字符串的C 程序: /rand04.cpp #include #in

16、clude using namespace std; int main() int rNum,m=20; char *ch=new charm; for ( int i = 0; i /大家看到了,隨機(jī)種子會(huì)隨著for循環(huán)在程序中設(shè)置屢次 srand(unsigned)time(NULL); rNum=1 (int)(rand()/(double)RAND_MAX)*36); /求隨機(jī)值 switch (rNum) case 1: ch=a; break ; case 2: ch=b; break ; case 3: ch=c; break ; case 4: ch=d; break ; ca

17、se 5: ch=e; break ; case 6: ch=f; break ; case 7: ch=g; break ; case 8: ch=h; break ; case 9: ch=i; break ; case 10: ch=j; break ; case 11: ch=k; break ; case 12: ch=l; break ; case 13: ch=m; break ; case 14: ch=n; break ; case 15: ch=o; break ; case 16: ch=p; break ; case 17: ch=q; break ; case 18:

18、 ch=r; break ; case 19: ch=s; break ; case 20: ch=t; break ; case 21: ch=u; break ; case 22: ch=v; break ; case 23: ch=w; break ; case 24: ch=x; break ; case 25: ch=y; break ; case 26: ch=z; break ; case 27:ch=0; break; case 28:ch=1; break; case 29:ch=2; break; case 30:ch=3; break; case 31:ch=4; bre

19、ak; case 32:ch=5; break; case 33:ch=6; break; case 34:ch=7; break; case 35:ch=8; break; case 36:ch=9; break; /end of switch cout /end of for loop cout return 0; 而運(yùn)行結(jié)果顯示的隨機(jī)字符串的每一個(gè)字符都是一樣的,也就是說生成的字符序列不隨機(jī),所以我們需要把srand(unsigned)time(NULL); 從for循環(huán)中移出放在for語句前面,這樣可以生成隨機(jī)的字符序列,而且每次運(yùn)行生成的字符序列會(huì)不同呵呵,也有可能相同,不過出現(xiàn)這種情況的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論