官术网_书友最值得收藏!

  • Rust游戲開發實戰
  • (美)赫伯特·沃爾弗森
  • 3803字
  • 2024-09-05 16:34:08

前言

Rust是一種系統級編程語言,它既具備與C、C++類似的強大功能,又具備內存安全性,還讓并發編程不再令人畏懼,同時能夠大幅提升開發效率。它提供了底層硬件開發所需的功能和性能,還提供了一種安全機制來避免很多低級語言易犯的錯誤。正是由于這些特性,Rust逐漸成了一種非常有競爭力的開發語言,為亞馬遜、谷歌、微軟以及許多游戲開發公司所應用。

開發游戲是學習Rust的一個很好的方法。不要被那些AAA品質[1]游戲的規模和做工嚇倒。小型獨立游戲的開發是很有趣的,將游戲開發作為業余興趣可能會開啟你的職業游戲開發生涯,或者其他領域的開發生涯。每個成功的游戲開發者都是從小處著手,逐漸積累技能,直到能夠開發自己夢想中的游戲。


[1] AAA品質游戲通常是指由大型工作室開發,有巨額預算資助的游戲。——譯者注

本書將通過游戲開發實例引導你學習Rust。在經過一系列案例實踐、構建越來越復雜的游戲之后,你將了解如何使用Rust語言進行游戲開發。本書強調務實的“做中學”方法,理論部分篇幅很短,隨后便是可供嘗試的具體例子。學完本書,你能夠掌握Rust語言的基礎知識,并為解決更復雜的游戲開發問題做好準備。

讀者對象

本書假設你有一些編程經驗,并會通過循循善誘的方式介紹Rust和游戲開發的概念。只要你用其他編程語言寫過比“Hello, World”更復雜的程序,那么在閱讀本書示例時應該會感到非常輕松。

本書適合任何想要學習Rust的讀者,包括沒有Rust語言基礎的人,也非常適合想要嘗試游戲開發的Rust開發者。本書并不是單純的編程語言入門教程,對新入行的(游戲)開發者也可能有所幫助。

本書內容

本書將引導你親歷一個典型的游戲開發過程,并會穿插著講解Rust的關鍵概念,力求在構建實際可玩游戲的過程中,讓你掌握新知識,增加技能儲備。

“第1章 Rust及其開發環境”:Rust之旅由此開啟。本章會介紹語言工具鏈的安裝,并在文本編輯器中編寫Rust源代碼。本章將指引你一步一步地創建“Hello, World”程序,并學習使用諸如Cargo和Clippy之類的Rust工具來提高工作效率。

“第2章 Rust的第一步”:介紹 Rust 開發的基礎知識,通過編寫一個樹屋(treehouse)訪客管理系統幫助你提升Rust開發技能。本章涵蓋文本輸入和輸出、使用結構體來組織數據,以及一些Rust核心概念,例如迭代器、模式匹配、if語句、函數和循環。

前兩章介紹了制作簡單游戲所需的一切知識。從第3章開始,你將正式開始構建游戲。

“第3章 構建第一個Rust游戲”:引導你創建本書的第一個游戲——Flappy Dragon。在此過程中,你會用到前兩章學到的知識。

“第4章 設計地下城探險類游戲”:介紹如何規劃游戲。本章將介紹如何編寫游戲設計文檔,從而把粗略的想法轉變為一個具有真實可玩性的游戲。你將設計一個Rogue風格的地下城探險類游戲,將粗略的需求逐步細化,并最終得到一個最簡可行產品(Minimum Viable Product,MVP)。

“第5章 編寫地下城探險類游戲”:開始構建第4章所設計的地下城探險類游戲。本章將介紹隨機數、游戲地圖的存儲結構,以及玩家的交互控制的處理,還將在游戲地圖中初步添加與怪獸相關的資源,并介紹如何實現基于圖塊的圖形界面。

“第6章 創建地下城居民”:隨著開發的深入,游戲變得越來越復雜。本章會使用實體組件系統(Entity Component Systems,ECS)來控制系統的復雜性、實現代碼復用,以及管理游戲中各個實體元素之間的交互關系。本章將使用ECS來實現玩家和怪獸,通過復用不同的系統來減少需要編寫的代碼數量。在本章結束時,你會得到一個應用了多線程和并發技術的游戲。

