c語言,面向過程的程式設計。
將待解決的問題直接拆解成現有的資料型別和邏輯步驟。是從計算機的角度去看待和考慮相應的問題的。
c++,物件導向的程式設計。
是在問題空間思考和解決問題。先將待處理的問題,按實際的情況拆解為不同的類和物件,在類物件之內再分解成計算機現有的資料型別和邏輯步驟。類與類之間通過訊息來相互驅動,類本身在訊息驅動下,會從一種狀態轉換為另一種狀態。有些類的狀態及轉換比較容易把握,有些則比較難。
類之間的靜態關係最基本的有兩種:
1、組合關係composition(或稱聚合關係aggregation)(has-a關係)
帶菱形的箭頭表擁有者
2、繼成關係
帶空心箭頭表基類
遊戲程式設計中,如果只是簡單地把對個體的處理,按一般的邏輯順序(接受輸入,處理移動碰撞,渲染場景)放到幀迴圈中。認為應該完全依賴幀迴圈來處理,那麼還是用的面向過程的方法在思考和處理問題。
實際上應該首先確定幾個實時監測類的物件(比如玩家的輸入監測,玩家所操控的role的當前的部分運動狀態的監測),由幀迴圈來驅動。然後再由這這幾個實時監測類物件向其他類發訊息驅動。然後再以多公尺諾骨牌的方式來一級級地驅動,整個程式邏輯就起來了。
另外,ai的生成,role在場景中的當前空間位置的計算等等,也都要放到幀迴圈中加以執行。但它們不屬於實時監測者物件。它們應該稱作需要實時更新的內容。
其實實際監測類物件和實時更新內容的物件,不應該看作幀迴圈中的邏輯過程。而應該看作是對時間訊息的響應。只是在諸多需要時間訊息驅動的物件中,在響應時間訊息上有一定的先後而已。
需要注意的是,在現實生活中的所謂實時性是「連續的」而非「離散的」。而程式中,做不到,因為一般應用程式的最小時間單位就是「幀」。為了在程式中也能模擬連續的時間,需要在每次幀迴圈到來時,都做相應的流逝時間的計算。
總之,應該徹底地從面向過程的思維方式中轉變過來,用「物件+狀態+訊息」的思維方法來分析問題和解決問題。哪怕對遊戲這種實時性要求這麼高的程式而言,也不例外。
重讀Essential C 讀書筆記2
重讀essential c 讀書筆記2 by sssa2000 7 25 2004 第二章 面向過程的程式設計風格 很久以前我也很困惑為什麼要有面向過程物件導向的程式設計風格,雖然現在已經有很深的體會。其實不管是什麼風格,只要能更好地解決問題就是好的風格。1 傳值和傳址 lippman 在說明這個問...
C C 學習筆記(一)
一 c 層次 的優化 1 無符號型別應用於 除法和餘數,迴圈計算,陣列下標 帶符號型別應用於 整型到浮點的轉化。2 while與for的比較 for比while編譯後指令少,不占用編譯器且無需跳轉。3 陣列與指標 指標能訪問任意位置,當不必要訪問時用陣列可優化 提高穩定性。4 小迴圈完全展開。5 避...
重讀博奕論 一 博弈基礎
博弈的基本要素包括 參與人 players 指作決策的個體,每個參與人的目標都是通過選擇行為來最大化自身的效用。有時候,模型會明確引入 虛擬參與人 pseudo players 這個概念,這個角色通常以純機械般的方式來採取德。比如說 自然 就是一種虛擬參與人,它在博弈的特定時點上以特定的概率隨機選擇...