許毅的那個精簡版的小虛拟機核心在他回來後的幾天内很快就完成了。虛拟機模拟的是計算機的硬件相當于人的身體但還沒有靈魂也就是計算機的軟件。虛拟機是操作系統中的計算機而在虛拟機中運行的軟件則是軟件中的軟件了。由于這是精簡了的虛拟機隻能支持少數的一些機器指令所以編寫虛拟機能夠運行的程序時也得注意隻用到這些指令的功能否則就會報錯說指令不能識别。
現在完成的這個虛拟機核心就相當于一個cpu許毅接下來要做的就是給這個光秃秃的cpu加上其他硬件資源例如加入圖形化的輸入輸出接口加上虛拟内存等。
再經過幾天時間這些七七八八的組建總算完成了最後将他們很好地組合起來集成在一個大軟件中最後許毅還在外面加上了兩層加密性能絕好的“殼”。許毅有美術功底所以他特地還進行了一下界面美化。根據許毅原來的構思他将這個遊戲命名爲“達爾文生存”。
遊戲編寫好之後他自己沒怎麽玩因爲在他看來這實在是太簡單沒意思。然後他把這個遊戲傳給周松讓他試試。周松确實對這個表現出很大的興趣。于是獲得許毅同意之後他将這個遊戲放到了論壇上。結果令許毅大爲失望對這個遊戲感興趣的人并不多而且這些人也隻是玩個新鮮而已等知道怎麽回事了他們就将其抛棄了。周松做了調查大家一緻認爲這個遊戲實在是太缺乏趣味性程序編寫之後幾個小黑點在顯示器上移動然後就這麽等着。看他們慢慢爬動接着結果就出來了……太無聊了!
這個時候他們提出最好能夠将這個遊戲複雜化例如動作多樣性、更具挑戰**更加熱血等等……
倒!許毅看到他們的回帖之後真想抽他們。他辛辛苦苦把這個東西編寫出來結果沒人欣賞失策啊!許毅這次“寓教于樂”的嘗試就這樣胎死腹中。
不過。許毅還是沒有放棄這些人的建議給了他靈感連他自己都對他們提出的這個遊戲感興趣起來。許毅接下來的很長一段時間都化在那個黑客遊戲的構思和設計當中按照他的構想如果這個遊戲編寫成功。極有可能形成一個大型地賽事……
許毅現在上課不睡覺了。取而代之的是趴在課桌上呆有時候又會突然拿起筆在稿紙上記錄着什麽。顔玉看得奇怪多次詢問許毅是不是出了什麽事情。她也看過許毅紀錄在稿紙上的東西都是一些框圖或者代碼之類的她一點都看不懂。
許毅考慮到把代碼完全放到虛拟機中執行這個方法現在還沒有條件實現。因爲虛拟機編寫的工程難度實在太大同時需要很長的時間和極大的精力。另外他編寫這個遊戲地目的是用來增加大家學習編程的興趣提高編程水平所以他改變了起初的想法不再去編寫一個完整的虛拟機。而是仿真系統代碼還是交給實際地計算機去執行沒有必要重新編寫一個虛拟機。
仿真顧名思義模仿真實。也就是用一定地手段去建立相關模型。模仿現實生活中的一些具體存在的東西。例如某個小區的整體規劃模型就是一種實物模型仿真屬于實物建模用實物把想要表現的東西用模型做出來。另外還有一些抽象的仿真例如虛拟現實仿真和純粹的數學仿真等。虛拟現實是用計算機技術把現實地東西做成動畫(二維、三維)的形式這裏計算機及軟件就是用來仿真的工具;純粹的數學模型則是純抽象的概念沒有形象的表現方式用數學函數來表示系統數學函數就是它地工具。
許毅所采用的方式就是虛拟現實仿真以二維的動畫形式表現出來。經過幾周的構思和設計他終于将整體框架大緻完成。他将這個遊戲命名爲“生死鬥”正如其名這個遊戲的主要行爲就是各個“角鬥士”進行生死角鬥不論是單打獨鬥還是進行大混戰目的就是要殺死對方赢得角鬥。
整個遊戲最重要的是仿真系統的服務端-Fighsenven全部的數據和指令都是Fighsenven當中處理并運行的它就相當于遊戲的心髒遊戲者并不能看到它隻是在底層運行。當然Fighsenven提供一個虛拟場地-Fighsenven也叫“鬥獸場”。所有參加角鬥的角鬥士的外在圖形表示都是在這個鬥獸場中進行角鬥。
實際上可以說是仿真系統服務端包含兩個程序:Fighsenven和Fightmoniton。
Fighsenven負責“角鬥士”的移動、與客戶端t)進行通信、按照一定的規則控制遊戲的進程。
Fightmoniton即鬥獸場則負責利用操作系統的圖形顯示功能在Fighsenven中顯示虛拟場地。Fighsenven可以同時和多個Fightmoniton相連這樣大家就可以在多個顯示器上同時顯示生死鬥遊戲的情況。
有服務端自然必有客戶端t)。生死鬥的客戶端(Fighsenven)是由遊戲參與者編寫。它相當于“角鬥士”的大腦指揮着角鬥士的運動和動作。客戶端和服務端的通信是通過udp/ip協議進行信息交互的所以遊戲者可以實用支持udp/ip協議的任何程序系統。通過這種信息交互客戶端送指令去控制鬥獸場中的角鬥士同時角鬥士還可以反饋一些信息給服務端。
遊戲中的“角鬥士”是一個抽象的數據模型“他”由着自己的一些屬性:運動和戰鬥。運動有“走”、“跑”、“加”、“減”、“轉身”……等等等等許毅設計得很詳細基本是按照一個人的實際情況來的。戰鬥模型許毅則簡化了隻有“拳擊”、“腳踢”這兩種攻擊以及相應的防禦動作而已。其實這個設計并不難按照面向對象的設計思想将“角鬥士”抽象成一個對象其他的都是他的屬性而屬性也還可以是對象也就是說屬性也可以有屬性依此類推……
…………
整個工程是非常龐大的所以許毅在開始的時候并沒有急着動手編寫而是仔細反複地思考、補充。不但從全局考慮其整體結構還得注意以後要添加新的功能。畢竟現在他的構思相對來說還比較粗糙還有很多細節沒有考慮到到時候肯定會要升級。作爲一個大的項目這些因素都是必須考慮的。需求分析可行性分析……這些都是軟件工作聽知識沒有參與過大型的項目開的人是體會不到這些步驟的重要性的。次等的程序員通常是想到什麽就立刻動手準備工作什麽都不做就這麽編下去碰到問題再臨時解決到最後甚至還會加上一些令人難以接受的代碼。于是最終編寫出來的源代碼已經是“慘不忍睹”甚至隔了一段時間之後連他自己都讀不懂這些代碼了。這種憑自己的感覺編寫軟件的方式在應付小軟件的時候通常不會出什麽問題就算出了問題從頭再編寫就是了不用花多少時間。但遇到大型軟件的時候這種開方式往往能夠逼人去撞牆。編寫小部分都得花上幾個月的時間哪有這麽多時間讓你去從頭開始?真正有經驗的程序員都知道“磨刀不誤砍柴工”的道理他們先會仔細規劃整個程序會分爲幾個部分估計以後将要進行那些功能的補充等等……他們将這些經驗提取出來然後經過科學研究抽象出軟件工程學這門學科。
當然絕大多數黑客的代碼編寫習慣在正統的程序員眼中都不怎麽好他們對程序效率的追求近乎苛刻于是他們的作品當中往往會出現一些生澀難懂的代碼這些代碼是那麽的奇怪以至于那些規規矩矩的程序員想破頭皮也百思不得其解。他們往往會出這樣的感歎:“這樣也行?”、“變量怎麽可以這麽用?”、“天!這個算法太巧妙了他到底是怎麽想到的?”……這點可以從Linux編寫的Linux源代碼中找到實例。
許毅編寫的這個工程有點大可以說是他第一次獨自一人開這麽大的項目。給顔玉編寫的那個“級黑客套裝”雖然貌似看起來很大但那些軟件都是一些獨立的小軟件組成的難度并不是很大。而他現在編寫的這個“生死鬥”就不同了整體聯系非常他不但要編寫整個仿真系統而且還制定遊戲規則最要命的是要将這些遊戲規則整合程序當中去。所以他才花那麽大的時間來進行構思和設計因爲如果以後遊戲規則有所變動那麽軟件也要進行相應修改非常麻煩。