“第7章 與怪獸交替前行”:在游戲中添加一個回合制框架,實現玩家和怪獸輪流移動的功能。你將了解到如何設計一個能實現特定游戲規則的游戲框架,并根據游戲的不同環節來切換不同的ECS系統,還將學習如何讓怪獸在地圖中隨意走動。

“第8章 生命值和近身戰斗”:為游戲中的實體(玩家和怪獸)賦予生命值,并在玩家角色的上方顯示血條。你會了解到如何讓怪獸自動搜尋玩家,如何實現一個戰斗系統,從而讓玩家可以消滅敵人,或者被敵人消滅。

“第9章 勝與負”:增加一個游戲結束畫面,以告訴玩家輸掉了游戲,當然也會添加游戲勝利的判斷邏輯,以及一個祝賀玩家獲勝的畫面。

“第10章 視場”:在本章之前,游戲玩家的角色是全知全能的——他們可以看到完整的地圖。本章介紹視場的概念,以及一種讓玩家在探索的過程中逐步熟悉地圖的方法。使用ECS系統,能夠給怪獸施加相同的視場限制——如果怪獸不知道玩家在哪里,它們就無法“糾纏”玩家。

“第11章 更具可玩性的地下城”:介紹一種新的地圖生成算法。本章還會討論一個更高級的Rust話題——trait,以及如何通過一個通用的程序接口來實現可互換性,這是一個在團隊合作開發中非常有用的技能。

“第12章 地圖的主題風格”:添加新的地圖渲染方法,會用到第11章介紹的trait相關的知識。你可以通過更改地圖的圖塊素材集來把地下城風格變成森林風格或其他風格。

“第13章 背包和道具”:為游戲添加物品功能、背包管理功能,以及升級獎勵機制。

“第14章 更深的地下城”:將單層地下城升級為向更深處錯綜蔓延的地下城。本章將介紹如何用數據表格來把玩家的經驗等級和游戲難度關聯起來。

“第15章 戰斗系統和戰利品”:為游戲增加“戰利品列表”功能,以及讓玩家在探索地下城的過程中不斷獲得更高級物品的機制。玩家會找到越來越有趣的各種寶劍——在戰斗中寶劍將會體現出各自不同的威力。這里將通過更高級的戰利品來平衡逐漸增加的游戲難度,同時讓你了解到風險-收益曲線在游戲中的應用。

“第16章 最后的步驟和潤色”:介紹如何打包并發布前面所編寫的游戲,還將介紹一些讓游戲變得更加與眾不同的方法,并給出進階學習游戲開發的建議。

本書未涉及的內容

本書側重于先讓你了解實際案例,再向你解釋案例中所使用的各種技術的原理,以此講授理論知識。本書不會深入探討Rust的各個細節,而是會在引入新概念時告訴你如何去尋找相關的學習資料。

本書不會涉及游戲創意的相關內容,但無論是制作一款偉大的在線對弈游戲還是射擊游戲,本書涉及的概念都會讓你受益。這些概念很容易應用到其他游戲引擎中,包括Unity、Godot、Unreal和Amethyst等。掌握本書中的相關內容,有助于你更好地開始制作心目中的游戲。

如何閱讀本書

如果你是Rust開發新手,那么請按順序閱讀本書的各章內容以及相關的示例。如果你已經比較熟悉Rust語言,那么可以在粗略閱讀概述性內容之后直接切入游戲開發部分。即便你是資深的游戲開發者,還是可以從本書中學到很多關于Rust的知識,以及面向數據的設計模式的知識。

不要急于把全書看完,體驗學習的過程同樣重要。閱讀的過程可能會給你帶來后續制作游戲的靈感。你不妨在閱讀過程中隨時記錄下想做的事,以及如何用書中介紹的內容去實現這些事。

體例約定

本書的代碼以Rust工作區的形式給出,這種做法便于把多個Rust項目放在一起進行管理。書中的代碼被劃分到如下的目錄中:

