vc游戲編程
A. c++游戲開發,怎麼學習,詳細一些
編些東西,
錢能. C++程序設計教程. 第一版.清華大學出版社
然後再學一下VC++,再自州冊己試著多編一些東西,編程最重要的是積累經驗。
Visual C++游戲編程人員至少要會的:
c++語言的語法,標准庫
會使用VC,
了解DirectX編程.
下面的多多益善:
軟體工程,會用某個源代碼管理工具(VSS SVN什麼的)
數據結構和演算法,游戲編程對效率比較關心。
英語, 許多好的資料都是英文的。
經驗, 這個最重要。
再給你介紹一些網站能找c++游戲編程的資料:
游戲製作人的網路平辯仔台
中國網游研發中心
購買游戲編程書籍的專業網站
學一個月,可以用VC寫一些小程序自己玩玩
學兩個月,可以用VC寫像樣點的東西在周圍人面前炫炫
學三個月,可以用VC給老闆開始幹活了
學六個月,開始重頭去學C++
學一年後,決定要不要繼續,if(繼續) 學習MFC、ATL、STL、C#、BCB、Network、Databa
se、Algorithm... else開始就是個錯誤
學三年後,學會怎麼來用編程語言來解決問題,VC、BCB等都只是解決問題的工具。這時候冊灶宏
你如果還在學C++,你可以從事軟體開發這個很有「前途」的職業了
B. VC++游戲編程需要什麼知識
伺服器端需要winsock知識,這本含做橋不錯,我看的
《VC++網路通信程胡埋序開發指南》機械談猛工業出版社
其他不用了,演算法方面可以,面向對象的東西熟就行
客戶端要學direct X ,圖形引擎
C. 求vc中游戲編程的詳細步驟
#include "CDDraw.h"
typedef struct _DISPLAYMODE {
DDSURFACEDESC2 * pddsdMode;
DWORD dwNumMode;
}DISPLAYMODE;
DISPLAYMODE dmModes;
static HRESULT WINAPI ModeEnumRecord( DDSURFACEDESC2 * pNewMode,
VOID * pRecordInfo );
static BOOL WINAPI DDisplayEnumerate( GUID * pGUID,
LPSTR ,
LPSTR ,
LPVOID , HMONITOR );
/****************************************
* 函數名: CDDraw(...)
* 功能: 構造函蠢談數
* 版權所有 mochsh, 2004
*****************************************/
CDDraw::CDDraw()
{
//初始化變租檔敬量
hWnd = NULL;
bFullScr = TRUE;
ScreenW = 640;
ScreenH = 480;
ScreenC = 16;
lpDD = NULL;
lpDDSPrimary = NULL;
lpDDSBack = NULL;
}
/****************************************
* 函數名: ~CDDraw()
* 功能: 析構函數
* 版權所有 mochsh, 2003
*****************************************/
CDDraw::~CDDraw()
{
if(lpDD!=NULL){
if(lpDDSBack!=NULL){
lpDDSBack->Release();
lpDDSBack = NULL;
}
if(lpDDSPrimary!=NULL){
lpDDSPrimary->Release();
lpDDSPrimary = NULL;
}
lpDD->Release();
lpDD = NULL;
}
}
/**************************************************
* 函數名: InitDDraw(...)
* 功能: 初始化DDraw,並且創建主表面和翻轉緩沖表面
* 版權所有 mochsh, 2003
***************************************************/
BOOL CDDraw::InitDDraw(HWND hWd,
BOOL bFScr,
DWORD ScrW,DWORD ScrH,
DWORD BitCount )
{
//--------------------------按給弊慎出的條件初始化變數
hWnd=hWd;
bFullScr=bFScr;
if(bFScr){//全屏模式
if(ScrW <= 640) { ScreenW = 640; ScreenH = 480; }
else if(ScrW <= 800){ ScreenW = 800; ScreenH = 600; }
else if(ScrW > 800) { ScreenW = 1024; ScreenH = 768; }
else {ScreenW=800; ScreenH = 600;}
if(BitCount<=8) ScreenC = 8;
else if(BitCount<=16)ScreenC = 16;
else if(BitCount<=24)ScreenC = 24;
else if(BitCount<=32)ScreenC = 32;
else ScreenC=16;
//檢查模式是否有效
CheckDisplayMode();
}
else{//窗口模式
ScreenW=ScrW;
ScreenH=ScrH;
}
//--------------------------初始化DirectDraw環境
HRESULT ddrval;
//創建DirectDraw對象
ddrval = DirectDrawCreateEx(NULL,(void **) &lpDD,IID_IDirectDraw7,NULL);
if( FAILED(ddrval) ) {
//創建DirectDraw對象出錯時進到這里來
//在這里可以記錄創建DirectDraw對象的出錯信息
return FALSE;
}
//******全屏模式***********//
if( bFullScr ){
//設置協作等級
ddrval = lpDD->SetCooperativeLevel( hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT );
if( FAILED( ddrval )){
//設置協作等級出錯時進到這里來
//在這里可以記錄設置協作等級的出錯信息
return FALSE;
}
//設置顯示模式
ddrval = lpDD->SetDisplayMode( ScreenW,ScreenH,ScreenC,NULL,NULL);
if( FAILED( ddrval ) ){
//設置顯示模式出錯時進到這里來
//在這里可以記錄設置顯示模式的出錯信息
return FALSE;
}
//創建主表面
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
DDSCAPS_FLIP |
DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
if (ddrval!=DD_OK) {
//創建主表面出錯時進到這里來
//在這里可以記錄創建主表面的出錯信息
return FALSE;
}
//創建後台緩沖表面
DDSCAPS2 ddscaps;
ZeroMemory(&ddscaps,sizeof(ddscaps));
ddscaps.dwCaps=DDSCAPS_BACKBUFFER;
ddrval=lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack);
if (ddrval!=DD_OK) {
//獲取後台緩沖表面出錯時進到這里來
//在這里可以記錄後台緩沖表面的出錯信息
return FALSE;
}
return TRUE;
}
//******窗口模式***********//
else{
//設置協作等級
ddrval=(HRESULT)lpDD->SetCooperativeLevel( hWnd, DDSCL_NORMAL );
//創建主表面
DDSURFACEDESC2 ddsd;
ZeroMemory( &ddsd, sizeof(ddsd) );
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
//創建主表面,並取得指向主表面的指針lpDDSPrimary
ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
if( FAILED( ddrval )){
//創建主表面出錯時進到這里來
//在這里可以記錄創建主表面的出錯信息
return FALSE;
}
//使用裁剪器
UseClipper();
//創建後台緩沖表面
//:::::::ddsd前面已經聲明
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT |DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
ddsd.dwWidth = ScreenW;//寬的解析度
ddsd.dwHeight = ScreenH;//高的解析度
//創建一後台緩沖表面
ddrval = lpDD->CreateSurface( &ddsd, &lpDDSBack, NULL );
if( FAILED( ddrval )){
//創建後台緩沖表面出錯時進到這里來
//在這里可以記錄創建後台緩沖表面的出錯信息
return FALSE;
}
}
return TRUE;
//--------------------------初始化DirectDraw環境完成
}
/**************************************************
* 函數名: Flip(...)
* 功能: 翻轉表面==>顯示
* 版權所有 mochsh, 2003
***************************************************/
void CDDraw::Flip( LPRECT pRectWin )
{
HRESULT ddrval=1;
if( lpDDSPrimary && lpDDSBack )
{
//檢查表面是否丟失
if (lpDDSPrimary->IsLost()==DDERR_SURFACELOST)
lpDDSPrimary->Restore();
if (lpDDSBack->IsLost()==DDERR_SURFACELOST)
lpDDSBack->Restore();
do{
if(bFullScr==1)
ddrval = lpDDSPrimary->Flip( NULL, DDFLIP_WAIT );
else
ddrval = lpDDSPrimary->Blt( pRectWin,lpDDSBack,NULL,DDBLT_WAIT,NULL);
//翻轉表面後的信息檢測
if( ddrval == DD_OK )
break;
else if( ddrval == DDERR_SURFACELOST ){
if( FAILED(lpDDSBack->Restore()) )
break;
if( FAILED(lpDDSPrimary->Restore()) )
break;
}
else if( ddrval != DDERR_WASSTILLDRAWING )
break;
}while( 1 );
}
}
/**********************************************
* 函數名: UseClipper(...)
* 功能: 創建一個裁剪器,並將它附於主表面
* 版權所有 mochsh, 2003
***********************************************/
HRESULT CDDraw::UseClipper( void )
{
HRESULT ddrval;
LPDIRECTDRAWCLIPPER lpClipper = NULL;
//創建一個剪裁器對象
ddrval = lpDD->CreateClipper(0, &lpClipper, NULL);
if ( ddrval != DD_OK){
//調用CreateClipper創建剪裁器對象出錯進到這來
//在這里可以記錄出錯信息
return ddrval;
}
//將裁剪器設置為hWnd指向的窗口的客戶區的范圍
ddrval = lpClipper->SetHWnd(0, hWnd);
if ( ddrval != DD_OK){
//調用SetHWnd設置窗口句柄出錯進到這來
//在這里可以記錄出錯信息
return ddrval;
}
//將裁剪器附於主表面
ddrval = lpDDSPrimary->SetClipper(lpClipper);
if ( ddrval != DD_OK){
//將裁剪器附於主表面出錯進到這來
//在這里可以記錄出錯信息
return ddrval;
}
//主表面已經自動增加了裁剪器的索引值,所以應將它釋放
if( lpClipper != NULL ) {
lpClipper -> Release();
lpClipper = NULL;
}
return DD_OK;
}
/**********************************************
* 函數名: LoadBMPSurface(...)
* 功能: 將BitmapFile指定的點陣圖
* 格式圖像載入剛剛Surf指向的表面
* 版權所有 mochsh, 2003
***********************************************/
BOOL CDDraw::LoadBMPSurface(LPDIRECTDRAWSURFACE7 &lpSurf, //要載入圖像的表面指針
LPCSTR BitmapFile )//源圖像的路徑
{
HDC hdcImage;
HDC hdc;
HBITMAP hbm;
BITMAP bm;
HRESULT ddrval;
if( lpSurf == NULL )
return FALSE;
// 將點陣圖作為文件來讀取
hbm = (HBITMAP)LoadImage(NULL,
BitmapFile,
IMAGE_BITMAP,
0, 0,
LR_LOADFROMFILE |
LR_CREATEDIBSECTION);
if (hbm == NULL){
//載入圖像失敗時進到這里來
//在這里可以記錄載入圖像失敗的信息
return FALSE;
}
//函數功能:創建一個與指定設備兼容的內存設備上下文環境(Device Context)
//創建一個與應用程序的當前顯示器兼容的內存設備上下文環境
hdcImage = CreateCompatibleDC(NULL);
if (!hdcImage){
//創建設備上下文出錯
return FALSE;
}
//選擇點陣圖對象到剛剛創建的內存設備上下文環境(DC)
SelectObject(hdcImage, hbm);
//獲取點陣圖寬與高
GetObject(hbm, sizeof(bm), &bm);
//獲取表面的寬與高
DDSURFACEDESC2 ddsd;
ddsd.dwSize = sizeof(ddsd);
lpSurf->GetSurfaceDesc(&ddsd);
if( BitmapFile!=NULL )
{
if ((ddrval = lpSurf->GetDC(&hdc)) == DD_OK)
{
//將源點陣圖復制到表面,可以進行拉伸或收縮
StretchBlt( hdc,
0, 0, ddsd.dwWidth, ddsd.dwHeight,
hdcImage,
0, 0, bm.bmWidth, bm.bmHeight,
SRCCOPY);
lpSurf->ReleaseDC(hdc);
}
}
DeleteDC(hdcImage);
if( ddrval != DD_OK ) {
//復制矩形塊失敗
return FALSE;
}
return TRUE;
}
return hr;
}
初始化設備,放不下,沒給全。
D. 有關VC游戲編程的幾點建議
對於剛剛進入游戲開發領域的初學者,有時候可能會覺得不知道怎樣才能掌握游戲開發的知識和技術。其實,絕大多數的游戲開發,更多的是關於對開發過程的基本了解,而很少是如何寫復雜的代碼。開發者也需要懂得一些游戲開發的竅門。
盡管每個人學習開發的過程會不一樣,然而無論如何,系統的學習方法對每個學習者來說都是至關重要的。對於初學者,應該經常向資深的游戲開發者學習,通過他們的直播和視頻,學習游戲開發的技巧。你從這些專家們身上學到的東西越多,你就可以越快成為優秀的開發者。
對於「系統的學習方法」,大多數人都不會陌生。但事實上不是人人都可以做得到。即使是那些已經工作了多年的開發者,也會忘記或忽視了一些有用的方法。以下渣碰,我們一起來分享10條給游戲開發初學者的建議。
大膽思考,從「小」開始
游戲開發的初學者不要只想著開發那些很牛的游戲,例如Quake和Starcraft。我們鼓勵開發者敢於大膽思考,解放自己的思維空間。不過,對於你未來的雄心壯志,最好還是從開發一個小游戲開始,然後再根據你自己的經驗循序漸進。
你可以從一個簡單的游戲開始你的開發工作,尤其是當你要使用一些新工具來開發游戲的時候,盡量先從簡單的游戲開始。例如俄羅斯方塊,這個經典的益智游戲具備了一個成功游戲的所有要素。它只有一個游戲循環,只有當用戶退出的時候才會結束。它使用了視覺化的功能和動畫,變得更有吸引力。另外,它的游戲難度是簡單的,但教會了開發者很多東西。所以,先嘗試著手開發像俄羅斯方塊這樣簡單的游戲,你會獲得全面的學習體驗。
反復嘗試你自己的游戲
游戲要想成功必須要有趣,它要比高端的圖形和故事有趣得多。如果連你自己都無法對自己的游戲產生興趣,那麼沒有人會對它感興趣了。因此,你得反復地嘗試這些游戲型梁差,即使它們很簡單。你可以努力從中找到方法,如何使它們變得更有趣和更令人上癮。一旦你滿意了它們的開發效果,你就可以說服別人來玩你的游戲了。你可以邀請不同的人來玩游戲,從小孩到老人,並觀察他們的反應。
如果他們看起來對你的游戲感興趣,這很好。如果他們沒什麼興趣,而且還有不滿,那麼你就知道你的游戲需要改善了。詢問他們的意見,游戲的哪些方面是他們不滿意的,並進行必要的調整。
關注其他游戲開發者
目前游戲行卜皮業的廣泛發展令世界的游戲開發者數量呈爆炸性的增長。因此,要在市場上引起關注是很難的。但這並不是一件壞事,因為你可以與很多專家和同行交流,他們可以幫助你成為一名成功的游戲開發者。
你可以關注一些知名的游戲開發者的直播。例如,在 Livecoding.tv上就集結了不少經驗豐富的游戲開發者,他們會直播開發游戲的編碼過程,還會提供視頻,方便有興趣的觀眾進一步了解和學習。
關注新聞
在任何行業,游戲開發的重點取決於目前的趨勢。一個特殊類型的游戲可能會在當前的市場環境下受到歡迎,但可能過不了多久,它就被取代了。如果你覺得你的創意是與眾不同的,而且是值得你去追求的,那麼你不需要虔誠地追隨潮流,但是你還是需要留意它們。
現在有許多平台可以讓你隨時了解在游戲開發領域的趨勢和新聞。這些平台包括了Gamasutra 和Board Game Geek。你還可以關注Edge magazine,一個關於游戲開發的電子雜志網站,或者是在Livecoding.tv上那些游戲開發者的直播和視頻。
嘗試類似的游戲並嚴謹地評估它們
現在,像Subway Surfers(地鐵跑酷)和Candy
Crush(糖果傳奇)這些游戲已經完全不是新概念了。它採取了大量很酷的開發工作,把這些通用的游戲概念轉變為有數百萬美元收入的游戲。這包括了可愛的聲音、視覺效果,養眼的界面以及質朴的人物。因此,如果你懂得用正確的方法去設計一個游戲,並且為了設計好它,你會去看其它相似的著名游戲,那麼即使只是最簡單的游戲,如俄羅斯方塊,它也一樣可以很出名。
嘗試用批判性的思維去評估這些游戲,是什麼令它們如此出色,並且嘗試把它們的成功之處運用到你的游戲中。它會令事情變得有趣。
嘗試,測試,寫碼
當你能夠在開發游戲時同時處理多個工作任務的時候,你將開始想知道成為一名專業游戲開發者是怎樣的。如果你有了一個特別的靈感,你應該立即執行它,並測試它。這部分的工作開始得越慢,你就越難在工作計劃中變得積極。
盡可能發揮創意
如果沒有原創性,游戲開發就沒有意義了。因此不要害怕嘗試你的瘋狂想法,並把它們融入到你的游戲中。你沒有必要遵循書本上的具體定律,甚至在游戲環境中,人類本身的認知並不重要,只要它對玩家來說是有趣的。
從不停止學習
在游戲開發中,如果你沒有一個永遠學習的態度,你不可能成為一個征服所有人的專家。多年來,我們已經看到了有很多游戲開發平台和開發語言出現。游戲開發者不可以避免自己的學習歷程可能會有變緩的風險,因此要多關注新聞,在你的游戲中多作嘗試和融入新的趨勢。它將令你的游戲有一個最新的前景。
把它變成一件日常的事情
游戲開發永遠不會突然取得成功,你需要每天勤奮地工作。不要放過每一個機會去玩你的游戲並為它工作,它將成為你的第二天性。如果游戲不有趣,那就注入熱情,用天馬行空的方法來讓它變得是有價值的。如果你不能自我激勵地為自己的游戲工作,你有可能在你一生中也無法獲得成功。
E. c++做游戲教程
你可以先去【繪學霸】網站找「游戲設計/游戲製作」板塊的【免費】視頻教程-【點擊進入】完整入門到精通視頻教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=307&zdhhr-11y04r-2010284938382716748
想要系統的學習可以考慮報一個網路直播課,推薦CGWANG的網路課。老師講得細,上完還可以回看,還有同類型錄播課可以免費學(贈送終身VIP)。
自製能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭:王氏教育。
王氏教育全國直營校區面授課程試聽【復制後面鏈接在瀏覽器也可打開】: www.huixueba.com.cn/school/3dmodel?type=2&zdhhr-11y04r-2010284938382716748
在「游戲設計/游戲製作」領域的培訓機構里,【王氏教育】是國內的老大,且沒有加盟分校,都是總部直營的連鎖校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合基礎差的學生。
大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載: www.huixueba.com.cn/Scripts/download.html
F. vc++環境下的c++游戲源代碼,求提高求進步。。。
#define N 200
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/*得分*/
int gamespeed=50000;/*游戲速度自己調整*/
struct Food
{
int x;/*食物的橫坐標*/
int y;/*食物的縱坐標*/
int yes;/*判斷是否要出現食物的變數*/
}food;/*食物的結構體*/
struct Snake
{
int x[N];
int y[N];
int node;/*蛇的節數*/
int direction;/*蛇移動方向*/
int life;/* 蛇的生命,0活著,1死亡*/
}snake;
void Init(void);/*圖形驅動*/
void Close(void);/*圖形結束*/
void DrawK(void);/*開始畫面*/
void GameOver(void);/*結束游戲*/
void GamePlay(void);/*玩游型凱戲具體過程*/
void PrScore(void);/*輸出成績*/
/*主函數*/
void main(void)
{
Init();/*圖形驅動*/
DrawK();/*開始畫面*/
GamePlay();/*玩游戲具體過程*/
Close();/*圖形結束*/
}
/*圖形驅動*/
void Init(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
}
/*開始畫面,左晌租判上角坐標為(50,40),右下角坐標為(610,460)的圍牆*/
void DrawK(void)
{
/*setbkcolor(LIGHTGREEN);*/
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設置線型*/
for(i=50;i<=600;i+=10)/*畫圍牆*/
{
rectangle(i,40,i+10,49); /*上邊*/
rectangle(i,451,i+10,460);/*下邊*/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /*左邊*/
rectangle(601,i,610,i+10);/*右邊*/
}
}
/*玩游戲具體過程*/
void GamePlay(void)
{
randomize();/*隨機數發生器*/
food.yes=1;/*1表示需要出現新食物,0表示已經存在食物*/
snake.life=0;/*活著*/
snake.direction=1;/*方嚮往右*/
snake.x[0]=100;snake.y[0]=100;/*蛇頭*/
snake.x[1]=110;snake.y[1]=100;
snake.node=2;/*節數*/
PrScore();/*輸出得宴改分*/
while(1)/*可以重復玩游戲,壓ESC鍵結束*/
{
while(!kbhit())/*在沒有按鍵的情況下,蛇自己移動身體*/
{
if(food.yes==1)/*需要出現新食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)/*食物隨機出現後必須讓食物能夠在整格內,這樣才可以讓蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*畫面上有食物了*/
}
if(food.yes==0)/*畫面上有食物了就要顯示*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
}
for(i=snake.node-1;i>0;i--)/*蛇的每個環節往前移動,也就是貪吃蛇的關鍵演算法*/
{
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
/*1,2,3,4表示右,左,上,下四個方向,通過這個判斷來移動蛇頭*/
switch(snake.direction)
{
case 1:snake.x[0]+=10;break;
case 2: snake.x[0]-=10;break;
case 3: snake.y[0]-=10;break;
case 4: snake.y[0]+=10;break;
}
for(i=3;i<snake.node;i++)/*從蛇的第四節開始判斷是否撞到自己了,因為蛇頭為兩節,第三節不可能拐過來*/
{
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])
{
GameOver();/*顯示失敗*/
snake.life=1;
break;
}
}
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||
snake.y[0]>455)/*蛇是否撞到牆壁*/
{
GameOver();/*本次游戲結束*/
snake.life=1; /*蛇死*/
}
if(snake.life==1)/*以上兩種判斷以後,如果蛇死就跳出內循環,重新開始*/
break;
if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以後*/
{
setcolor(0);/*把畫面上的食物東西去掉*/
rectangle(food.x,food.y,food.x+10,food.y-10);
snake.x[snake.node]=-20;snake.y[snake.node]=-20;
/*新的一節先放在看不見的位置,下次循環就取前一節的位置*/
snake.node++;/*蛇的身體長一節*/
food.yes=1;/*畫面上需要出現新的食物*/
score+=10;
PrScore();/*輸出新得分*/
}
setcolor(4);/*畫出蛇*/
for(i=0;i<snake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,
snake.y[i]-10);
delay(gamespeed);
setcolor(0);/*用黑色去除蛇的的最後一節*/
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
} /*endwhile(!kbhit)*/
if(snake.life==1)/*如果蛇死就跳出循環*/
break;
key=bioskey(0);/*接收按鍵*/
if(key==ESC)/*按ESC鍵退出*/
break;
else
if(key==UP&&snake.direction!=4)
/*判斷是否往相反的方向移動*/
snake.direction=3;
else
if(key==RIGHT&&snake.direction!=2)
snake.direction=1;
else
if(key==LEFT&&snake.direction!=1)
snake.direction=2;
else
if(key==DOWN&&snake.direction!=3)
snake.direction=4;
}/*endwhile(1)*/
}
/*游戲結束*/
void GameOver(void)
{
cleardevice();
PrScore();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"GAME OVER");
getch();
}
/*輸出成績*/
void PrScore(void)
{
char str[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
}
/*圖形結束*/
void Close(void)
{
getch();
closegraph();
}
這個是貪吃蛇的代碼,裡面有詳細解釋,可以運行成功。
G. 學vc++游戲編程需什麼基礎
首先你要會,windows下程序的運行原理,會windows窗口應用程序設計,寫windows窗口應用程序:
a最常用的就是MFC編程
b或用platform sdk (也就是windows api)
MFC是對windows api的類封裝。
然後你就可以寫掃雷,五子棋這樣的程序了。
如果你想寫那種網游里的效果。那就路漫漫了。
找本directX的書看看吧。用opengl也一樣,會了這個,不難會那個。
openGL,還是directX了,兩個函數庫直接控制顯卡,
H. VC游戲編程與網路編程誰有前途
這兩個前途是差不多的,你應該按你自己的
興趣
學,還有技術有學精有學廣,完全看你自己了。學精了你可以成為一個技術
高手
,但你也只是技術高手了。學廣了你很好轉其它的方面,或者項目經理或者
構架
師,畢竟現在
軟體工程師
的生活不那麼好過,當然如果你是一個性格比較內向,不太會說話,做事情比較膽小的人,你還是專心閉胡搞技術吧,這樣可以無視自己的缺點。
你現在還是學生,所以最好還是打好基礎,vc的基礎要打好,網路和
圖形
的基礎也要打好。等你工作了,你自然會明白要學什麼了。
還有,很贊同上面一位的話,現在的中國已經容納不下一張平靜的書桌了,有彷徨的時間,隨便找
一本書
來看你都多懂很多東西了。相信我,你現在學什麼都是有用的。
另外,看了下有些人的話,說什麼什麼好學,lz你知道價值規律吧。我告訴你。越好租梁學的東西,會的人越多,你越不值錢。我這個意思也不是說一定要找最難學的,但是,一定不要找轎型攔最簡單的,除非你只是想了解下
軟體開發
,以後做相關事情,不然你會
泯然眾人
矣。
I. c++游戲編程過程
C++效率高,游戲一般需要運行的非常快,其它語言都不如C++編寫的程序快,所以一般用C++編寫游戲的表現效果是最好的,所以你的選擇很對,當然現學JAVA游戲編程也很好的。
學習編程最重要的是有恆心,多積累經驗,多自己嘗試編些東西,你上面寫的東西說明你已經有了很大的決心,這點很可貴,學習過程中有困難是肯定的,但我憑上面你說的相信你會成功的,建議如下:
找本C++教材,先自己看,推薦
錢能. C++程序設計教程. 第一版.清華大學出版社
然後再學一下VC++,再自己試著多編一些東西,編程最重要的是積累經驗。
寫游戲主要是理解面向對象,OOA,OOD,設計模式 和演算法設計,特別是游戲中設計到的各種尋路演算法,等等。! 完成了上面兩步工作,有空再多看看面向對象編程和設計方面的書籍,UML,設計模式類的書籍,再專門找些游戲編程的書經常研究,你就完全可以從事軟體開發這個很有「前途」的職業了
Visual C++游戲編程人員至少要會的:
c++語言的語法,標准庫
會使用VC,
了解DirectX編程.
下面的多多益善:
軟體工程,會用某個源代碼管理工具(VSS SVN什麼的)
數據結構和演算法,游戲編程對效率比較關心。
英語, 許多好的資料都是英文的。
經驗, 這個最重要。
再給你介紹一些網站能找c++游戲編程的資料:
游戲製作人的網路平台www.gameres.com
中國網游研發中心www.ogdev.net
購買游戲編程書籍的專業網站www.dearbook.com
http://..com/question/4986190.html?si=10
學一個月,可以用VC寫一些小程序自己玩玩
學兩個月,可以用VC寫像樣點的東西在周圍人面前炫炫
學三個月,可以用VC給老闆開始幹活了
學六個月,開始重頭去學C++
學一年後,決定要不要繼續,if(繼續) 學習MFC、ATL、STL、C#、BCB、Network、Databa
se、Algorithm... else開始就是個錯誤
學三年後,學會怎麼來用編程語言來解決問題,VC、BCB等都只是解決問題的工具。這時候
你如果還在學C++,你可以從事軟體開發這個很有「前途」的職業了
學習C++基礎然後到掌握C++游戲編程 這個過程要多久時間?
這個問題並不能給出明確的回答,因為學習這東西因人而異,如果你是很認真的學,作為正常人,2至3個月,可以在這個語言入門了(是指語言的基本用法,不包括界面之類的東西)。
但是要游戲編程,你得先學windows編程,例如MFC(據我所知,暴雪的魔獸世界也是以MFC為基礎編寫的),但是游戲裡面使用了大量的DirectX的函數,你還得花上兩個月的時間去學習DirectX編程。總體上需要的時間是8個月到一年。還有就是你一定要懂得一些基本的演算法和數據結構。
推薦《windows游凱橡盯戲編程大師技巧(第二版)》和它的下卷《3D游戲編程大師技巧》。作者講的比較淺顯易懂,而且風格也比較幽默。
opengl和directx都是標准,計算機圖形api的標准,和有沒有硬體加速無關
opengl是The Instry's Foundation for High Performance Graphics,公開標准,很多公司共同參與的
directx只有微軟參與,而且只能在微軟的平台上運行
PC游戲越來越趨向directx,主機還是趨向於opengl es,其實說白了這2個沒很大差別,學如高習的話directx資料多點,sdk也很好用。
順便盯和說一下,游戲的主流運行環境不是windows,是主機。
J. VC++游戲編程怎麼切換場景
設置一個條件,比如說bool isFight=true;
這個變數核岩緩為true就表示戰棗悶斗場景,否則是另改模一場景.
當碰撞到一起的時候,就改寫為true;