終於能有時間安下心來學程式了,我要堅持到最後寫出自己的遊戲!
鄭州這裡遊戲開發書籍幾乎沒有,只好到網上先找個教程自學,不過以後一定要買個國外的教程看,然後邊看邊寫若有疑問再在論壇上發帖子提問或問身邊的高手。我想這大概是我這段時間的偉大計畫吧!
開發前曾在論壇上看了很多關於用opengl還是directx開發遊戲的爭論,直到看到暈,我還是覺得用directx還是舒服點.
先是用directx3d建立了乙個視窗,執行例子的時候竟然什麼都看不到,用dxdiag檢視原來顯示卡不支援directx3d,下了乙個新的驅動就好了。
這是第乙個程式,每個字母都是自己打出來的,可是完全沒有自己的風格,因為這還是完全照著例子打的,
執行程式需要安裝directx sdk,我在華軍軟體園上搜尋了乙個,然後安裝,安裝後用vc建立乙個控制台程式,然後
在project的setting中加入d3d8.lib。建立乙個main.cpp程式,並寫入以下內容:
#include
lpdirect3d8 g_pd3d = null;
lpdirect3ddevice8 g_pd3ddevice = null;
hresult initialised3d(hwnd hwnd)
d3ddisplaymode d3ddm;
if (failed(g_pd3d->getadapterdisplaymode(d3dadapter_default,&d3ddm)))//查詢當前顯示模式
d3dpresent_parameters d3***;
zeromemory(&d3***,sizeof(d3***));//清除d3***中的資料?
d3***.windowed = true;
d3***.swapeffect = d3dswapeffect_copy_vsync;
d3***.backbufferformat = d3ddm.format;
//建立裝置並用軟體加速
if (failed(g_pd3d->createdevice(d3dadapter_default, d3ddevtype_hal, hwnd,
d3dcreate_software_vertexprocessing, &d3***, &g_pd3ddevice)))
return s_ok;
}//乙個繪製圖形的函式
void render()
g_pd3ddevice->clear(0,null,d3dclear_target,d3dcolor_xrgb(255,255,0),1.0f,0);
g_pd3ddevice->beginscene();
g_pd3ddevice->endscene();
g_pd3ddevice->present(null,null,null,null);
}//清空所建立的所有物件,在程式結束時使用
void cleanup()
if (g_pd3ddevice != null)
}//遊戲迴圈,檢查訊息迴圈裡裡有沒有訊息,如果沒有就呼叫render來畫圖
void gameloop()
else}}
//響應訊息函式並處理
lresult winapi winproc(hwnd hwnd,uint msg,wparam wparam,lparam lparam)
break;
}return defwindowproc(hwnd,msg,wparam,lparam);
}//window主函式,建立視窗,並顯示
int winapi winmain(hinstance hinst, hinstance, lpstr, int)
;registerclas***(&wc);
100,100,500,500,getdesktopwindow(),null,wc.hinstance,null);
if (succeeded(initialised3d(hwnd)))
cleanup();
unregisterclass("directx",wc.hinstance);
return 0;}/*
translatemessage的詳細說明
translate 是轉化的意思,整個函式有什麼用呢?對了,是把 虛擬鍵碼 轉化為 字元碼 ( msdn 原文:translates virtual-key messages into character messages 。 虛擬鍵碼 (virtual-key) 是什麼?其實在之前檢測全域性鍵盤裡面就用過,那是對鍵盤上不同鍵鈕的編碼,用來區分每乙個鍵鈕。 那麼字元碼 (character) 實際上是 ascii 碼的乙個子集。 實現方式是,當認定訊息需要轉化為 字元碼 訊息,該函式就會向自己的訊息佇列裡 post 乙個 wm_char 的訊息 (wm_char == 258),因為是使用 post 方式,所傳送的訊息會插隊到最前面。 要轉化的 虛擬鍵碼 從原訊息的 wparam 中取得,轉化後的 字元碼 則放在 wm_char 訊息的 wparam 中。
舉個例子,當 a 鍵被按下的時候會發出 wm_keydown 訊息,並且附帶乙個虛擬鍵碼幫助我們知道被按下的是哪乙個鍵。但是,a 被按下的情況不止一種,根據不同的其他因素,可能是 大寫 的 "a" ,也可能是 小寫 的 "a",完全視乎當時是否開啟大寫輸入 (caps lock) 和有沒有同時按下 shift 鍵。 translatemessage() 會自動識別這些情況,保證在 wm_char 訊息的 字元碼 是希望得到的效果。
*/乙個下午時間才把這個程式完全搞懂,幸好原來有window程式設計的基礎,不然我想會更久。
我的第乙個遊戲 SNAKE
自己做的貪吃蛇遊戲,console視窗的,大家沒事的時候就玩玩吧 這段時間實在無聊 由於期末考的原因,acm落一邊了,等暑期集訓再好好搞,呵呵。閒來無事,就想動手編個小遊戲自己樂著玩兒。早就想編個貪吃蛇,於是就動手了。開始的時候構架出來得很清晰,各類物件敲得很快,大概3個多小時,基本的雛形就有了。然...
第乙個遊戲 啟程 1
通過從0寫這個專案,掌握遊戲開發所說要的c c 的高階特性,快速強化c c 掌握遊戲開發的基本概念 基本流程,快速入門遊戲開發。玩遊戲是快樂的,開發遊戲同樣是快樂的,甚至更快樂,享受 造物主 的樂趣。蘋果wwdc大會上,一位82歲的日本老奶奶若宮正子,是一名銀行退休職員,成了全場最年長開發者。蘋果公...
我的第乙個程式
我的第乙個vc程式終於寫完了,花了2周,之前從沒有用vc寫過程式,也沒讀過什麼程式,只是在看書,看了幾百頁 mfc windows程式設計 正好有個機會,老師讓寫個vc程式,就試著寫了。程式的功能是不同地方的access的更新的記錄整合到一台機子上的access中,支援斷網自動連線,用的是socke...