游戲中的網(wǎng)絡(luò)同步機(jī)制<一> 幀同步Lockstep

參考游戲中的網(wǎng)絡(luò)同步機(jī)制——Lockstep

一按灶、前言

每個人或多或少都接觸過網(wǎng)游症革,那個虛擬的世界給予了我們無窮的樂趣鸯旁,而這個虛擬世界是如何完美的將身處天南地北的玩家連接在一起的呢?我們每個人的電腦配置都不一樣铺罢,網(wǎng)絡(luò)延遲也不同摩疑,但是在玩FPS(第一人稱射擊)游戲時,戰(zhàn)斗感受與真實(shí)世界并無二致畏铆,網(wǎng)游是如何做到這一點(diǎn)的呢辞居?

本文將介紹和分析早期廣泛在RTS(即時策略)游戲中應(yīng)用的同步機(jī)制——Lockstep

RTS游戲有很多,比如我們都玩過的的Warcraft III(大家耳熟能詳?shù)腄ota是它的一張地圖)和StarCraft鸠删,還有EA的代表作命令與征服系列(Command & Conquer)等等贼陶,以及現(xiàn)在非常流行的Dota2和LOL

那么為什么要強(qiáng)調(diào)早期呢碉怔?因?yàn)镈ota2和LOL等新興的游戲使用的同步機(jī)制不再是傳統(tǒng)的Lockstep了。嚴(yán)格來說桨踪,Warcraft和現(xiàn)在意義上的網(wǎng)游有很大區(qū)別芹啥,因?yàn)樗^的網(wǎng)是局域網(wǎng)(LAN)。早期RTS游戲出現(xiàn)時互聯(lián)網(wǎng)還沒有現(xiàn)在那么普及汽纠,網(wǎng)速也很慢虱朵,更沒有什么像樣的網(wǎng)游,能夠支持局域網(wǎng)對戰(zhàn)已經(jīng)很不錯了。

有人可能會有疑問官扣,我們平時經(jīng)常在對戰(zhàn)平臺上和全國各地的人打Dota惕蹄,你為什么說Warcraft III只支持局域網(wǎng)呢?這又是一個很有意思的話題遭顶,實(shí)際上棒旗,對戰(zhàn)平臺使用了虛擬局域網(wǎng)(VLAN)技術(shù)撩荣,通過進(jìn)程注入,HOOK WinSock函數(shù)調(diào)用逛拱,將數(shù)據(jù)包發(fā)送到對戰(zhàn)平臺服務(wù)器上朽合,由服務(wù)器分配虛擬IP饱狂,這里還能夠進(jìn)行天梯匹配等等休讳,在隨后的游戲過程中游戲數(shù)據(jù)包都是通過對戰(zhàn)平臺的服務(wù)器進(jìn)行轉(zhuǎn)發(fā),但是這一切對Warcraft III進(jìn)程本身來說是透明的磺樱,它依然感覺自己在一個局域網(wǎng)環(huán)境中。

二芜辕、為什么要有同步機(jī)制
1. 一致性

在虛擬世界中侵续,保證游戲的一致性是一個基本前提憨闰。什么是一致性鹉动?通俗的說就是虛擬世界中的事實(shí),比如在一個FPS游戲中缸血,大家的延遲都很高械筛,A埋哟、B兩個玩家同時發(fā)現(xiàn)了對方,并向?qū)Ψ缴鋼粲婧牵绻麤]有很好的同步機(jī)制扩氢,那么A的屏幕上顯示B還沒有開槍就被擊殺爷辱,而B的屏幕上顯示A還沒有開槍就被擊殺,這就出現(xiàn)了不一致的問題双饥,那么這個游戲還怎么愉快的進(jìn)行下去咏花?

可以這么說,延遲是造成不一致問題的主要原因苍匆。如果延遲都為0(即A玩家作出行動的同時B玩家就能看到)浸踩,那么也就不存在不一致的問題了统求,就像在真實(shí)世界中一樣。而同步機(jī)制除了基本的通信作用外折剃,最重要的任務(wù)就是解決不一致問題怕犁,即保證游戲的一致性开睡。同步機(jī)制有許多種篇恒,根據(jù)游戲類型凶杖、技術(shù)條件甚至?xí)r代背景的不同智蝠,選擇的同步機(jī)制也會不同。

