c++遊戲程式設計8步雲
第一步 選擇遊戲庫
要想編寫一款遊戲你必須選擇乙個遊戲庫,除非你要編寫自己的遊戲庫。下面列出了一些遊戲庫的名稱和**,它們都提供了相同的底層功能。
● ****** fast multi-media library (sfml):
● ****** directmedia layer (sdl):
● allegro:
● directx (windows only):
● rrlicht (3d lib):
還有,一款好的遊戲庫一般具備以下特徵:
● 一些專門載入和顯示影象的系統。
● 至少要有一些為基本影象提供的操作(如影象的旋轉,影象的縮放等)
● 最基本的繪畫功能(如畫圓函式, 繪製點、線的函式, 繪製矩形的函式等)
● 文字顯示功能
● 支援多執行緒
● 計時器功能
第二步 定義遊戲規則
所有的遊戲都從規則開始。首先,提出你對該遊戲所持有的想法(規則)。一旦你有了乙個想法, 你就可以擴充套件出更多的基於它而產生的想法。假如,你編的是一款棋類遊戲,你就會想怎麼才算贏局?又有什麼玩法?等等。假如,你的遊戲是一款講述故事情節的遊戲,只需建立乙個乙個故事情節即可。一定要確保你有乙個好的可玩性高的遊戲規則,只有這樣你的遊戲才算得上是一款真正的遊戲。越複雜的遊戲,你就越該好好的周祥一番,從打算一開始編寫它時就定義好你的遊戲規則,這樣你在編寫**時就不必擔心遊戲本身所存在的問題了。在你編寫遊戲時,遊戲的演變步驟一定要了然於胸。
第三步 劃分好你的遊戲引擎
你有必要劃分出你的遊戲引擎的各個功能元件,以及知道如何將各個功能元件組裝在一起。由於各大小遊戲的複雜性程度的不同,你也許不必關心這個步驟。但是,通過把引擎分成各個部分,可以很好的對各個部分進行測試研究,你只需要在它們被組裝起來之前,確保它們能夠完成它們相應的功能即可。 相反,如果不分成各個組成部分,而逐個小功能的不斷補充,情況將變得很糟糕,因為你很難把握各個功能的耦合。因此,你應該開始設計類結構圖了(就是所謂的物件導向程式設計(oop))。雖然,已有各種各樣的已編好的遊戲引擎供你在工程中使用,但是你還是必須記著這重要的一步。
第四步 開始編寫遊戲引擎(如果你是自己寫引擎的話)
現在,該是開始編寫引擎的時候了。編寫引擎並不意味著就是編寫遊戲本身,但是在一定程度上,渲染核心,物理模型,檔案處理,還有各種函式和類都是構建遊戲世界的組成部分。然而,由於遊戲的複雜度,引擎和遊戲**也許是同乙個概念。對乙個更複雜的遊戲,將很可能會呼叫乙個叫資源管理員(resource manager)的類物件。資源管理員不需要你知道什麼是聲音檔案,它只是管理你的資源檔案(如,影象檔案,音訊檔案等)。定義資源管理員類來管理所有資源不僅能使你的**更加整潔,還能使你避免記憶體洩露。
來看以下兩段優秀的**。該**能使整個引擎達到某種程度上的緊密性,以及它提供了易於使用的介面。以此來編寫你的遊戲,你就不用通過資源檔案來找函式名,也不用知道它是什麼。一種實現這種思想的簡單方法就是用oop思想實現的。
兩個示例:
view plain
//碰撞檢測管理,在遊戲中碰撞檢測演算法頻繁出現,可採用該類進行管理
class
collisions collision;
//渲染事件管理,在遊戲中要繪製各種遊戲物件,可採用該類進行管理//
//class
rendering renderer;
//所有物件的碰撞檢測處理和物件的繪製都可以通過以下兩個介面並放到遊戲迴圈中
renderer.draw_all();
collision.handle_all();
定義資源管理員類(resource manager):
view plain
#include
#include
#include
typedef
const
std::string uri;
// 異常處理
namespace
exceptions
};
// 如果資源記憶體空間分配失敗丟擲此異常
class
badresourceallocation :
public
std::runtime_error
};
}// namespace exceptions
//=//資源管理類
template
<
class
resource>
class
resourcemanagerb
// 通過指定路徑載入資源
uri& load(uri& uri);
// 通過指定路徑解除安裝資源
void
unload(uri& uri);
// 解除安裝所有資源
void
unloadall();
// 得到資源的指標
resource* getptr(uri& uri);
// 得到資源的引用
resource& get(uri& uri);
};
//***********************************==
//** 以下為資源管理類的介面實現** //
//***********************************==
template
<
class
resource>
uri& resourcemanagerb::load(uri& uri)
return
uri;
} template
<
class
resource>
void
resourcemanagerb::unload(uri& uri)
} template
<
class
resource>
void
resourcemanagerb::unloadall()
template
<
class
resource>
resource* resourcemanagerb::getptr(uri& uri)
template
<
class
resource>
resource& resourcemanagerb::get(uri& uri)
第五步 影象和聲音
在遊戲規則的基礎之上,開始繪製各種影象以及遊戲音效用來製造遊戲氛圍。如果你要更進一步的發展,你就需要建立更多的影象效果(gfx)和特效(sfx),並且很可能不會使用它們中的某些。而且,隨著整個程序的發展,這一步可能還會繼續下去。
第六步 編寫你的遊戲
一旦你有你有了你的遊戲引擎,你就可以開始編寫你的實際**了。這步將關係到一切與遊戲規則,故事情節等相關**工作。還有,這步也關係到了遊戲迴圈。遊戲迴圈反覆地更新一切遊戲所需要的資料。可看如下**示例。如果你的引擎能夠正確執行,這將會變得比編寫遊戲引擎更加容易,而且更有趣! 這裡也將很可能是你新增聲音檔案的地方。一旦這個步驟完成了,你該進行一項工作區完成遊戲的乙份複製。越想得到,你就越能得到!
game loop:
view plain
//你的遊戲迴圈會因為各種不同的遊戲而不同,尤其是對一些棋類遊戲,以下只是乙個簡單的示例
while
(!game.lost())
//如果遊戲失敗,則退出迴圈
第七步 **優化
並不是因為你成功地實現了你的遊戲,就意味著你就完成整個工作。除了在你的**中新增詳細的記錄說明外,還很可能需要對你的**進行一些優化處理。這步關係到了記憶體的使用(盡量不要使用全域性變數,檢查記憶體洩露等),還有程式執行效率(確保你的**執行效率不要太慢,否則cpu很容易發生超載)。常規的程式除錯也可以在這有效地組織起來。
第八步 打包發售
既然你的遊戲已經製作完成,你就需要將它打包起來並依照你的意願進行發售。至於如何打包,應該盡量使你的遊戲檔案有組織地進行存放並且將所有檔案放在乙個資料夾下以便打包,這會使你的遊戲發售變得更加easy.^_^
c程式設計8
乙個迴圈體內又包含另乙個完整的迴圈結構,稱為迴圈的巢狀。在while迴圈和do while迴圈中,只在while後面的括號內指定迴圈條件,因此為了使迴圈能正常結束,應該在迴圈體中包含使迴圈趨於結束的語句 如i i i 1 for迴圈可以在表示式3中包含使迴圈趨於結束的操作,甚至可以將迴圈體的操作全部...
遊戲程式設計基礎day8
rect類擁有的方法clamp 將矩形移動到另乙個矩形當中 move x,y 移動矩形 xy 支援數字型別 使用方法跟屬性 目的 為了簡便我們對圖形進行操作第乙個小遊戲 動感火車 import pygame import time import math pygame.init screen obj...
C程式設計題 8
題目 輸入兩個正整數 將 化為二進位制數,然後將這兩個二進位制數作二進位制加法運算,再將結果化為十進位制數輸出。c static int n 18 static void main string args sx console.writeline y sy for int i 0 i 24 i co...