整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          邊學邊玩 零基礎也能學編程

          見了,新華電腦學校;再見了,北大青鳥;再見了,山東藍翔……在線教育鋪天蓋地的年代,學習編程也可足不出門。有了這些編程網站,從計算機小白變身專業“程序猿”不是夢!

          Made With Code:美少女專屬編程學習站

          給我一個學習編程的理由,Made With Code算嗎?顏色粉嫩的界面,結合了流行音樂和電影的課程內容,打開這個網站本身就是一種妙趣橫生的享受。

          Made With Code提供面向女性的編程項目、故事和資源等。該網站目前提供了13個編程科目,其中也不乏一些有意思的“課程”。例如讓“程序媛”們通過代碼來設計一 款屬于自己的手鏈,隨后這個手鏈會被 3D 打印出來并郵寄給她們,又或者是通過程序來為“憤怒的小鳥”設計一些動作,這種寓教于樂的方式對枯燥的編程過程顯然是有益的。同時網站還有自己的社區,讓 有志于或已經成為“程序媛”的萌妹子們可以暢所欲言,交流學習和職場經驗。

          一個好消息是,Google近期斥資5000萬美元投資了該網站,以鼓勵更多的年輕女性進行編程學習,這算不算是變相給硅谷的IT男們發福利?

          網址 www.madewithcode.com

          語種 英文

          萌碼:搭上你的編程“時光機”

          萌碼被稱為中國版的Codecademy(國外最大的編程學習網站),因為兩者實在太像了。二者從功能到界面都近乎一致——左側欄的幾段話是知識點講 解,講解后有一個小練習,右側有一個在線編譯器。學習者可以在學習了知識點后,根據自己的理解在右側輸入代碼來完成任務,代碼輸入正確才可“運行”,運行 后才可順利進入下一課。

          如果用戶在學習過程中碰到問題,可以在 “提問”欄中輸入自己的問題并且提交。萌碼還有一個很有趣的功能叫“時光機”,它能讓用戶回放每一個編程步驟,看每一步的程序運行過程和結果,并以圖形化 方式顯示,這樣用戶可以清晰地理解每一步的含義,并找出代碼出錯的地方進行修正,從而避免在未來的編程過程中再犯類似的錯誤。

          網址 www.codecademy.com

          語種 中文

          實驗樓:編程從打地鼠開始

          網址 www.shiyanlou.com

          語種 中文

          其實標題有點夸張,對于零基礎用戶來說,一秒學會打地鼠顯然是不大可能的。不過在線課程,不但要好用,還得好玩。

          實驗樓同樣提供了 Linux 基礎入門和Python 編程語言的學習課程,但別具特色的是,它還有不少項目課程,讓用戶邊學邊練。例如,Javascript打地鼠、pygame開發打飛機游戲。并且,實驗樓有個專門的頁面來統計用戶學習的過程。

          更重要的是,它提供給用戶的不僅是一個簡單的在線編譯器,而是一臺或多臺配置好的虛擬機,可以支持更廣泛的 IT 內容學習,不再局限于編程領域。

          實驗樓是基于阿里云,面向計算機相關專業學生及 IT 從業者的在線實驗工具,這使得在線實驗的應用范圍得到極大的擴展。在“實驗樓”中,用戶可以體驗到多樣的在線實驗內容。不但可以練習編程,哪怕是想要開發 一個網站,從選擇技術框架、架設服務器、設計數據庫,到開發前后端、上線網站,這些都可以在實驗樓進行實踐。

          文首發騰訊游戲學院 2021年、2020年


          <多人PvP射擊游戲融入開放世界玩法>地圖與關卡設計要點

          作者:Reese 騰訊互動娛樂 項目管理

          當多人PvP射擊游戲融入開放世界玩法,會產生怎樣奇特的變化?在眾多成熟的同類作品中,我們又該如何分析它們的地圖與關卡設計?本篇文章將以“間隔+道路+區域POI”這一結構為切入點,進行深度分析。


          *注:本文是從“間隔+道路+區域POI”角度對開放世界LD的分析,而非設計框架與思路。


          一、概述


          1.1 為什么要開放世界?


          當大家都在為塞爾達吶喊時,我在海拉魯大地里走路,走到了九月九,依然不知去哪做任務,于是我把它當成了《海拉魯馬匹駕駛模擬》,以完成一個歐卡老司機的使命。其實,PvE開放世界的好處顯而易見,創造一個足夠大的世界任由玩家探索主宰,提供不同的場景給人以新鮮感,于是時間悄然而逝。


          而在射擊領域,曾經在Dust2里就繞暈的我,面對龐大的PUBG反而又找到了駕駛員的樂子,于是,開始沉思多人PvP槍戰游戲世界開始變得開放的好處到底在哪?



          相比于傳統小地圖射擊游戲,開放世界在空間和時間上給了玩家更多富余,因此提高了多樣性與自由度


          • 空間:包含多種傳統關卡的大容器。
          • 時間:完成目標的時間限制更寬松。


          且富余的時間與空間可孵化單局內更多的動態變化


          (e.g. 20平米的公寓干不了啥,只能躺著switch,甚至just dance都嫌擠;有個大別野就不一樣了,院子、臥室、客廳、廚房,體驗一下子就豐富了起來,甚至可以叫上一百人來開party)


          1.2 多人PvP開放世界射擊游戲主要模式


          從下表里可以看出,類比傳統FPS,不僅世界開放了,目標也開放了,那人也能更開放了吧?



          1.3 開放世界射擊游戲題材與Z軸關系


          剛才說到空間上的開放,其實除了平面地圖面積的變大,還有一個很重要的維度就是開放了Z軸(房屋、山谷、高塔等)給游戲帶來了多一層次的體驗。相對而言,寫實類在Z軸的移動性會低于科幻、魔法類,畢竟普通人也不能飛吧。



          1.4 以“間隔+道路+區域POI”的結構來看地圖



          舉個例子:假如把CS的各個經典地圖都塞進一個大世界里,每個關卡作為一個區域,放置的時候在這些區域之間留下一些間隔,最后用大馬路連接起來。一個世界,N張地圖,美滋滋啊。


          1.5 以“間隔+道路+區域POI”的結構來看PUBG





          二、宏觀角度


          2.1 整體結構



          觀看戰地與Fortnite的地圖,第一眼是不是首先會沿著大路看?




          2.2 玩家記憶地圖序列



          2.3 區域間隔


          Apex的地圖是最與眾不同的,因為其沒有道路連接區域。其中的原因是Apex不同區域之間間隔較小,玩家可以游走于區域之間,無需道路引導,且其利用峽谷等地形構建了很多天然道路。




          2.4 區域與世界的關系


          區域是主要交火發生的地方,也是玩家主要的遭遇點。




          2.5 區域評級與權重


          并不是所有區域都那么值錢,就像城市也分為市中心與鄉下一樣。頭腦風暴了一下,一個區域的好壞可以由以下幾個維度來評判:


          • 資源數量:戰術競技類游戲中的裝備、其他游戲里與規則相關的關鍵資源(e.g. Hunt: Showdown里Boss)。
          • 交通便捷度:是否位于咽喉路徑(一夫當關萬夫莫開)、是否位于交通樞紐(地圖中心四通八達)。
          • 遭遇可能性:其實這是個因變量,也可以理解成風險或制約因素,資源+交通的優越性決定了區域遭遇敵人的風險程度。


          舉例:記得曾經年少時,朋友因為帶不動我,所以老是在戰術競技類游戲里帶我跳地圖中心有一個會刷車的地方。這個區域就可以理解為“特殊資源”+“交通便捷”,但這個特殊資源對于比賽獲勝來說重要程度一般,因此跳那個地方的遭遇風險不算高。




          2.6 重點區域/主要遭遇點


          定義


          “對游戲結果具有戰略意義;玩家為獲取優勢,自愿聚集于此;由于游戲機制設定,玩家必須前往此地。”



          重點區域分布


          既然區域有高低貴賤之分,那么為了維持全圖的均衡性,自然需要有一個合理的分布。不然人往高處走,水往低處流,階級差距就越來越大了呀!因此在安置重點區域時,需要注意:


          • 錯綜有序,肥瘦均勻:注意群落的平衡性。
          • 不要忘了在偏遠處放置:為確保大地圖有存在意義,應盡量確保偏遠地區也有玩家前往,激活地圖;如果玩家只聚集于開放世界的局部地區,那么就不“開放”了。
          • 關鍵區域公平可達性:在制定關鍵區域分布時,需考慮平衡不同玩家到達關鍵區域的難度、時間。
          • 且此方法可以成為一個過濾器:熱愛鋼槍/偏好風險的玩家會聚集于此;休閑玩家則會避免主動前往,從而避免風格不同造成體驗失衡。


          重點區域類別


          • 固定:每次單局不會變化,例如固定任務點、大概率會出現豐富資源處、交通樞紐。
          • 需要在設計時就有意識放置,重點區域位置會引導玩家分布。
          • 需重點進行關卡設計,促進戰斗多樣性,提高區域重玩性。
          • 局內玩家行為隨機觸發:主要在于觸發行為的設計與分類,重點在于隨機性。


          2.7 垂直區域-Z軸




          2.8 一些其他參數



          From: https://www.sportskeeda.com/esports/pubg-map


          三、微觀角度


          3.1 區域空間特性


          • 環境:區域主題、基調與色彩、地形、主要材質、建筑風格、開放度、視線范圍、燈光(e.g. 在一次分享上聽到的生動例子:迪士尼公園里的不同子區塊)。
          • 結構:整體形狀、道路分布、建筑分布、室內復雜度。
          • 邊界:區域出入口、區域是否有硬邊界;開放區域更容易遭遇、更難防守;半開放區域入口更少,更易防守;邊界也可阻擋視野范圍,避免過多信息干擾。


          最重要的一點:讓這個區域具有區分度與獨特性,便捷記憶且提供差異化體驗。



          3.2 區域戰術特性


          路徑


          區域內部路徑更類似傳統射擊游戲中的的關卡設計,但由于開放世界的開放性,玩家在室外對路徑的選擇會更為自由,路徑起到的戰術作用會有所降低。


          地形


          • 水平:開闊程度,開闊->更難脫戰,正面火拼;隱秘,掩體更多->利于脫戰,更多追逐與微戰術選擇。


          舉例:建筑/掩體排列方式、密度。


          • 垂直:占領制高點會帶來視野優勢,低洼處會有劣勢;且利用z軸上的差異,對玩家射擊要求更苛刻,使玩家的身位更難預測。


          舉例:山坡、房頂、陽臺、特殊高型建筑。


          掩體


          • 抵擋傷害:實掩體-背坡、樹、石塊、墻壁、載具;半掩體(可穿透)-木箱。
          • 阻擋視線:草叢。
          • 分割戰場:使玩家行為不可預測,增加戰斗多樣性。(舉例:PUBG名場面,兩個對手圍著大石頭互相繞后。


          *人為制造掩體:技能/載具、fortnite。


          核心要義:使玩家行為不可預測,使戰術選擇更有多樣性,使戰斗更具有深度。



          3.3 區域戰斗特性



          • LD應根據不同戰斗場景設計不同戰斗區域,并且使這些區域于世界內均勻分布。
          • 不同戰斗區域特性需為整體游戲戰斗節奏/戰斗風格服務,且資源/Loot等相關系統需配合戰斗場景(e.g. PUBG跳傘前期容易拿噴子CQB殺人)。
          • 在戰斗過程中,玩家只存在兩種角色:攻守方/明暗方。
          • 一個好的關卡,在于其:能支持多少戰斗形式/能支持多少種戰術行為。

          3.4 關鍵路徑/咽喉路徑

          指的是:連接兩塊獨立區域的獨有路徑,玩家最優解只有這幾條(<=2);這些路徑通常較為狹長,戰斗方式類似于巷戰。


          此地易守難攻,一夫當關,萬夫莫開,因此需平衡攻守難度。


          攻方戰術:需利用投擲物突進/多點分散進攻


          舉例:島嶼與大陸之間的橋梁、兩座大山之間的峽谷。


          需為攻方提供備選方案,但要付出更高的時間代價


          舉例:游泳過河、翻山越嶺,但偶爾也會給一些驚喜,比如小船。




          3.5 任務點


          在任務點只有兩種角色:完成任務方/守株待兔方。


          • 任務過程抽象


          到達任務點-需要一段時間操作(最易受到攻擊)-防守一段時間/攜帶東西離開;總體而言,守株待兔方會更有優勢(在暗處),因此需給進攻方更多路徑選擇=不能讓防守方堵住所有的路。


          • 防范老6


          任務點旁不可有上帝視角位置;對于在任務點旁蹲點的位置,必須有制約方法(e.g. 增加后路,給老6增加視覺盲區)。


          • 任務位置需要被強調,足夠明顯


          任務點為核心交戰地區,需要有足夠的標識來吸引玩家聚集;且明顯地指引玩家完成任務,而非在任務點附近迷失。


          舉例:PUBG發著紅煙的空投


          • 不同階段任務分布


          在完成主任務的途中分布一些輕松的小任務來給玩家找到事做;且子任務也可以作為引導方式的一種。


          舉例:塞爾達在主任務途中穿插一些mini game來“開放”地引導玩家走具體的路徑。


          四、地標與導航


          4.1 全局視野


          全局地標


          作用:讓玩家不用打開大地圖就能快速判斷自身方位,一種更自然快捷的交互方式。


          • 很高,遠距離可見的建筑物


          舉例:城市地標,看到電視塔就知道城市的方位;塞爾達的神塔。


          • 懸浮于空中的自然物


          舉例:看太陽位置來辨別方位;APEX兩只奇怪大龍。



          地區位置


          • 區域具有足夠的符號化與風格化,用大眾普遍可以認知的事物包裝。
          • 不同區域需要具有顯著的差異化,方便記憶;如果不同區域過于相似,則無法快速記憶。
          • 玩家可以通過記憶區域在地圖的大概位置來判斷自身方位。(舉例:PUBG學校在地圖中心位置;機場在地圖底端。


          4.2 區域內部指示


          區域內部的小路更多,且可能更為迂回,玩家容易迷路,因此需放置一些抓人眼球的東西,來作為道路引導/標記具體地點;且具體的實體,可以更方便隊友報點。


          • 涂鴉/路標-CS在岔路口有明顯的A/B指示特殊物品
          • 特殊物品-利用非對稱的物品指示方向:車頭向北




          參考文獻

          “Ben's small bible of realistic multiplayer level design” by Benjamin Bauer 2014

          以及shane、charlie兩位同事對文章給出的補充和建議



          PVP玩家特別在意!FPS游戲關卡平衡性分析

          作者:Edward 騰訊互動娛樂 游戲策劃


          本文重點分析PVP FPS游戲中的平衡性對于游戲的意義,以及如何使用博弈論概念,對游戲的平衡性進行設計和分析。本文不涉及很多高深的理論和公式推導,只是較淺層的將博弈論現有研究和游戲的設計經驗進行了一定的結合。文中所提到的游戲,均指如CS、COD等的PVP FPS游戲類型。



          01)平衡性:是什么?為什么?



          a) 平衡性是什么


          平衡性早就不是個新鮮的概念。在雙人對抗游戲中,一個游戲平衡的定義是在參與者水平相同,并對游戲的勝利規則都完全理解的情況下(即理性人),多局游戲中兩人的獲勝概率均為50%;而在n人或n隊參與的對抗的游戲中,情況會稍顯復雜,仍從勝率角度看,每人或每隊的應該在1/n。平衡性就是衡量對局是否能達到設計勝率的參數。



          b) 為什么游戲關卡需要平衡性設計


          從孩提時的游戲我們就能意識到,在一場與人對抗的游戲中,如果規則或者參與人員不平衡,游戲都會變成毫無意義的活動。試想在“剪刀石頭布”中,剪刀變成了可以攻陷所有防御的工具,那么所有玩家都會選擇剪刀了。


          “游戲是有意義的選擇(Meaningful Choice)” ,在PVP游戲中,每個人都沒有必勝的選擇,此時游戲的無法預測性,更突出了與人博弈的快樂。



          c) 博弈論與平衡性


          平衡性是一個對抗游戲的基礎,下面我們嘗試從博弈論的角度解釋為什么平衡性在對抗游戲中如此重要。


          博弈論(GameTheory)屬于經濟學的二級學科,一個完整的博弈應當包括五個方面的內容:第一,博弈的參加者;第二,博弈信息,即博弈者所掌握的對選擇策略有幫助的情報資料;第三,博弈方可選擇的全部行為或策略的集合;第四,博弈的次序,即博弈參加者做出策略選擇的先后;第五,博弈方的收益,即各博弈方做出決策選擇后的所得和所失。


          而PVP游戲中玩家就是博弈的參加者;玩家了解到游戲規則和戰場情報是博弈信息;玩家做出的各種選擇,是博弈論中的行為和策略;玩家的行為順序屬于博弈次序;而玩家因選擇不同而游戲目標完成情況則是博弈論中的收益。可見,Game Theory正如其名,實際上也可以用來分析一場游戲的整體或局部的博弈情況。


          博弈有四種基礎模型:靜態完全信息博弈,動態完全信息博弈,靜態非完全信息博弈和動態非完全信息博弈。信息是否完全要看參與者是否對規則和戰場情報完全了解(是否實時的了解規則和其他的玩家選擇),而動態和靜態的區別主要在于,靜態是單次的博弈,沒有后續博弈,動態則相反。


          在PVP FPS游戲中,如CODM手游的幾個經典MP模式,其博弈可以抽象為動態非完全信息博弈。


          博弈論中,最重要的目標是研究一場博弈的解,也被稱為博弈均衡時的策略。一場“平衡”的游戲,其實就是博弈均衡時,玩家的收益應該相等。無論收益正負還是零,相等即為“平衡”。在多人博弈中,用隨機來制造平衡是一個常見的設計手段。


          在傳統的雙隊對抗的PVP游戲追求的都是通過關卡設計、玩法設計以及匹配系統,來保證游戲的博弈均衡是一場能夠分出輸贏的零和博弈,即一定有一個勝利方和一個失敗方;當然隨著設計師們對玩家心理的把握,也有讓AI成為失敗方來調節玩家體驗的方法,我們暫且不在此展開。


          當游戲達到博弈均衡時,此時所有理性參與者都都愿意維持現狀(穩定狀態的),而不愿意改變行動,因為一旦改變行動就會讓自己的收益變差。那游戲該如何進行下去呢?


          這就要靠游戲機制了。像是勝利條件等機制都是在逼迫玩家從博弈均衡狀態中脫離,在不完全信息的動態博弈中,掌握了更準確信息的參與者會有更大幾率獲得勝利。再有,實際上博弈均衡的假設是基于參與者的完全理性的,在實際游戲中,參與者的狀態、心態一定是不斷變化的,這便是游戲中“與人斗,其樂無窮”的意義了。


          總而言之,一個博弈均衡時玩家收益是否相等,就是游戲平衡的判斷標準。而游戲機制就是要不停的把玩家推離均衡點,來造成局部或廣泛的動態非完全信息博弈過程。


          02)通過關卡設計影響平衡


          研究平衡性設計,就要先知道是什么導致了不平衡。



          a) 收益、信息與策略


          一個理性玩家(清楚所有游戲規則)在游戲中的博弈過程,可以簡化成:“收集信息->形成策略->獲得收益”的循環,通過游戲關卡設計,可以對這三個維度進行干預和調整,就可以直接影響到游戲的平衡設計。


          i. 收益不同造成的不平衡


          清楚不平衡的來源后,我們要站在平常在工作中,一個關卡設計師最常做的事就是對場景中掩體的擺放不停推敲;掩體就是最直接造成玩家收益不同的玩法元素。


          圖2.1 不平衡的區域設計


          在如圖所示情況中,站在掩體后的玩家占有明顯的優勢,在這種局勢下,誰能最先搶占到掩體后點位,誰就能更大概率的殺死敵方玩家,是典型的不平衡的設計。


          如果想平衡這一場景,有很多方法。最簡單的是給該空間內對稱位置放置一個相同的掩體,只要保證玩家進入掩體的時間相等,空間對稱就一定是絕對平衡的了。但是在大多數游戲的設計中,往往不會采用這樣簡單粗暴的方法。因為這既不真實,又容易造成玩家對方位的迷惑。


          圖2.2 對稱設計的掩體,失去了真實性和引導性。


          除了掩體類型,還有高低差也會造成玩家的收益不同。與半身掩體一樣,搶占到高點(無論是窗還是臺)的玩家,都占有更大的收益優勢。


          圖2.3 二樓窗邊的玩家,露出了更少的身體,也處于需要移動視角才能看到的位置,所以更有優勢


          在相同時間可以抵達的關鍵玩法區域中,如果一方暴露了更少的軀體部分(Hitbox),那么他的收益一定是大于暴露了更多的。上述半身掩體、高低差的方法都是常見的制造不平衡的收益的方法。


          顯而易見,在一個平衡的對局中,多打少也會造成收益上的不平衡。往往人數不平衡的對局,就需要在角色基礎屬性上做更多的調整,以及機制上做隨機,以保證沒有人有必勝的策略。


          ii. 信息差造成的不平衡

          信息差在平衡性設計中也扮演了重要的角色。生活中常見的形成信息差的結構就是單面玻璃。


          圖2.4 一面是玻璃,一面是鏡子的單向玻璃


          而在FPS游戲中,最常見的由信息差(在這里主要是視差)而造成不平衡的設計是通道轉角。


          圖2.5 由視差帶來的不平衡的通道轉角


          假設玩家A一定要通過轉角,同時右邊的敵人,玩家B也知道這一信息,那么當玩家A的通道比較狹窄時,玩家A的視角如下圖:


          圖2.6 由視差帶來的不平衡的長通道轉角


          而玩家B的視角如下圖:


          圖2.7 由視差帶來的不平衡的長通道轉角


          也就是說,在玩家A轉向看到玩家B之前,B玩家就早已看到了玩家A露出的身位了。這種情況在現實的作戰中也是常常存在的,由此產生了應對的CQB轉角戰術,即:通過通道轉角時,一定要貼近轉角外側,并收起武器,以減少視差帶來的影響。


          圖2.8 CQB轉角戰術


          而另一種常見的利用信息差獲取優勢的方法是“背后的威脅”。如下圖所示場景中,在二樓的敵人是不容易注意到從左側斜坡走上來的玩家的,這就產生了信息差,因為他更可能去注意他的優勢防守區域,即視野正前方。


          圖2.9 “背后的威脅”——玩家視野外的門


          假設我們的游戲是完全信息的,一個理性的玩家是可以意識到敵人和可能會從房間中的門來攻擊自己,自然也會分出精力來關注門口的情況,甚至在門口架設闊劍地雷。而樓下的敵人則可以趁玩家關注門口的空擋(隊友信息或無人機等),來到窗口下方,打到二樓玩家背身。


          可以看到,一個玩家視野外的門,就造成了如此豐富的博弈結果。我們假設這個信息差不存在,那么這個關卡會變成怎樣呢?


          圖2.10 玩家視野內的門


          二樓的玩家會因為提前搶占了這一位置,在這區域內變成“無敵”的。沒人可以在二樓玩家眼皮底下爬上樓來清掉這個點,也沒有人敢從樓下的空地穿過。這樣的點位除非有特殊設計目的所在,否則便是很破壞游戲體驗的設計。


          以上的例子,可以看出“背后的威脅”存在的意義。


          iii. 策略多寡造成的不平衡


          策略(也有翻譯為戰略)在博弈論中指的是針對博弈的某一階段,參與者可以進行的選擇。在FPS游戲中,這種可選策略的數量,也影響著對局的平衡。


          圖2.11 猜猜我在哪?


          一種更常見的以策略多寡來造成的不平衡的方法是多窗口的建筑。如下圖所示。


          圖2.12 有很多進攻窗口的建筑


          下圖所示的情況就是CODM游戲中令很多玩家崩潰的場景,如果此時該玩家沒有任何其他掩體,存活的可能性微乎其微。


          圖2.13 Crossfire 打地鼠



          b) 平衡性與游戲性


          游戲經驗豐富的讀者一定發現,實際上雖然“不平衡”確實對游戲性有很大的傷害,但是在很多FPS地圖中處處都充斥這種不平衡設計,這該如何解釋呢?


          我們可以先來看看以絕對平衡聞名的關卡地圖設計。



          i. 絕對平衡的關卡設計


          絕對平衡的關卡,換句話說就是對于對抗雙方,所處的位置環境和到關鍵點的距離全都相同。從結構來看,絕對平衡的關卡,一定是對稱結構的。再加上對稱的復活/出生規則,以及其他對參賽雙方完全相同收益的規則,就組合出了一個絕對平衡的游戲模式。


          在FPS發展的歷史長河中,出現過不少的大小不一的絕對平衡的關卡地圖,其中最出名的當屬iceworld。


          圖2.14 iceworld


          這種簡單重復的結構,加上較小的面積,作為練槍圖是最合適不過了。摒除了地圖理解和團隊配合,每個玩家都可以單純以槍法一決雌雄。


          這種極端的關卡,有些“大巧不工”味道在里面。但不可忽視的是,FPS游戲雖然槍法是核心的玩法,但不是唯一的玩法。關卡設計師如果在大面積的地圖上也使用簡單的對稱結構,往往也會被玩家抱怨“偷懶”和“無聊”。畢竟一個哪里都一樣的地圖,既不方便玩家判斷自己所在位置,有沒有任何體驗上的驚喜。(甚至玩家游戲輸了以后,也少了一個“這個地圖玩的少”的甩鍋理由…)


          但是,在較大型地圖的核心區玩法域應用對稱結構,再輔以一些美術包裝,也可以制作出經典的地圖。例如下圖所示的COD黑色行動系列Meltdown。感興趣的讀者可以查閱該圖的設計,或者下載CODM手游自行體驗。


          圖2.15 Meltdown


          這里有個邏輯提醒讀者注意,絕對平衡的關卡設計一定是對稱的設計,但對稱的設計不一定絕對平衡。這一點我們將在下一小節說到。


          ii. 不平衡會為游戲帶來什么?


          事實上,大部分FPS對戰地圖都是非平衡的設計。不過這里我們要明確,所有的關卡都是要避免絕對不平衡的。


          正如上文所提到的剪刀石頭布,剪刀永遠可以勝利的例子,如果玩家理性并且都可以選擇剪刀,那這場游戲就會變成一場永無止境的平局。在博弈論中,這種情況被稱為絕對優/劣勢解。在游戲中,如果有存在圖2.10的結構,哪怕地圖是對稱的,這種絕對的不平衡就會帶來每個理性玩家,都沒有理由離開這個結構去冒險進攻。嚴重情況,游戲的節奏會被嚴重拖沓甚至無法進行下去。


          為了游戲體驗的豐富多樣,且可以正常進行,讓游戲除了比拼槍法外,還存在一定的策略性(分路、特定武器優勢點、站位等),局部相對不平衡的設計是必要的。而為了減少地圖對游戲機制的依賴,增加關卡的重玩性(避免玩家分到某隊就退出游戲),整體的平衡也是必要的。


          局部不平衡的設計技巧,可以從空間上和時間上兩個維度考慮。


          空間上:提供可解的不平衡


          如下圖實際上是一個典型的策略多寡造成的不平衡區域:玩家如果想穿過橋洞,就要面對來自三個不同地方的威脅。但在COD16中,關卡設計師通過地形上的土坡結合玩家動線,巧妙地將這種威脅一一化解了。


          圖2.16 COD16 幼發拉底橋


          想象玩家從圖中左側移動到右側,三處不同的威脅就會按照圖中標示的1、2、3順序依次出現。這也就給了玩家一個可以化解不平衡的方法。


          類似的設計還有很多,上文中提到的圖2.9-10也是個例子。感興趣的讀者可以在以后的游戲中多多留意。


          時間上:拒絕永恒不平衡


          在有攻守的模式中,防守方往往會先占據一定的優勢;但一旦進攻方突破了某條防線或者關鍵區域,整個游戲“攻守互換”,勝利的天平就又會倒向進攻方。典型的應用了這個思路的游戲模式就是爆破模式。


          一個典型的爆破模式,一般為兩隊對抗。游戲可以分為三個階段:開局戰術實施階段、下包前對抗階段、下包后終局階段。根據統計,爆破模式在比賽的前兩個階段時,防守方勝率是高于進攻方的。而在比賽進行到下包后階段,攻守互換,進攻方的勝率會再次高于防守方。


          為了證明這樣的比賽仍然可以做到整體的平衡,我們假設一場爆破比賽的前兩個階段,防守方勝率為70%,進攻方為30%;下包后,防守方勝率為30%,進攻方為70%,而進攻方下包率40%;根據貝葉斯定律,我們知道:


          防守方勝率 = 70%*(1-40%)+30%*40% = 54%

          進攻方勝率 = 30%*(1-40%)+70%*40% = 46%


          可以看出,攻守雙方的勝率已經非常接近了。當然,由于這里忽略了下包率與勝率是有一定關聯的,概率并不獨立,所以只能以此作為一個近似計算。


          不過在真實的游戲中,在任何階段,兩方的勝率差如果像上述例子一樣大,往往說明某一方確實占據了非常有利的位置;這時就體現出了爆破模式的另一個精妙所在——設計師用兩個或以上的爆破點,配合5~6人的參賽人數,讓兩方隊伍可以利用信息不對稱,在不平衡的局部關卡中充分斗智斗勇。


          iii. 小結


          局部的不平衡而整體平衡的設計,是關卡設計中最體現一個設計師想法和能力的地方。在繁冗的3D空間,規劃玩法空間;結合游戲玩法,設計關鍵點位;最終讓玩家在看似不事雕琢的環境中,自得其樂,是一個此類游戲關卡設計師最高的追求之一。

          總結


          一個完整的游戲模式玩法,僅靠關卡是無法保證平衡性的。局外機制如匹配、Ban&Pick,局內機制如隨機位置復活、半場換邊等,共同構建了游戲起了游戲這個復雜的不讓任何一方占優的動態非完全信息博弈體系;游戲通過勝利條件將玩家推離博弈平衡,讓參與的玩家都可以根據自己對游戲的理解,構建自己的:信息->策略->收益循環,不斷根據動態的場面情況,來與對手玩家斗智斗勇。


          在實際設計應用中,不但要通過定性來判斷場景、關卡的平衡性,還需要通過用戶研究、線上測試等方法,定量分析,切實的統計與模式相關的平衡性數據信息。隨著近年AI技術的發展,使用機器學習Agent模擬人類玩家行為,提前發現未上線的地圖、模式的問題的方案也很多游戲中有落地應用了。


          最后我想說,將游戲設計中的規律形成方法,經驗形成理論,在此之中抽象游戲最本質的模型(meta-game),不僅可以指導項目的設計方向,對行業的創新與發展也一定大有裨益。


          Reference:

          1. 博弈論基礎,羅伯特·吉本斯

          2. 對抗類游戲平衡性評價與環境預測方法,https://www.youxituoluo.com/522527.html

          譯局是36氪旗下編譯團隊,關注科技、商業、職場、生活等領域,重點介紹國外的新技術、新觀點、新風向。

          編者按:Marc Andreessen十年前說的“軟件蠶食世界”不僅完全正確,而且似乎不僅如此:軟件正在重塑世界。人類世界的運轉已經無法離開軟件。在浩如煙海的軟件代碼當中,哪些對我們起到了關鍵作用呢?Slate網站邀請了各方人士對那些改變了一切的代碼進行評選,這里篩選出36個代碼片段。如果你有更好的選項,不妨在評論區留下你的意見。原文作者是Future Tense,標題是:The Lines of Code That Changed Everything。鑒于篇幅太長,我們將分三部分刊出,此為第一部分。

          早在2009年,Facebook推出了改變世界的代碼段——點“贊”按鈕。“贊”是幾名程序員和設計師的創意,其中包括Leah Pearlman和Justin Rosenstein在內。他們推測,Facebook用戶常常因為太忙而沒時間到朋友的帖子上發表評論,所以想如果有一個簡單的按鈕可以按一下的話,也許互動就會爆發:這可以釋放出大量令人興奮的肯定。就像Pearlman 后來所說那樣:“朋友們可以通過這種頻繁的多、容易得多的互動手段來相互驗證。”

          這個點子奏效了,也許有點太好了。通過把“贊”做成一個零阻力的手勢,到了2012年,大家的點贊次數已經超過1萬億次,并且的確釋放出了大量的驗證。但是它的副作用也令人不安。我們發布了一張照之后片,就會坐在那里焦急地不斷刷新頁面,等待點贊數的增加。我們想知道為什么別人拿到的點贊數會比自己的多。于是我們開始給自己日常的在線行為放大功率:想變得更有趣、更刻薄、更迷人、更極端。

          代碼塑造了我們的生活。就像風投家Marc Andreessen所寫那樣:“ 軟件蠶食整個世界”,盡管此刻說軟件正在消化世界可能會更準確些。

          從文化角度上來講,代碼是比較下層的存在。我們可以感覺到它對我們日常現實的神秘影響,但是卻很少能看到它,而且對于非初學者來說有點高深莫測。(硅谷的人喜歡這樣這有助于他們自我神話為巫師。)我們給電影、游戲和電視都立了十大排行榜,讓那些塑造了我們靈魂的作品揚名立萬。但是,即便代碼跟這些類型的作品一樣反映了時代思潮,我們卻未曾坐下來匯編過世界上最重要的代碼清單。

          所以Slate雜志決定自己來做這件事。為了弄清楚有哪些讓世界為之傾斜的軟件,雜志編輯對計算機科學家、軟件開發人員、歷史學家、政策制定者以及新聞工作者進行了民意調查。這些人需要做出以下選擇:哪些代碼段影響巨大?哪些代碼改變了我們的生活?約有75位受訪者提出了各種各樣的想法,Slate從中選擇了36位。鑒于寫成的有影響的代碼如汗牛充棟,這里的清單并不完整,也不可能完整。(我很喜歡的一個并沒有人選:快速排序算法!或者Ada Lovelace的伯努利算法也許也算一個。)就像所有的榜單一樣,它的目的是啟發,去幫助我們重新思考代碼是如何影響我們的生活,以及程序員所做的決策是如何影響未來的。

          里面的有些代碼你可能已經聽說過,比如HTML什么的。有的代碼功能強大(比如用來對概率建模的蒙特卡洛模擬),但一般人完全不知道是什么。有的則包含了致命錯誤,比方說波音737 Max的缺陷。還有一些令人毛骨悚然,比方說讓營銷人員知道你是否已打開電子郵件的像素跟蹤。

          有一個趨勢是很明顯的:最重要的代碼往往會通過消除阻力來塑造新行為。當軟件讓做某件事情變得更容易時,這種事情我們就會做得更多。1988年編寫的代碼第一次建立起“Internet Relay Chat(IRC,多人在線交談系統)”,這使得早期的網民彼此可以實時進行文字聊天。現在,實時文字聊天已經無處不在,從令人應接不暇的Slack職場閑聊吹水,到Twitch直播的釣魚和反釣魚之戰,不一而足。

          某些代碼什么時候具備了劃時代意義未必總是很清晰。一開始它只是個怪異的嘗試,一個實驗氣球。《Spacewar !》是第一個獲得病毒式流行的視頻游戲。可是在1961年的時候,用價值12萬美元(相當于2019年的100萬美元)的機柜式計算機萬游戲被視為一種相當無聊的使用方式。但是它獨創了很多幫助計算機進入主流的概念:用圖標表示數據,讓用戶用手持控制器操作這些圖標。

          代碼的影響可能會讓所有人感到驚訝,包括寫代碼的人在內。—Clive Thompson,《程序員: 新部落的形成和世界的重塑(Coders: The Making of a New Tribe and the Remaking of the World)》作者

          1、二進制穿孔卡片

          年代:1725

          第一段代碼

          二進制編程早在計算機誕生之前就有了。大家認為Basile Bouchon 是第一個給紙片打孔并用來控制機器的人:1725年,他發明了一種織布機,這種機器可以根據送入的穿孔卡片的指令編織圖案。打孔的是“1”,沒有打孔是“0”。盡管此后東西發生了很大的變化,但代碼的基本構建塊并沒有改變。— Elena Botella ,Slate

          2、執行的第一段現代代碼

          年代:1948

          既開辟了計算機代碼的使用,也引領了塑造冷戰軍備競賽的核毀滅計算機模型的使用

          ENIAC(電子數字積分計算機)是第一臺可編程的電子計算機。機器于1945年建成,每解決一個新問題都要靠重新連線許多部件來完成。當一項任務(比如加法)完成時,會用一個脈沖來觸發下一項任務。但是幾年后,克拉拉· 丹·馮·諾依曼和洛斯阿拉莫斯的科學家Nicholas Metropolis對ENIAC重新進行了接線,讓這臺機器跑出來有史以來在任何計算機上執行的第一段現代代碼:從可尋址只讀存儲器(ENIAC的函數表開關)執行數百條數字指令。他們模擬了新墨西哥州洛斯阿拉莫斯國家實驗室正在評估的幾種原子彈設計的爆炸情況,用蒙特卡洛技術來模擬一個復雜系統,幾乎是一步步地把可能結果的概率分布呈現出來。馮·諾依曼和Metropolis)向洛斯阿拉莫斯的核科學家發送了20000多張卡片,跟蹤彈頭引爆后模擬中子的變化情況。知道今天,這段代碼的子孫后代還在洛斯阿拉莫斯那里發揮作用。—Thomas Haigh ,《ENIAC in Action: Making and Remaking the Modern Computer(ENIAC實戰:現代計算機的制造和改造)》合著者

          3、Grace Hopper的編譯器

          年代:1952

          令計算機處理文字成為可能

          IF END OF DATA GO TO OPERATION 14 .

          來自維基百科

          當Grace Hopper決定通過以人類語言為基礎來簡化整個過程時,她正在對一臺早期計算機進行編程。二戰期間,Hopper加入了美國海軍預備隊,她知道,像她在部隊的上司一樣,大家都在努力去理解二進制代碼。而如果編程語言是基于英語的話,那么這項工作就不會那么容易出錯,并且對于那些沒有數學博士學位的人來說也更加平易近人了。

          一些人對這種想法嗤之以鼻,但1950年代初時,她設計出了一種編譯器,也就是一組可以將更容易理解的代碼轉化為由機器處理的較低級代碼的指令。通過這一工具,她和她的實驗室開發出了FLOW-MATIC,這是第一種將英語納入該過程的編程語言。——Molly Olmstead,Slate

          4、星際飛行(Spacewar)!

          年代:1961年

          發行的第一款視頻游戲

          / this routine handles a non-colliding ship invisibly

          / in hyperspace

          hp1, dap hp2

          count i ma1, hp2

          law hp3 / next step

          dac i ml1

          law 7

          dac i mb1

          random

          scr 9s

          sir 9s

          xct hr1

          add i mx1

          dac i mx1

          swap

          add i my1

          dac i my1

          random

          scr 9s

          sir 9s

          xct hr2

          dac i mdy

          dio i mdx

          setup .hpt,3

          lac ran

          dac i mth

          hp4, lac i mth

          sma

          sub (311040

          spa

          add (311040

          dac i mth

          count .hpt,hp4

          xct hd2

          dac i ma1

          hp2, jmp .

          Steve Russell,收集自Bitsavers.org

          1961年末,一群年輕的MIT雇員、學生和同事(其中很多是Tech Model Railroad俱樂部的成員)拿到了最近別人捐贈的DEC PDP-1計算機的深夜使用權。屬于非軍事計算前沿技術的PDP-1售價為12萬美元(按今天計算將超過100萬美元),字長達18位,程序存儲用的是紙帶。這幫程序員用五個月的時間開發了一個游戲,里面是兩名玩家控制著飛船(針和楔形物)進行一對一的太空戰,同時還要避開位于屏幕中心的恒星的引力。

          很快,星際飛行!就在早期的“黑客”社區中傳播開來。后來DEC把它預裝進了每一臺PDP-1里面,并預裝到核心內存里面,準備在安裝時進行演示。這個程序對1960年代規模還很小的編碼社區產生了重大影響,并啟發了后面數代的視頻游戲創作者。現在它還從模擬者那里找到自己的存在,并且在計算機歷史博物館的最后一臺可操作PDP-1上還在定期演示。2018年,游戲的首席開發者Steve Russell在史密森尼學會上說:“它已有50多年的歷史。沒有未解決的用戶投訴。沒有崩潰報告。而且支持依舊提供。”——Arthur Daemmrich ,導演,勒梅森發明與創新研究中心

          5、電子郵件的起源

          年代:1965

          拜托,這是電子郵件。

          WHENEVER A(1).E.FENCE.OR.A(2).E.FENCE.OR.A(3).E.FENCE

          PRFULL.($'R'1INSTRUCTIONS:$)

          PRFULL.($ '4MAIL NAME1 NAME2 PROB1 PROG1 PROB2 PROG2 ...$)

          PRFULL.($ WHERE '=NAME1 NAME2'= IS THE FILE TO BE MAILED,$)

          PRFULL.($ AND '=PROBN PROGN'= ARE DIRECTORIES TO WHICH '8$,

          1 $IT IS TO BE SENT.'B$)

          CHNCOM.(0)

          END OF CONDITIONAL

          CTSS 程序員MAIL手冊頁

          1961年,麻省理工學院的黑客開發了一個系統,這個可以讓多個用戶登錄到同一臺計算機上,然后他們開始互相給對方簡短留言。1965年,一群編碼人員決定開發一個正式的命令系統來發送、接收和顯示這些數字化的信函。對于“MAIL”這個命令一開始上級是拒絕的,覺得有點輕率,但它的使用卻大行其道,以至于到1971年,麻省理工學院甚至出現了第一條垃圾郵件:一條反越戰的信息。——Clive Thompson

          6、警察巡邏算法

          年代:1968

          現代預測警務和種族定性計算機化的開始

          1965年,當林登·約翰遜總統組建總統執法與司法委員會時,他下令該委員會研究如何利用計算機來幫助解決美國的的“犯罪問題”,他和該委員會對這個問題的定性是“城市問題”和“黑人問題”。這個問題的答案是“警察巡邏算法(Police Beat Algorithm,PBA)”,該算法旨在解決規劃問題,比方說在城市的特定區域需要安排多少名警察巡邏之類的問題。通過將PBA與犯罪數據庫相結合,警方可以在犯罪實施之前根據種族人口統計數據自動生成嫌犯檔案,并相應部署資源(警察,武器和其他裝備)。今天的預測警務對黑人和棕色人種監視并定罪的情況相對不成比例。就像PBA的故事提醒我們那樣,這種情況并不是不可預見的技術故障的結果:相反,這是這項技術50年設計的完美體現。——Charlton McIlwain,《黑人軟件(Black Software: The Internet & Racial Justice, From the Afronet to Black Lives Matter)》作者

          7、阿波羅11號登月艙的緊急救助代碼

          年代:1969

          防止登月艙的計算機在太空中耗盡空間的代碼

          POODOO INHINT

          CA Q

          TS ALMCADR

          TC BANKCALL

          CADR VAC5STOR # STORE ERASABLES FOR DEBUGGING PURPOSES.

          INDEX ALMCADR

          CAF 0

          ABORT2 TC BORTENT

          OCT77770 OCT 77770 # DONT MOVE

          CA V37FLBIT # IS AVERAGE G ON

          MASK FLAGWRD7

          CCS A

          TC WHIMPER -1 # YES. DONT DO POODOO. DO BAILOUT.

          TC DOWNFLAG

          ADRES STATEFLG

          TC DOWNFLAG

          ADRES REINTFLG

          TC DOWNFLAG

          ADRES NODOFLAG

          TC BANKCALL

          CADR MR.KLEAN

          TC WHIMPER

          數字化:Virtual AGC與MIT Museum

          阿波羅制導系統計算機(AGC)是一個奇跡:就像計算阿波羅重返地球軌跡的Poppy Northcutt告訴我那樣,AGC的計算能力還比不上今天記錄個人信息的賀卡。但是,它卻做到了該做的。

          有限的計算能力和存儲空間意味著必須細致地管理好任務,因此AGC始終聚焦在最重要的工作上。如果它沒有足夠的空間來執行任務,那就不可能完成任務。AGC軟件團隊知道,總有些事情是自己計劃不到的。因此,他們開發了BAILOUT。當計算機有空間用完(或“溢出”)的風險時,AGC會觸發BAILOUT把不太重要的數據和操作調走,從而讓重要的數據和操作保持正常運行。

          當Eagle著陸器準備降落到月球表面時,大概在30000英尺高空處,AGC 發出了“1202”的警報,尼爾·阿姆斯特朗和休斯敦的飛控都沒有馬上意識到這一點。但是在不到30秒的時間內,指揮中心的計算機專家表示,AGC軟件正在按預期的方式運行:放棄了低優先級的工作并重新開始重要的工作(這個過程很快,以至于大家都無法察覺)。阿姆斯特朗和Buzz Aldrin可以繼續從AGC那里得到他們絕對需要的東西,好繼續安全著陸。

          在阿姆斯特朗說出“鷹已降落”之前,溢出警報還會再響三聲,但永遠是因為事情按預期進行才會響。“救助”一詞通常表示任務以失敗結束,但在這里卻讓人類的最高成就成為現實。— 史密森尼國家航空航天博物館主任Ellen Stofan

          8、Hello, World!程序

          日期:1972年或更早

          把世代引入代碼的一句話

          main{ printf (“ hello,world \ n”); }

          當你坐下來學習一門新的編程語言時,教程要你做的第一件事就是讓計算機顯示出 “Hello,world!”這句話。也許早期最著名的例子來自貝爾實驗室備忘錄,《C語言編程教程》。 這本書寫于1974年,盡管有人發現在1972年的B語言手冊里面也發現了它,而且可能時間比這還要早。

          Hello, World!是一個很美麗的教材。這是一項很小的、可完成的任務,可以讓人早早獲得成就感。這已成為了標準,有助于說明不同編程語言之間的差異。對于高級程序員來說,這也是一個快速簡便的方法,可確保在安裝新環境后一切正常。(有時候程序員會用“實現'hello world'的時間'作為比較語言和環境的速度測試。)也許最重要的是,“Hello,world!”天真、友善,而且有助于說明新程序員的代碼可產生的影響范圍。那就是全世界。——IBM AI設計主管Chris Noessel 。

          9、空終止串——Null

          年代:1972

          計算史上最災難性的設計錯誤

          char yellow[26] = {'y', 'e', 'l', 'l', 'o', 'w', '>char yellow[26] = {'y', 'e', 'l', 'l', 'o', 'w', '\0'};<'};

          GNU C參考手冊

          1972年,丹尼斯·里奇(Dennis Ritchie)做出了一個重大決定:自己的新語言要用一種所謂的“空終止串”來表示文本。這個概念其實早就出現了,但是他在自己的新語言,C語言里面把它奉若神明,而這一決定的遺產從此就一直纏住了我們。

          編程語言表示一段文本的主要有兩種方式:它可以是內在的固定長度的——“我就包含10個字符,就這么多。”也可以用過空值(null)結尾——這里有一堆的字符,你盡管看下下去,直到最后到達零字節為止,祝你好運!”

          C代碼中一個極其常見的錯誤是把一個長字符串復制到一個較短的字符串,造成結尾處溢出,這意味著你破壞了剛好在附近的其他數據。就像在白板邊上寫東西一樣。

          除了只是導致程序發生故障外,此類錯誤還可以用來說服程序用經過精心設計的特定數據去覆蓋某些內容,從而改變程序的行為。這就是緩沖區溢出攻擊。但凡你聽說過的安全漏洞幾乎都是從這里開始的,其始作俑者就是1988年的莫里斯蠕蟲病毒(Morris Worm)。

          仔細寫代碼可以避免在C語言中出現此類錯誤,但是這種語言的特點導致此類錯誤產生容易檢測難。幾乎所有的現代語言都避開了以null終止的字符串,但是從路由器到“智能”燈泡,C和C ++仍然在世界的基礎處運行著。因此,在將近50年后,我們仍跟這類bug在玩打地鼠的游戲。——Jamie Zawinski,Netscape開發者,Mozilla.org創始人,DNA Lounge老板

          10、Telenet遠程網

          年代:1975

          第一個基于數據包交換的公共數據網絡,是當今互聯網的骨干

          互聯網的前身是ARPANET,這是一個供高級研究計劃局(現為DARPA)研究人員機器之間交換數據的計算機網絡。隨著ARPANET在政府內部的擴張,網絡搭建者意識到這項技術可能對普通大眾也很有價值,以及參與到其中可以催生多少的商機。1975年8月,ARPANET的商業版本Telenet 在七個城市上線,該網絡可讓最早期的客戶(主要是計算機或數據庫公司)用電話撥號方式上傳下載(如電子郵件原型消息)或遠程訪問存儲在中央計算機上的代碼。雖然ARPANET通常被認為是現代Internet的鼻祖,但實際上為公眾消費而設計的Telenet才是Web的前身。實際上,1980年代Telenet的最大客戶之一就是Quantum Link,后者后來成為AOL。——Jane C. Hu,Future Tense contributor

          11、溫哥華證券交易所的舍入誤差

          年代:1982

          一個小小的小數點之別付出的巨大代價

          - return floor(value)+ return round(value)

          溫哥華證券交易所使用的代碼大概是這樣的。

          1982年初,溫哥華證券交易所推出了一種一開始錨定基點為1000點的電子股票指數。但是推出后在兩年的時間之內,它就跌到了原始價值的一半,這種走勢在牛氣沖天的1980年代初期是一個令人困惑的反例。一項調查顯示,對指數的計算在一個地方出了問題,那就是用floor而不是round。用floor意味著指數被舍入而不是取整到小數點后三位。(數字計算機必須要有有限的精度,因此需要四舍五入或截斷。)因此,如果指數計算值為532.7528的話,計算機保存下來的值是532.752,而不是四舍五入為532.753。這一點點的差異本來關系不大,但由于每天都要對指數進行數千次計算,這種看似很小的差異(基本上每次都進行不進位舍入)導致指數值出現急劇下降。這個編程錯誤最后在1983年11月被修正,當時的某個周五收盤時指數已經降到500左右了。到了下周一指數以超過1000點開盤,損失掉的價值被恢復回來了。——伊利諾伊大學香檳分校助理教授Lav Varshney

          12、Therac-25代碼

          年代:1985–1987年

          事實證明,過分自信會殺死人

          當真相顯現時,頭條新聞就現代化發出了警告。《洛杉磯時報》宣稱:“復雜時代的軟件故障會死人。” 一種本來用于治療癌癥的機器由于在幾家醫療機構對六名患者進行了過大劑量的放射,造成了至少三人死亡。

          研究人員經過調查發現,Therac-25的程序允許致命錯誤的出現。本來這臺機器提供的是低功率和高功率兩種類型的治療,而后者需要金屬設備來過濾光束。但是由于軟件存在的錯誤,操作員可以在沒有合適的金屬設備就緒的情況下意外觸發高功率模式。

          在設計上,Therac-25是Therac-20的“改進”版,而且這種軟件被認為已經萬無一失,因此不需要外部的安全檢查。結果:重大死亡的責任要歸咎于過度自信的工程師,因為他們沒有對錯誤發生的可能性做出解釋。——Molly Olmstead

          人類歷史上最重要的36個代碼片段(二)

          人類歷史上最重要的36個代碼片段(三)

          譯者:boxi。


          主站蜘蛛池模板: 无码日韩精品一区二区三区免费| 日本一区二区视频| 免费看AV毛片一区二区三区| 综合无码一区二区三区| 国产在线精品一区二区三区不卡| 国产福利电影一区二区三区久久久久成人精品综合 | 国产精品福利区一区二区三区四区| 一区二区三区四区在线播放| 日韩av片无码一区二区不卡电影| 日韩美女视频一区| 亚洲天堂一区二区三区四区| 无码少妇一区二区浪潮免费| 一区二区在线免费观看| 国产色综合一区二区三区 | 怡红院一区二区在线观看| 亚洲国产一区二区三区| 精品一区二区三区免费毛片| 精品国产一区二区三区久久| 久久精品一区二区影院| 中文字幕精品无码一区二区| 夜夜添无码一区二区三区| 国产麻豆精品一区二区三区| 欧美日韩国产免费一区二区三区| 亚洲国产激情在线一区| 国产精品亚洲不卡一区二区三区| 国产一区二区三区在线看片| 亚洲国产一区在线| 精品深夜AV无码一区二区| 亚洲一区二区三区久久久久| 亚洲香蕉久久一区二区| 日本一区二区三区不卡视频 | 一区二区在线免费视频| 亚洲一区二区三区免费观看| 国产精品福利一区二区久久| 亚洲欧洲无码一区二区三区| 亚洲日韩精品一区二区三区无码| 丰满爆乳一区二区三区| 国产精品夜色一区二区三区 | 乱色熟女综合一区二区三区| 亚洲毛片αv无线播放一区| 在线观看亚洲一区二区|