2.分類

游戲的網(wǎng)絡(luò)同步機(jī)制有很多解虱,國外也有這方面的論文殴泰,拋開具體實(shí)現(xiàn)細(xì)節(jié)浮驳,總體來看可以分為下面幾類

  • Peer-to-Peer至会,在這類方法中,沒有服務(wù)器宵蛀,游戲參與者的身份是對等的糖埋,依靠參與游戲的玩家電腦自行解決同步問題的,最為典型的就是Lockstep
  • Client-Server征候,在這類方法中疤坝,Server端是絕對的權(quán)威馆铁,所有計(jì)算基本在Server上完成埠巨。例如,在游戲中向前移動一步望侈,要等待服務(wù)器確認(rèn)“你向前移動了一步”之后脱衙,才可以在客戶端上進(jìn)行這個行為例驹。(延遲較低的時候是察覺不到這個過程的鹃锈,延遲高時會有明顯的卡頓現(xiàn)象)
  • Client-Side Prediction,嚴(yán)格來說這并不是一類方法仅政,而是對第二類方法的改進(jìn)已旧。試想如果所有的操作都必須在得到服務(wù)器的確認(rèn)召娜,然后才在客戶端上進(jìn)行,在延遲較高時用戶體驗(yàn)會非常的差檀咙。這時可以把常用一部分計(jì)算轉(zhuǎn)移到客戶端進(jìn)行璃诀,服務(wù)器輔助校正即可劣欢。
三、什么是Lockstep

Lockstep最初是軍隊(duì)行進(jìn)中使用的校套,后來在19世紀(jì)的時候廣泛在美國監(jiān)獄使用笛匙,成為那個時期美國監(jiān)獄的一個標(biāo)識妹孙。就像這樣

image.png

image.png

意思就是大家同步的走蠢正,誰超前了要等待映琳,落后了的要趕上萨西。后來就引申到游戲的網(wǎng)絡(luò)同步機(jī)制上了

上一章節(jié)中我們說到Lockstep是Peer-to-Peer架構(gòu)中的一種同步方式谎脯,而我們平時在局域網(wǎng)中玩Dota時持寄,也的確沒有大型的游戲服務(wù)器稍味,只有一臺所謂的主機(jī),那么你可能會想烛愧,是不是所有的計(jì)算都是在那臺主機(jī)上完成的呢怜姿?也就是說其他玩家的機(jī)器只發(fā)送施放了某某技能這樣的數(shù)據(jù)包給主機(jī)沧卢,而造成多少傷害、某某效果是由主機(jī)計(jì)算并返回的披诗。

但事實(shí)并不是這樣的藤巢,玩Dota時所有的一切都是在本地計(jì)算完成的息罗。包括技能傷害迈喉、效果挨摸,命中與否,隨機(jī)刷新野怪等等膝蜈。也就是說每個玩家的電腦都完整計(jì)算了整盤游戲的全過程饱搏,且計(jì)算過程與計(jì)算結(jié)果都一模一樣置逻。而主機(jī)只是負(fù)責(zé)把每個玩家的操作指令(鼠標(biāo)點(diǎn)擊券坞、鍵盤按鍵等等)廣播給其他玩家恨锚。

是不是感到難以理解?

