当前位置:首页 » 编程软件 » vc游戏编程

vc游戏编程

发布时间: 2023-04-29 19:34:34

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;

热点内容
安卓的手机来电闪光灯在哪里 发布:2025-07-10 16:49:02 浏览:836
androidstudio导入as项目 发布:2025-07-10 16:43:37 浏览:538
c语言中编译和编辑的差别 发布:2025-07-10 16:43:35 浏览:486
iphone清除缓存软件 发布:2025-07-10 16:20:03 浏览:680
以下所列的c语言常量中错误的是 发布:2025-07-10 16:19:00 浏览:852
怎么给安卓应用重命名 发布:2025-07-10 16:18:01 浏览:1001
php调用栈 发布:2025-07-10 15:58:33 浏览:870
android页面返回 发布:2025-07-10 15:58:22 浏览:463
php解析多层json 发布:2025-07-10 15:51:36 浏览:874
谷歌x86版安卓系统哪个最流畅 发布:2025-07-10 15:51:33 浏览:446