root
/章節名稱
/示例名稱
/src --- 示例的源代碼
/resources --- 示例所附帶的其他文件
Cargo.toml --- 配置文件,用來指導Rust的Cargo構建系統構建和運行示例
/src --- 小程序源碼,用來提醒你應該進入某個具體案例所在目錄而不是在頂級目錄中運行示例
Cargo.toml --- 配置文件,用來告訴Rust的Cargo構建系統工作區是由哪些項目組成的

你可以進入“章節名稱/示例名稱”目錄下,然后通過運行cargo run命令來執行示例代碼。

書中的代碼會標明所引用的源代碼路徑,這些路徑有時會突然切換到本章的另一個代碼目錄中。這樣的設計可以讓你在迭代開發的過程中,每一步都有可以運行的完整示例,從而使你更容易跟上本書的節奏。舉個例子,你在某一章中可能會看到出自code/FirstStepsWithRust/hello_yourname項目的代碼,而在同一章節稍后的地方又會發現出自code/FirstStepsWithRust/treehouse_guestlist_trim/項目的代碼。

在線資源

以下羅列的是一些在線資料,希望對你學習Rust語言有所幫助。

Rust by Example是一本很好的以案例驅動形式來介紹Rust編程語言的書。

The Rust Programming Language [KN19] 通過提供深入的概念講解和指導來學習Rust的細節。本書支持在線閱讀。

Rust標準庫文檔,它詳細描述了Rust標準庫中的一切內容。這是一份很好的參考資料,當你忘記標準庫中某些組件的使用方法時,請查閱Rust標準庫文檔。

Reddit的/r/rust和/r/rust_gamedev兩個頻道提供了優質的學習資源。RoguelikeDev社區則對于開發本書中介紹的地下城類型游戲非常有幫助。Reddit中還有很多指向Discord論壇的鏈接,你可以在那里結識很多樂于分享的技術人。

小結

無論你想專注于學習Rust還是想涉足游戲開發領域,本書都可以起到很好的幫助作用。無論是完整地開發一款新游戲,還是參與一部分功能的開發,都是令人興奮的事情,運行游戲,看到所創建的人物動起來,那一刻的快樂是無以言表的。讓我們先著手搭建Rust開發環境,然后直接進入第一行Rust代碼的編寫。

 pg8a 作者自述:我的游戲開發經歷

我的成長非常幸運。我父親教過計算機相關課程,也教了我許多計算機知識。有一天,他帶了一臺BBC Micro Model B計算機回到家,那真是一個改變我命運的日子!那臺計算機有32KB的RAM、彩色顯示器,還能從磁帶驅動器加載程序!——真是不可思議。我的父母給我買了很多游戲,包括Repton這樣的益智游戲和各種復刻的街機游戲,讓我的游戲庫不斷擴大。沒過多久,我就萌生了制作游戲的想法,于是父親便耐心地引導我學習BASIC語言。客觀來說,起初我編寫的游戲非常糟糕,但這也無關緊要,因為我自己做出了一些東西,并且體會到了向朋友們展示成果的快樂。

早期的BASIC游戲開發經歷讓我走上了一條有趣的道路。之后我學習了Pascal語言,后來又學習了C和C++語言。我先后學會了為Windows和Linux開發游戲,后來參與完成了幾個小組項目,并找到了一份編寫商業和網絡軟件的工作——這很大一部分要歸功于我的游戲開發經歷。后來,我接觸到了Rust語言,發現它是最適合我的。

雖然這本書主要介紹的是Rust和游戲開發方面的內容,但我更希望它能鼓勵你去創作一些有趣的東西。

主站蜘蛛池模板: 鹤峰县| 衡阳市| 甘谷县| 正阳县| 永川市| 瑞丽市| 天气| 杨浦区| 漠河县| 徐州市| 鄂伦春自治旗| 江油市| 紫云| 察隅县| 绵阳市| 吉安市| 肥东县| 西乌珠穆沁旗| 探索| 普洱| 古丈县| 集贤县| 平山县| 阜康市| 涟源市| 阳泉市| 宝兴县| 图们市| 霍林郭勒市| 陈巴尔虎旗| 遂溪县| 安国市| 施秉县| 万载县| 苍溪县| 海晏县| 新余市| 通州区| 南昌县| 岳阳市| 唐山市|