想要理解Lockstep的機(jī)制课舍,先看看下面三個問題布卡。

  • 什么是動畫?是會動的畫嗎栖忠?當(dāng)然不是庵寞,人眼的記憶時間為0.1s捐川,也就是大約100ms逸尖,只要把一幀一幀的靜態(tài)圖像快速播放一遍娇跟,我們就會感覺畫面就動了起來苞俘,比如下面這樣


    image.png
  • 最容易實(shí)現(xiàn)同步的游戲類型是什么吃谣?當(dāng)然是回合制游戲岗憋,比如棋類游戲和卡牌游戲,它們有嚴(yán)格的先后順序陷揪,不容易出現(xiàn)邏輯錯誤,更不會出現(xiàn)不一致的情況耐量;而且回合時間較長滤港,能夠容忍高延遲。

  • 什么是狀態(tài)機(jī)著榴?狀態(tài)機(jī)是表示有限個狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學(xué)模型脑又。給定一個狀態(tài)機(jī)模型F锐借,處在某一個狀態(tài)S1钞翔,這時給定一個輸入I布轿,此時狀態(tài)機(jī)會轉(zhuǎn)移到一個新的狀態(tài)S2。在這個過程中疟呐,只要F启具、S1和I是確定的鲁冯,那么S2就是確定的色查。

其實(shí)把以上三點(diǎn)結(jié)合起來秧了,就是Lockstep的基本思路

我們來看下面這張圖


image.png

圖中是A验毡、B晶通、C三個玩家的時間軸狮辽,這個時間軸不是電腦上的本地時間,而是A椰苟、B舆蝴、C聯(lián)機(jī)時定義的一個時間軸须误。虛線分隔出來時間片稱為turn京痢,可以理解成一個回合祭椰。箭頭表示該玩家將自己的操作指令廣播給其他玩家。我們把一盤游戲看成一個大型的狀態(tài)機(jī)钉赁,因?yàn)榇蠹彝娴氖峭豢畹挠螒蚰悴龋虼薋是相同的带膜,初始狀態(tài)S0也是相同的膝藕。在第一個turn結(jié)束時咐扭,所有玩家都接收到了完全一樣的輸入I蝗肪,注意這里的I不是一個值穗慕,而是包含了當(dāng)前游戲中所有玩家的操作指令集合逛绵。t1時刻所有玩家的電腦自行計(jì)算結(jié)果术浪。由于F胰苏、S0和I是固定的硕并,所以每個玩家電腦上計(jì)算出的下一個狀態(tài)S1一定是相同的。

同理埃仪,第二個turn也是如此


image.png

可以看出卵蛉,Lockstep其實(shí)也是“回合制”的傻丝,當(dāng)然這個所謂的回合與我們理解的棋類葡缰、卡牌游戲的回合是不太一樣的运准。Lockstep的回合(也就是turn)中胁澳,所有玩家都可以采取行動韭畸,最終結(jié)果是在回合結(jié)束時統(tǒng)一計(jì)算的。在同一個turn接收到的操作指令蔓搞,是不分行動先后順序的胰丁,只要是在同一個turn里,就認(rèn)為是同時發(fā)生的喂分。

舉個例子锦庸,假設(shè)A、B蒲祈、C是游戲中3個互相敵對的單位甘萧,攻擊力都為100。在某一個turn內(nèi)扬卷,A和B都右鍵點(diǎn)擊了C(warcraft這類游戲好像都是右鍵普攻)牙言,C右鍵點(diǎn)擊了A,這些操作指令都廣播到了其他玩家電腦上怪得,則該turn的輸入為“A攻擊C咱枉、B攻擊C、C攻擊A”徒恋。那么該turn結(jié)束后蚕断,每個人的電腦都開始計(jì)算,且計(jì)算結(jié)果是相同的入挣,即“A損失100生命值亿乳,B不變,C損失200生命值”财岔。

