夜深人靜做遊戲 之四

2021-04-01 23:37:51 字數 1682 閱讀 8080

2.4 走四方

人物雖然能移動了,可是只能在這個屋子裡面也好像不是太好,從小我就是乙個好動的孩子,所以我們遊戲裡面的主腳自然也不能是乙個安靜的人羅,我們要走出這片天地,到外面的世界去看看.

所以,我們要走四方,簡單的說就是要能地圖切換.我們就來解決地圖切換的問題.在開始裝載的小節裡面,我們知道了如何裝載,而且在那段程式裡面我們載入了所有我們要用的資源,這裡也包含不同的地圖資源,所以,這裡我們不用再載入一次了,我們可以直接進行地圖切換了.

我們把地圖切換寫在重新整理頁面的函式裡面.原理是,我們要在原圖中設定一些座標作為地圖的切入點,一旦人物移動到我們提前設定好的位置,就把頁面置換過去,換上新地圖的指標.程式如下:

void

refresh()

else

if((man1.tx<=470) && (man1.tx>=450) && (man1.ty<=310) && (man1.ty>=290) )

//到達這個座標時進入最後乙個房間

else

if((man1.tx<=70) && (man1.tx>=50) && (man1.ty<=450) && (man1.ty>=430) )

//到達這個座標時進入遊戲結束畫面

flip();

} 完成上面的**以後,我們的主腳就可以隨心所欲的在這個我們為他創造的世界裡面自由活動了.

2.5 我不想成為啞巴

除了走路以外,主腳總不能是個啞巴啊,至少我還沒有看到過不能說話的遊戲,啞巴怎麼能完成我們交給他的人物嘛,而且,我們總要通過遊戲向玩家傳遞一些資訊嘛,所以說話或者說文字的輸出那是乙個必然的而且基礎的功能.

下面我們來完成對話,還是先說原理吧:說白了,對話其實就是在

direct

下輸出文字,主腳和不同的npc互動的輸出文字,就形成了對話.

輸出文字其實很簡單,

為了向頁面輸出文字,我們首先要獲得頁面的hdc(裝置描述控制代碼),然後呼叫windows gdi 函式向頁面輸出文字。由於獲得控制代碼後將不能使用directdraw函式改動頁面,所以輸出完文字後要立刻釋放控制代碼。

hdc hdc;

if (lpdds***->getdc(&hdc) == dd_ok)//拿控制代碼

只要完成上面的功能就可以在頁面輸出文字了,在我的這個demo裡面我把他封裝在

void

man::say(char words[255])

裡面,於是只要呼叫這個函式就可以在頁面輸出文字.那麼怎麼和其他的npc對話呢,那其實已經很簡單了.我又寫了個說話的函式,在裡面進行的座標的判斷,通過不同的座標達到和不同的npc進行對話,不過這個辦法並不科學,一般現在使用的方法是碰撞檢測,由於碰撞檢測又是乙個很龐大的技術,所以這裡不再累贅了,有興趣的朋友可以找一些專業的遊戲程式設計的書來看看.

下面我們羅列出部分,完整的程式你可以自己看我的demo.

void

man::speak() }

一旦完成了對話,人物移動和地圖切換,實際上就完成了乙個demo需要的最最基本的要求,雖然乙個遊戲還包含很多東西,不過能這樣已經可以做成乙個有劇情的單線rpg了,呵呵,是不是覺得特有成就感啊,是啊,當時我能做的這種地步的時候也是覺得特別高興,有點仙劍之父的意思(大言不慚,bs!).

夜深人靜寫演算法 排列問題 分治)

採用分治法,把乙個字串看成兩部分 第一部分是它的第乙個字元,第二部分是後面的所有字元。這樣字串的全排列就變成了第二部分的全排列,前提是要將第乙個字元的情況全部列舉出來。1 首先求所有可能出現在第乙個位置的字元,也就是把第乙個字元和後面的所有字元交換 2 然後在把後面的字串看成新的字串從 1 如果最後...

夜深人靜寫演算法 快速排序(分治)

快速排序 採用分治的方法 一 1 將陣列的第乙個作為參考值,將所有小於該值的數移動到改值左側,將所有大於該值的數移動到陣列右側 利用兩個指標分別從陣列的首尾開始向中間掃瞄 2 將參考值的左側和右側看作新的兩個陣列 3 重新從 1 開始,直到陣列的大小為0 二 如圖為第一次遞迴,將小於23的移到左側,...

夜深人靜寫演算法(十二) 凸包

三 graham 掃瞄法 四 凸包的應用 人生當中成功只是一時的,失敗卻是主旋律,但是如何面對失敗,就把人分成了三六九等。有的人會被失敗擊垮,一蹶不振 有的人卻能夠直面失敗,迎難而上。這個世上只有一種英雄主義,那就是 認清生活的真相,並且仍然熱愛它!難道向上攀爬的這條路不是比站在頂峰更讓人熱血澎湃嗎...