這就是Lockstep同步機(jī)制风皿,其實(shí)也沒有多復(fù)雜是吧~這里還有幾點(diǎn)需要注意:

  • Lockstep把游戲過程劃分成了一個個turn,為什么游戲不會出現(xiàn)卡頓的現(xiàn)象呢匠璧?回到前面動畫的那個問題桐款,人眼是容易被欺騙的,人的反應(yīng)其實(shí)也是很慢的(相對電腦來說)夷恍。人眼的記憶時間為0.1s魔眨,只要每秒進(jìn)行10turn,我們是感覺不出卡頓的酿雪。而通常游戲的幀數(shù)為60fps遏暴,即每秒60幅圖像在屏幕上顯示,你會感覺游戲非常流暢~當(dāng)然“幀”和Lockstep中的“turn”并不是一一對應(yīng)的指黎,這里只是想說明一個turn的時間是非常短的朋凉,至少比我們的反應(yīng)要快的多。

  • Lockstep對網(wǎng)絡(luò)延遲的要求是非常高的醋安,因?yàn)槊總€turn要向所有玩家廣播操作杂彭,同時也要接收來自其他玩家的操作。只有當(dāng)每個turn集齊了所有玩家的操作指令吓揪,也就是輸入確定了之后亲怠,才可以進(jìn)行計(jì)算柠辞,進(jìn)入下一個turn团秽,否則就要等待最慢的玩家。當(dāng)然局域網(wǎng)可以很好的滿足這個要求,延遲基本都在1ms左右习勤。

  • Lockstep中會不會出現(xiàn)延遲導(dǎo)致的不一致問題踪栋?顯然不會,從上面的分析可以知道姻报,使用Lockstep的游戲是嚴(yán)格按照turn向前推進(jìn)的己英,如果有人延遲比較高间螟,其他玩家必須等待該玩家跟上之后再繼續(xù)計(jì)算吴旋,不存在某個玩家領(lǐng)先或落后其他玩家若干個turn的情況。使用Lockstep同步機(jī)制的游戲中厢破,每個玩家的延遲都等于延遲最高的那個人荣瑟。(當(dāng)然這個說法還有待討論,后面還會說到這個問題)

  • Lockstep是非常嚴(yán)格的摩泪,要求每一步的的計(jì)算結(jié)果都完全一樣笆焰,任何計(jì)算錯誤都有可能導(dǎo)致蝴蝶效應(yīng),產(chǎn)生嚴(yán)重的后果见坑,因?yàn)闋顟B(tài)不能同步的話游戲根本就沒有辦法進(jìn)行下去嚷掠,最終將崩潰退出。

  • 《Algorithms and Networking for Computer Games》這本書中關(guān)于Lockstep的部分與本文的說法有些不同荞驴,我覺得也沒有誰對誰錯之分不皆,Lockstep更多的是一種思想,算是不一樣的理解吧熊楼,感興趣的同學(xué)也可以看看書中的章節(jié)霹娄。書中將Lockstep分為commit和reveal兩個階段,并且采用了流水線的方式鲫骗。如下圖所示


    image.png
四犬耻、與Lockstep無關(guān)的細(xì)節(jié)問題

為什么要討論與Lockstep無關(guān)的問題呢?因?yàn)檫@些問題雖然與Lockstep無關(guān)执泰,但卻與游戲本身有關(guān)枕磁,而且很多問題是由Lockstep引起的

1.野怪刷新與暴擊

我們都知道,Dota中有許多問題是與概率相關(guān)的术吝,比如整點(diǎn)時野怪是隨機(jī)刷新的计济,出了水晶劍之后是有概率暴擊的。那么按照Lockstep同步機(jī)制顿苇,計(jì)算都是在每個玩家自己電腦上完成的峭咒,那么在有概率存在的情況下,怎么可能保證每臺電腦的計(jì)算結(jié)果一致呢纪岁?凑队!

這時就輪到偽隨機(jī)數(shù)派上用場了,我們來看下面這個Java程序

import java.util.Random;
public class PseudoRandom {
    public static void main(String[] args) {
        Random r1 = new Random(10);//這里的10就是隨機(jī)種子(Random Seed)
        for (int i = 0; i < 10; i++) {
            System.out.print(r1.nextInt(100) + "\t");
        }
        System.out.println();
        Random r2 = new Random(10);
        for (int i = 0; i < 10; i++) {
            System.out.print(r2.nextInt(100) + "\t");
        }
    }
}

//Output
//13    80  93  90  46  56  97  88  81  14  
//13    80  93  90  46  56  97  88  81  14

如果你的jdk版本沒有什么問題的話,那么你看到的結(jié)果一定也是上面那樣漩氨,而且無論你運(yùn)行多少次都是這個結(jié)果西壮。大部分編程語言內(nèi)置庫里的隨機(jī)數(shù)都是利用線性同余發(fā)生器產(chǎn)生的,如果不指定隨機(jī)種子(Random Seed)叫惊,默認(rèn)以當(dāng)前系統(tǒng)時間戳作為隨機(jī)種子款青。一旦指定了隨機(jī)種子,那么產(chǎn)生的隨機(jī)數(shù)序列就是確定的霍狰。

所以抡草,游戲開始前,參與游戲的玩家電腦協(xié)商確定一個隨機(jī)種子蔗坯,就可以保證在游戲進(jìn)行過程中大家產(chǎn)生的隨機(jī)數(shù)序列是相同的康震,也就可以保證計(jì)算結(jié)果一致。

例如一個英雄的暴擊率為30%宾濒,對某個目標(biāo)持續(xù)普攻腿短,如果隨機(jī)數(shù)序列為12 32 90 25,小于等于30判定暴擊绘梦,大于30判定不暴擊橘忱,那么每個玩家電腦的計(jì)算結(jié)果都是暴擊 不暴擊 不暴擊 暴擊。(這里只是舉例說明原理卸奉,游戲中的實(shí)現(xiàn)細(xì)節(jié)不一定是這樣)

2.外掛問題

在對戰(zhàn)平臺打Dota的人都見識過全圖掛钝诚,而且屢禁不止,那么為什么Warcraft III中會有全圖掛择卦,而沒有其他游戲中的變態(tài)掛(如加強(qiáng)攻擊力敲长,瞬間移動等等)呢?為什么無法從根本上杜絕全圖掛呢秉继?

前面已經(jīng)說過了祈噪,使用Lockstep同步機(jī)制,所有計(jì)算都是在本地完成的尚辑,每輪turn都必須接收來自其他所有玩家的操作指令才能完成計(jì)算辑鲤,也就是說其他玩家的一舉一動你的電腦其實(shí)是知道的,只不過沒有在你的屏幕上展現(xiàn)出來罷了(被戰(zhàn)爭迷霧遮擋了)杠茬。因此月褥,全圖掛只要修改Warcraft III的內(nèi)存數(shù)據(jù),就可以去除戰(zhàn)爭迷霧瓢喉,達(dá)到開全圖的效果宁赤。而對戰(zhàn)平臺不可能改變Lockstep這種同步機(jī)制,只能在本地檢測是否有其他程序修改Warcraft III的內(nèi)存數(shù)據(jù)(就像病毒查殺一樣)栓票,而外掛程序總有辦法繞過檢測决左,所以全圖掛總是層出不窮。

而另一方面,恰恰因?yàn)長ockstep同步機(jī)制佛猛,其他比較變態(tài)的外掛根本不可能在Warcraft III上存在惑芭。比如強(qiáng)化攻擊力,我們同樣可以利用修改內(nèi)存的方式將增加自己的攻擊力继找,可以直接秒殺其他任何單位遂跟,但是別忘了其他玩家電腦也在同步的進(jìn)行計(jì)算,而我們的攻擊力在其他玩家電腦上仍然是不變的婴渡,這就造成了狀態(tài)不一致幻锁。前面說過了,Lockstep中出現(xiàn)狀態(tài)不同步的情況時很容易產(chǎn)生蝴蝶效應(yīng)缩搅,最終崩潰退出越败。

3.斷線重連

這個問題一直被廣大玩家詬病触幼,因?yàn)槠渌W(wǎng)游從來沒有斷線之后連不回去的情況硼瓣,為什么Warcraft III不支持?jǐn)嗑€重連呢?

Lockstep同步機(jī)制是非常嚴(yán)格的置谦,中途加入游戲是從技術(shù)上來講是非常困難的堂鲤。首先中途加入的玩家要進(jìn)行狀態(tài)同步,而狀態(tài)同步本身包含的內(nèi)容太多了媒峡,其中包括時間戳瘟栖、偽隨機(jī)數(shù)序列、所有單位的位置屬性信息等等谅阿,不是簡單的復(fù)制粘貼就能同步的半哟。這說起來容易,要具體實(shí)現(xiàn)起來沒那么簡單签餐,而且在局域網(wǎng)中掉線情況并不常見寓涨,因此早期暴雪的開發(fā)人員可能也就忽略這個問題了。

事實(shí)上使用對戰(zhàn)平臺的人才會經(jīng)常遇到這個問題氯檐,在互聯(lián)網(wǎng)中戒良,延遲高、掉線的情況時有發(fā)生冠摄。那么11平臺的掉線重連功能是怎么來的呢糯崎?個人觀點(diǎn),那并不是真的掉線重連河泳,只是我們的丟包情況比較嚴(yán)重沃呢,暫時卡了而已。11平臺可能做了一些優(yōu)化拆挥,將其他玩家的操作指令保存起來薄霜,等延遲穩(wěn)定的時候再發(fā)送給我們。但由于此時我們電腦所處的turn可能落后了其他玩家,所以此時游戲就會像快放一樣趕上其他玩家的進(jìn)度黄锤。如果是真的掉線搪缨,如停電、程序崩潰等直接退出的情況鸵熟,我們是無法重新加入游戲的副编。

4.Warcraft III是不是使用嚴(yán)格的Lockstep機(jī)制?

接上一個問題流强,如果Warcraft III是嚴(yán)格的Lockstep同步機(jī)制痹届,那么一定會出現(xiàn)一人卡、大家都卡的情況打月,而事實(shí)上只有當(dāng)我們是主機(jī)時才會出現(xiàn)這種情況队腐,其他情況下我們延遲高甚至掉線都不影響其他玩家的操作。

因此奏篙,Lockstep實(shí)際是一種理想的模型柴淘,如果在實(shí)際中使用會造成非常差的用戶體驗(yàn)。那么Warcraft III使用的到底是什么同步機(jī)制呢秘通?參考What every programmer needs to know about game networking這篇文章后面一個評論的說法

TOADCOP
FEBRUARY 10, 2010 AT 9:15 AM
btw afaik StarCraft don’t use peer-to-peer it uses client-server model with lockstep (at least warcraft 3 does so). It has the advantage what theoreticaly laggers will not affect gameplay/response latency at all (but to not let them fall behind server do timeouts so the lagger can catch up, also doing temporary local game speed increasing) and imo it’s the only and true way to do sync in RTS like games. (and for some reasons this technic isn’t good covered in the web)

然后是作者的回復(fù)

GLENN FIEDLER
FEBRUARY 10, 2010 AT 10:20 AM
You are correct. Also something cool is that in a C/S RTS model the server could also theoretically arbitrate to ignore turns from lagging players, and kick them if they don’t catch up – removing various exploits where you can time-shift your packets and lag out other players.

也就是說Warcraft III使用的是基于Client-Server的Lockstep模型为严。這就是為什么Warcraft III中有主機(jī)這個概念,當(dāng)然這里主機(jī)的作用并不是完成所有計(jì)算肺稀。

(以下為個人觀點(diǎn))
Warcraft III中的主機(jī)的主要功能是廣播并設(shè)置timeout第股,也就是說在每個turn內(nèi),游戲玩家并非直接將自己的操作指令廣播給其他玩家话原,而是先發(fā)送給主機(jī)夕吻,由主機(jī)負(fù)責(zé)廣播,且每個turn都有timeout繁仁,如果超過了timeout仍然沒有收到某個掉線玩家的操作指令涉馅,則忽略該玩家在該turn的行為,即認(rèn)定他什么都沒有做改备,并與其他延遲正常的玩家同步進(jìn)入下一個turn控漠。而當(dāng)?shù)艟€玩家網(wǎng)絡(luò)恢復(fù)時,主機(jī)會將之前保存的turn中操作指令集合發(fā)送給該名玩家悬钳,而該名玩家為了趕上進(jìn)度盐捷,就會出現(xiàn)游戲快放的情況。

所以Warcraft III中只有在主機(jī)延遲高或掉線時默勾,其他玩家才會受影響碉渡,否則不受影響。在局域網(wǎng)中母剥,如果主機(jī)是正常退出的滞诺,那么會選定另一玩家電腦作為主機(jī)形导,如果是崩潰退出的,則所有人都會直接掉線习霹。至于在對戰(zhàn)平臺上是否有優(yōu)化就不太清楚了朵耕。

五、總結(jié)

Lockstep是出現(xiàn)較早的一種同步機(jī)制淋叶,不過現(xiàn)在很多RTS游戲中依然能夠看到它的影子阎曹,當(dāng)然都對它進(jìn)行了一定程度的改進(jìn)。

國內(nèi)關(guān)于游戲編程和網(wǎng)絡(luò)同步的教材煞檩、文獻(xiàn)寥寥無幾处嫌,不知道是文化因素還是什么其他原因,難道與游戲相關(guān)的技術(shù)都是玩物喪志斟湃、不學(xué)無術(shù)熏迹?

在我查詢資料的過程中,發(fā)現(xiàn)國外不僅有游戲編程和網(wǎng)絡(luò)同步的理論教材凝赛,還有大學(xué)開設(shè)的游戲課程注暗,甚至還有碩士論文是關(guān)于設(shè)計(jì)一個MMORPG游戲的……看看國外繁榮的游戲(使命召喚、刺客信條哄酝、魔獸世界)友存,再看看國內(nèi)繁榮的游戲市場(頁游?手游陶衅?),看看國外知名的游戲公司(Blizzard直晨、EA搀军、UBISOFT),再看看國內(nèi)知名的游戲公司(……企鵝勇皇?)

這里不是想黑什么罩句,而是覺得計(jì)算機(jī)作為一門多樣化的學(xué)科,我們不能固步自封敛摘,排斥其中的一些東西门烂。有人說研究游戲有什么用?真的沒用嗎兄淫?看看下面這些應(yīng)用

  • 網(wǎng)絡(luò)游戲中廣泛應(yīng)用的航位推測法(Dead Reckoning)美國軍方也在使用
  • 游戲中的自動尋路算法屯远,在機(jī)器人和自動駕駛中也有應(yīng)用
  • 游戲中的決策與博弈論也有關(guān)聯(lián)
  • 游戲服務(wù)器集群之間的負(fù)載均衡與一致性,和現(xiàn)在熱門的大數(shù)據(jù)息息相關(guān)

雖然不一定是由游戲本身推動的捕虽,但是這些研究之間是相輔相成的慨丐,不會做無用功的,何況游戲本身就是增加GDP的一個好手段╮( ̄▽ ̄)╭

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泄私,一起剝皮案震驚了整個濱河市房揭,隨后出現(xiàn)的幾起案子备闲,更是在濱河造成了極大的恐慌,老刑警劉巖捅暴,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恬砂,死亡現(xiàn)場離奇詭異,居然都是意外死亡蓬痒,警方通過查閱死者的電腦和手機(jī)觉既,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乳幸,“玉大人瞪讼,你說我怎么就攤上這事〈舛希” “怎么了符欠?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瓶埋。 經(jīng)常有香客問我希柿,道長,這世上最難降的妖魔是什么养筒? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任曾撤,我火速辦了婚禮,結(jié)果婚禮上晕粪,老公的妹妹穿的比我還像新娘挤悉。我一直安慰自己,他們只是感情好巫湘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布装悲。 她就那樣靜靜地躺著,像睡著了一般尚氛。 火紅的嫁衣襯著肌膚如雪诀诊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天阅嘶,我揣著相機(jī)與錄音属瓣,去河邊找鬼。 笑死讯柔,一個胖子當(dāng)著我的面吹牛抡蛙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播磷杏,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼溜畅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了极祸?” 一聲冷哼從身側(cè)響起慈格,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤怠晴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后浴捆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒜田,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年选泻,在試婚紗的時候發(fā)現(xiàn)自己被綠了冲粤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡页眯,死狀恐怖梯捕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窝撵,我是刑警寧澤傀顾,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站碌奉,受9級特大地震影響短曾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赐劣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一嫉拐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魁兼,春花似錦婉徘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碉考,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挺身,已是汗流浹背侯谁。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留章钾,地道東北人墙贱。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像贱傀,于是被迫代替她去往敵國和親惨撇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容