下载 >  开发技术 >  C++ > visual C++ 2008 太空射击游戏设计源代码
4

visual C++ 2008 太空射击游戏设计源代码

visual C++ 2008 开发的太空射击游戏设计源代码
2009-06-10 上传大小:2.04MB
分享
收藏 (4) 举报

评论 共6条

u011153142 代码不错,值得学习
2013-06-23
回复
shaoapinfg 就是没有声音效果啊
2013-06-04
回复
cdd990 还不错,基本功能都有,没有地图
2013-05-17
回复
ianzhuang 代码可以用,很不错
2013-05-06
回复
qq810720712 碰撞检测写的很好,值得 借鉴。谢谢
2013-04-27
回复
little54 参考下碰撞检测部分的代码很有帮助
2011-09-17
回复
太空射击游戏设计

一个太空射击类小游戏,可运行,有注释

立即下载
3D太空射击游戏unity3d完整源码

该游戏仅仅采用了unity3d里面自带的模型资源,包括(sphere,cube,cylined,capsule),是雷电游戏的3D版!完全是自己一个人独立完成!直接导入包就可使用。

立即下载
Visual C++经典游戏程序设计完整版+源代码

Visual C++经典游戏程序设计完整版pdf!

立即下载
基于C++开发的射击游戏

用DDraw实现射击游戏说明文档 要点一:画图自动切割 IDirectDrawSurface7::BltFast()方法中没有自动切割功能,即当画图元素超出窗口以外时不会自动切割,DDraw选择自动忽略不画,造成一旦超出窗口,画图元素会突然消失。 解决这一问题的方法是手动切割,代码如下: //自动切割 RECT scRect; //存放当前窗口大小区域 ZeroMemory( &scRect, sizeof( scRect ) ); GetWindowRect( GetActiveWindow(), &scRect ); //防止图片左上角超过窗口左上角 if ( x < 0 ) { m_rect.left -= x; x = 0; } if ( y < 0 ) { m_rect.top -= y; y = 0; } //防止图片右下角超过窗口右下角 x = x > scRect.right ? scRect.right : x; y = y > scRect.bottom ? scRect.bottom : y; m_rect.right = x + m_rect.right - m_rect.left > scRect.right ? scRect.right - x + m_rect.left : m_rect.right; m_rect.bottom = y + m_rect.bottom - m_rect.top > scRect.bottom ? scRect.bottom - y + m_rect.top : m_rect.bottom; 只需将上述代码加在CGraphic::BltBBuffer() 中的m_bRect = m_rect; 前即可。 要点二:背景的滚轴实现 画背景可以分为以下三种情况: 情况一:背景图片与窗口等高 情况二:背景图片高度小于窗口高度 情况三:背景图片高度大于窗口高度 上述讲解图与代码相对应地看,有助于容易理解。 另外,要点一实现之后,由于已经可以自动切割,画背景可以用其它方法。 要点三:精灵图的实现 在游戏中,如RPG游戏中的人物图、射击类游戏的飞机、爆炸等,叫做精灵图。 精灵图实际上是将所有帧的图片放在一个文件中,游戏时靠一个RECT来控制画图像文件中的哪一部分,进而控制游戏显示哪一帧图,只需控制好RECT的位置即可。如下图: 控制RECT的四个角的坐标的移动,有以下代码: if (m_timeEnd – m_timeStart > 100) //只有到了100ms之后才绘图 { m_ImageID++; if(m_ImageID - m_beginID >= num) { m_ImageID = m_beginID; //最后一帧的下一帧是第一帧 } m_timeStart = timeGetTime(); } int id = m_ImageID++; SetRect(&m_rect, 41 * id, 0, 41 * (id + 1), 41); //飞机精灵图大小是41×41 m_pGraph->BltBBuffer(m_pImageBuffer, true, m_Pos.x, m_Pos.y, m_rect); 这样就实现了精灵动画的效果。 要点四:拿STL进行子弹的实现 子弹的实现可以使用STL中的vector,当按下开火键时发出一颗子弹,就往vector中添加一个结点;当子弹飞出窗口或击中敌机时,再将结点从vector中删除。每帧游戏画面中子弹飞行时只需将vector中的所有子弹进行处理、绘画即可。 参考代码如下: 1.添加子弹 if (g_ctrlDown) //当ctrl键按下时开炮! { m_BulletEnd = m_Gtime->GetTime(); if ((m_BulletEnd - m_BulletStart) * 1000 > 120) //如果连续按着开火键不放,这里控制不会发出太多子弹 { m_BulletStart = m_BulletEnd; MBULLET tmpBullet; tmpBullet.pos.x = m_SPos.x - 1; //记录开火时的子弹位置 tmpBullet.pos.y = m_SPos.y - 26; tmpBullet.speed = 5; //该子弹的飞行速度 m_BulletList.push_back(tmpBullet); //将子弹添加到vector中 } } 2.删除子弹 vector<MBULLET>::iterator itei; //vector迭代器 for (itei = m_BulletList.begin(); itei != m_BulletList.end(); itei ++) //遍历所有子弹 { m_BulletList.erase(itei); //删除这个子弹 itei = m_BulletList.begin(); //删除一个结点后,为避免出错下次就从头检查 if (m_BulletList.empty()) break; //若删除结点后子弹vector已空则跳出循环 } 3.子弹遍历处理 vector<MBULLET>::iterator itei; //vector迭代器 for (itei = m_BulletList.begin(); itei != m_BulletList.end(); itei ++) //遍历所有子弹 { itei->pos.y -= itei->speed; //子弹飞行 } 要点五:碰撞检测 使用Windows API函数RectInRegion: vector<CEnimy>::iterator itei; //vector迭代器 for (itei = m_EnimyList.begin(); itei != m_EnimyList.end(); itei ++) //遍历所有敌机 { HRGN hrgn = ::CreateRectRgn(m_player->pos.x, m_player->pos.y, m_player->pos.x + 41, m_player->pos.y + 41); //得到飞机Region,图宽41高41 SetRect(&m_rect, itej->getPosition().x, itej->getPosition().y, itej->getPosition().x + 50, itej->getPosition().y + 50) //得到敌机rect,敌机宽50高50 if ( RectInRegion(hrgn, &m_rect) ) //两机相撞 { ……………………. //碰撞之后的各种处理 } } 让碰撞更加精确: 使用Windows API函数PtInRegion()和CreatePolygonRgn(),选取主角飞机的三个关键点的坐标放在POINT数组中,并将其作为参数代入 CreatePolygonRgn()中生成HRGN,在子弹与主角飞机做碰撞检测时只需判断子弹的中心点是否在这个Region中即可(PtInRegion())。 注意:CreateRectRgn()与CreatePolygonRgn()等创建Region的函数会占用系统资源,由于游戏的主渲染函数Render()是不断执行的,这样会造成资源浪费,因此在用完之后一定要释放:DeleteObject(region) 要点六:敌机直线飞行 最初想这个问题的时候,以为很好实现,脑子里马上想到 和 了。其实这样实现有问题,当起点和终点的连线斜率不是1或-1时就会出现意想不到的事情了,飞机并没有直接飞向终点,而是以斜率绝对值为1的路径飞过去,再水平或垂直飞向终点。 解决这个问题有几个方法,其中有一个方法是利用计算机图形学上的Bresenhem直线算法。该算法用于计算机画平面上的直线,算法如下: |m|<1的情况 1、输入线段的两个端点,并将左端点存储在(x0,y0)中; 2、将(x0,y0)装入帧缓冲器,画出第一个点; 3、计算常量dx,dy,2dy和2dy-2dx,并得到决策参数的第一个值: d0 = 2dy-dx 4、从k=0开始,在沿线路径的每个xk处,进行下列检测: 如果dk<0,下一个要绘制的点是(xk+1,yk),并且 dk+1 = dk+2dy 否则,下一个要绘制的点是(xk+1,yk+1),并且 dk+1 = dk +2dy –2dx 5、重复步骤4,共dx次。 利用此原理,实践在敌机直线飞行中的代码如下: void CEnimy::Move() { int deltaX = m_targetPos.x - m_pos.x; int deltaY = m_targetPos.y - m_pos.y; // 轨迹斜率 = 0 if ( !deltaX ) { if ( deltaY < 0 ) m_pos.y -= m_speed; else m_pos.y += m_speed; return; } // 轨迹斜率无穷大 if ( !deltaY ) { if ( deltaX < 0 ) m_pos.x -= m_speed; else m_pos.x += m_speed; return; } // 以下是用计算机图形学 Bresenham 算法计算两点间的直线轨迹 if ( abs(deltaX) > abs(deltaY) ) // 轨迹斜率 < 1 { if ( m_bFirstCalculate ) { m_Delta = 2 * abs(deltaY) - abs(deltaX); // d0 = 2 × dy - dx m_bFirstCalculate = false; } // 根据轨迹斜率判断是否要移动 Y 坐标 if ( m_Delta > 0 ) // < 0 时只改变 X 坐标,否则 X、Y 坐标都要变 { if ( deltaY < 0 ) m_pos.y -= m_speed; else m_pos.y += m_speed; m_Delta += 2 * abs(deltaY) - 2 * abs(deltaX); // 计算下一个 dn } else { m_Delta += 2 * abs(deltaY); // 计算下一个 dn } // X 坐标每一帧都要向目标移动 if ( deltaX < 0 ) m_pos.x -= m_speed; else m_pos.x += m_speed; } else // 轨迹斜率 > 1 { if ( m_bFirstCalculate ) { m_Delta = 2 * abs(deltaX) - abs(deltaY); // d0 = 2 × dx - dy m_bFirstCalculate = false; } // 根据轨迹斜率判断是否要移动 X 坐标 if ( m_Delta > 0 ) // < 0 时只改变 Y 坐标,否则 X、Y 坐标都要变 { if ( deltaX < 0 ) m_pos.x -= m_speed; else m_pos.x += m_speed; m_Delta += 2 * abs(deltaX) - 2 * abs(deltaY); // 计算下一个 dn } else { m_Delta += 2 * abs(deltaX); // 计算下一个 dn } // Y 坐标每一帧都要向目标移动 if ( deltaY < 0 ) m_pos.y -= m_speed; else m_pos.y += m_speed; } } 要点七:通过读取配置文件实现敌机的飞行轨迹 不同敌机以不同的轨迹飞行,实现的方法有很多,只要把轨迹上的几个关键点作为敌机的目标点,当到达这个目标点时,把目标列表中的下一个点作为下一个目标点,敌机继续向其飞行,这样就实现了敌机的不同轨迹飞行。但是要想把游戏中所有的敌机都写在代码中会很乱,不容易维护。VC++开发平台提供了两个函数:GetPrivateProfileSectionNames()和GetPrivateProfileString(),用来读取硬盘上的配置文件(.cfg),这样,每一架飞机的初始化信息可以写在.cfg文件中,通过一个循环算法来读取。 1. 函数说明: 这是将.cfg文件中所有的section names读取到一字符数组中: DWORD GetPrivateProfileSectionNames( LPTSTR lpszReturnBuffer, // 用来存放section names 的字符串指针 DWORD nSize, // 字符串的长度 LPCTSTR lpFileName // .cfg文件的路径 ); 这是读取某一section name中的某个字段的值: DWORD GetPrivateProfileString( LPCTSTR lpAppName, // 在这个section name中查找 LPCTSTR lpKeyName, // 要查找的字段名 LPCTSTR lpDefault, // 若查找失败的默认返回值 LPTSTR lpReturnedString, // 存放指定字段名所对应的值 DWORD nSize, // 存放返回值的字符串长度 LPCTSTR lpFileName // 在这个.cfg文件中查找 ); 2. 文件要求: .cfg文件的内容格式如下: [section name] key1=string key2=string 例如,在敌机的配置文件enimy.cfg中可以这么写: [ENIMY01] //这是进度号,不同进度加载不同敌机 tempoid=1 //这是图片号,根据需要加载不同的敌机图片 imageid=0 //这是图片的总帧数 imageframenum=2 //这是图片的宽度 imagewidth=100 //这是图片的高度 imageheight=50 //这是敌机生命值 hp=3 //这是敌机移动速度 speed=1 //这是敌机的初始位置 pos.x=512 pos.y=-50 //有两个目标点,即由两个点决定其轨迹 targetnum=2 //以下是目标点的坐标 targetpos0.x=512 targetpos0.y=192 targetpos1.x=240 targetpos1.y=600 其中,注释可以写入文件中,但不能与即将要读取的数据在同一行。 3. 代码例子: // 读取 CFG 文件中所有的敌机名称 // 读取完后m_sEnimyName中的字符串是每个section name的连接,两两之间用”\0”字符分开,如: // “enimy01.enimy02.enimy03”其中的点就是空字符 GetPrivateProfileSectionNames(m_sEnimyName, sizeof(m_sEnimyName), "data/enimy.cfg"); char *pStr = m_sEnimyName; // 用来保存当前的section name char returnedString[64]; m_iTempo++; // 每发动一波敌机,游戏进度加1 // 从 cfg 文件中找到进度等于 m_iTempo 的敌机 GetPrivateProfileString( pStr, "tempoid", "1", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); // 跳过以前已经加载过的敌机 while ( *pStr && atol( returnedString ) < m_iTempo ) { pStr += strlen( pStr ) + 1; // 这样处理,就能使pStr指向下一个section name GetPrivateProfileString( pStr, "tempoid", "1", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); } // 开始加载敌机 while ( *pStr ) { // 读取敌机的图片ID号 GetPrivateProfileString( pStr, "imageid", "0", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); int imageID = atol( returnedString ); // 读取敌机图片的总帧数 GetPrivateProfileString( pStr, "imageframenum", "2", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); int imageFrameNum = atol( returnedString ); // 读取敌机图片的宽度 GetPrivateProfileString( pStr, "imagewidth", "50", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); int imageWidth = atol( returnedString ); // 读取敌机图片的高度 GetPrivateProfileString( pStr, "imageheight", "50", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); int imageHeight = atol( returnedString ); // 读取敌机移动速度 GetPrivateProfileString( pStr, "speed", "1", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); int speed = atol( returnedString ); // 读取敌机的初始位置 POINT initPos; GetPrivateProfileString( pStr, "pos.x", "50", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); initPos.x = atol( returnedString ); GetPrivateProfileString( pStr, "pos.y", "0", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); initPos.y = atol( returnedString ); // 读取敌机运动轨迹上的各个目标点 int targetNum; // 目标点总数 GetPrivateProfileString( pStr, "targetnum", "1", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); targetNum = atol( returnedString ); POINT *targetArray; // 存放各目标点坐标 targetArray = new POINT[ targetNum ]; // 根据读取的目标点总数分配多少个坐标点 // 读取每一个目标点坐标 for ( int i = 0; i < targetNum; i++ ) { char buf[32]; sprintf( buf, "targetpos%d.x", i ); GetPrivateProfileString( pStr, buf, "0", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); targetArray[i].x = atol( returnedString ); sprintf( buf, "targetpos%d.y", i ); GetPrivateProfileString( pStr, buf, "0", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); targetArray[i].y = atol( returnedString ); } // 根据读取的敌机数据,创建敌机,并放入容器当中 CEnimy tmpEnimy( m_pGraph, m_pEnimyImageBuffer[imageID], 0x00000000, imageFrameNum, imageWidth, imageHeight ); tmpEnimy.Init( initPos.x, initPos.y, speed, targetArray, targetNum ); m_EnimyList.push_back( tmpEnimy ); //发射一架敌机 pStr += strlen( pStr ) + 1; // 取下一个字符串 GetPrivateProfileString( pStr, "tempoid", "1", returnedString, sizeof( returnedString ), "data/enimy.cfg" ); // 属于当前进度的敌机加载完后跳出while循环 if ( atol( returnedString ) > m_iTempo ) break; } // end of while (*pStr)

立即下载
Visual C++ 2008入门经典中文版+源代码(高清)

资源比较大被分成两部分 第1章 使用VisuaIC++2008编程   1.1 NETFramewOrk   1.2 CLR   1.3 编写C++应用程序   1.4 学习Windows编程   l.4.1 学习C++   1.4.2 C++标准   1.4.3 属性   1.4.4 控制台应用程序   1.4.5 windows编程概念   1.5 集成开发环境简介   1.6 使用IDE   1.6.1 工具栏选项   1.6.2 可停靠的工具栏   1.6.3 文档   1.6.4 项目和解决方案   1.6.5 设置ⅥsualCH2008的选项   1.6.6 创建和执行windows应用程序   1.6.7 创建windowsFons应用程序   1.7 小结   第2章 数据、变量和计算   2.1 C++程序结构   2.1.1 程序注释   2.1.2 群include指令——头文件   2.1.3 命名空间和Ilsing声明   2.1.4 main()函数   2.1.5 程序语句   2.1.6 空白   2.1.7 语句块   2.1.8 自动生成的控制台程序   2.2 定义变量   2.2.1 命名变量   2.2.2 声明变量   2.2.3 变量的初值   213基本数据类型   2.3.I整型变量   2.3.2 字符数据类型   2.3.3 整型修饰符   2.3.4 布尔类型   2.3.5 浮点类型   2.3.6 字面值   2.3.7 定义数据类型的同义词   2.3.8 具有特定值集的变量   2.4 基本的输入/输出操作   2.4.1 从键盘输入   2.4.2 到命令行的输出   2.4.3 格式化输出   2.4.4 转义序列   2.5 C++中的计算   2.5.1 赋值语句   2.5.2 算术运算   2.5.3 计算余数   2.5.4 修改变量   2.5.5 增量和减量运算符   2.5.6 计算的顺序   2.6 变量类型和类型强制转换   2.6.1 对操作数进行类型强制转换的规则   2.6.2 赋值语句中的类型强制转换   2.6.3 显式类型强制转换   2.6.4 老式的类型强制转换   2.6.5 按位运算符   2.7 了解存储时间和作用域   2.7.1 自动变量   2.7.2 决定变量声明的位置   2.7.3 全局变量   2.7.4 静态变量   2.8 命名空间   2.8.1 声明命名空间   2.8.2 多个命名空间   2.9 c++/cLI编程   2.9.1 C++/CLI特有的基本数据类型   2.9.2 命令行上的C++/CLI输出   2.9.3 C++/CLJ特有的功能-格式化输出   2.9.4 c++/cu的键盘输入   2.9.5 使用safecast   2.9.6 C++/CLI枚举   2.10 小结   2.11 练习题   第3章 判断和循环   3.1 比较数据值   3.1.1 if语句   3.1.2 嵌套的if语句   3.1.3 扩展的if语句   3.1.4 嵌套的if.else语句   3.1.5 逻辑运算符和表达式   3.1.6 条件运算符   3.1.7 switch语句   3.1.8 无条件转移   3.2 重复执行语句块   3.2.1 循环的概念   3.2.2 for循环的变体   3.2.3 while循环   3.2.4 do-while循环   3.2.5 嵌套的循环   3.3 C++/CLI编程   3.4 小结   3.5 练习   第4章 数组、字符串和指针   4.1 处理多个相同类型的数据值   4.1.1 数组   4.1.2 声明数组   4.1.3 初始化数组   4.1.4 字符数组和字符串处理   4.1.5 多维数组   4.2 间接数据存取   4.2.1 指针的概念   4.2.2 声明指针   4.2.3 使用指针   4.2.4 初始化指针   4.2.5 sizeof运算符   4.2.6 常量指针和指向常量的指针   4.2.7 指针和数组   4.3 动态内存分配   4.3.1 堆的别名——自由存储器   413.2 new和delete运算符   4.3.3 为数组动态分配内存   4.3.4 多维数组的动态分配   4.4 使用引用   4.4.1 引用的概念   4.4.2 声明并初始化引用   4.5 字符串的本地C++库函数   4.5.1 查找以空字符结尾的字符串的长度   4.5.2 连接以空字符结尾的字符串   4.5.3 复制以空字符结尾的字符串   4.5.4 比较以空字符结尾的字符串   4.5.5 搜索以空字符结尾的字符串   4.6 C++/CLI编程   4.6.1 跟踪句柄   4.6.2 CLR数组   4.6.3 字符串   4.6.4 跟踪引用   4.6.5 内部指针   4.7 小结   4.8 练习   第5章 程序结构(1)   5.1 理解函数   5.1.1 需要函数的原因   5.1.2 函数的结构   5.1.3 使用函数   5.2 给函数传递实参   5.2.1 按值传递机制   5.2.2 给函数传递指针实参   5.2.3 给函数传递数组   5.2.4 给函数传递引用实参   5.2.5 使用const修饰符   5.2.6 main()函数的实参   5.2.7 接受数量不定的函数实参   5.3 从函数返回值   5.3.1 返回指针   5.3.2 返回引用   5.3.3 函数中的静态变量   5.4 递归函数调用   5.5 C++/CLI编程   5.5.1 接受数量可变实参的函数   5.5.2 main()的实参   5.6 小结   5.7 练习   第6章 程序结构(2)   6.1 函数指针   6.1.1 声明函数指针   6.1.2 函数指针作为实参   6.1.3 函数指针的数组   6.2 初始化函数形参   6.3 异常   6.3.1 抛出异常   6.3.2 捕获异常   6.3.3 MFC中的异常处理   6.4 处理内存分配错误   6.5 函数重载   6.5.1 函数重载的概念   6.5.2 何时重载函数   6.6 函数模板   6.7 使用函数的示例   6.7.1 实现计算器   6.7.2 从字符串中删除空格   6.7.3 计算表达式的值   6.7.4 获得项值   6.7.5 分析数   6.7.6 整合程序   6.7.7 扩展程序   6.7.8 提取子字符串   6.7.9 运行修改过的程序   6.8 C++/CLI编程   6.8.1 理解泛型函数   6.8.2 CLR版本的计算器程序   6.9 小结   6.10 练习   第7章 自定义数据类型   7.1 c++中的结构   7.1.1 结构的概念   7.1.2 定义结构   7.1.3 初始化结构   7.1.4 访问结构的成员   7.1.5 伴随结构的智能帮助   7.1.6 REcT结构   7.1.7 使用指针处理结构   7.2 数据类型、对象、类和实例   7.2.1 类的起源   7.2.2 类的操作   7.2.3 术语   7.3 理解类   7.3.1 定义类   7.3.2 声明类的对象   7.3.3 访问类的数据成员   7.3.4 类的成员函数   7.3.5 成员函数定义的位置   7.3.6 内联函数   7.4 类构造函数   7.4.1 构造函数的概念   7.4.2 默认的构造函数   7.4.3 在类定义中指定默认的形参值   7.4.4 在构造函数中使用初始化列表   7.5 类的私有成员   7.5.1 访问私有类成员   7.5.2 类的友元函数   7.5.3 默认复制构造函数   7.6 mis指针   7.7 类的const对象   7.7.1 类的const成员函数   7.7.2 类外部的成员函数定义   7.8 类对象的数组   7.9 类的静态成员   7.9.1 类的静态数据成员   7.9.2 类的静态函数成员   7.10 类对象的指针和引用   7.10.1 类对象的指针   7.10.2 类对象的引用   7.11 C++/CLI编程   7.11.1 定义数值类类型   7.11.2 定义引用类类型   7.11.3 定义引用类类型的复制   构造函数   7.11.4 类属性   7.11.5 l‘nl‘ton‘ly字段   7.11.6 静态构造函数   7.12 小结   7.13 练习   第8章 深入理解类   8.1 类的析构函数   8.1.1 析构函数的概念   8.1.2 默认的析构函数   8.1.3 析构函数与动态内存分配   8.2 实现复制构造函数   8.3 在变量之间共享内存   8.3.1 定义联合   8.3.2 匿名联合   8.3.3 类和结构中的联合   8.4 运算符重载   8.4.1 实现重载的运算符   8.4.2 实现对运算符的完全支持   8.4.3 重载赋值运算符   8.4.4 重载加法运算符   8.4.5 重载递增和递减运算符   8.5 类模板   8.5.1 定义类模板   8.5.2 根据类模板创建对象   8.5 13使用有多个形参的类模板   8.6 使用类   8.6.1 类接口的概念   8.6.2 定义问题   8.6.3 实现CBox类   8.6.4 使用CBox类   8.7 组织程序代码   8.8 字符串的本地c++库类   8.8.1 创建字符串对象   8.8.2 连接字符串   8.8.3 访问与修改字符串   8.8.4 比较字符串   8.8.5 搜索字符串   8.9 C++/CLI编程   8.9.1 在数值类中重载运算符   8.9.2 重载递增和递减运算符   8.9.3 在引用类中重载运算符   8.9.4 实现引用类型的赋值运算符   8.10 小结   8.1l 练习   第9章 类继承和虚函数   9.1 面向对象编程的基本思想   9.2 类的继承   9.2.1 基类的概念   9.2.2 基类的派生类   9.3 继承机制下的访问控制   9.3.1 派生类中构造函数的操作   9.3.2 声明类的保护成员   9.3.3 继承类成员的访问级别   9.4 派生类中的复制构造函数   9.5 友元类成员   9.5.1 友元类   9.5.2 对类友元关系的限制   9.6 虚函数   9.6.1 虚函数的概念   9.6.2 使用指向类对象的指针   第10章 标准模板库   第11章 调试技术   第12章 Windows编程的概念   第13章 使用MFC编写Windows程序   第14章 处理菜单和工具栏   第15章 在窗口中绘图   第16章 创建文档和改进视图   第17章 使用对话框和控件   第18章 存储和打印文档   第19章 编写自己的DLL   第20章 连接到数据源   第21章 更新数据源   第22章 Windows Forms应用程序进阶   第23章 在Windows Forms 应用程序中访问数据源   附录A C++关键字   附录B ASCII码   附录C Windows消息类型

立即下载
太空大战游戏完整源代码

太空大战 游戏 完整 源代码

立即下载
unity3d 源代码 Space Game Starter Kit 太空射击游戏开发包

unity3d 源代码 Space Game Starter Kit 太空射击游戏开发包,场景非常优美

立即下载
untiy3d太空大战打飞机游戏

这是我学习unity3d,用C#语言写的脚本自己尝试做的第一个很简单的小游戏,也许不是很好,但也不错了

立即下载
射击类小游戏c++源代码

在VC++6.0的环境下,用C++语言利用了EZwin编写的原创射击类小游戏,代码简单,适合初学者了解如何在屏幕上显示图片,加入音乐等问题。

立即下载
JAVA打飞机游戏毕业设计(源代码+论文)

JAVA打飞机游戏毕业设计(源代码+论文)

立即下载
2D游戏程序剖析_太空射击

2D游戏程序剖析_太空射击 2D游戏程序剖析_太空射击

立即下载
基于OpenGL的3D射击游戏的设计与实现

小弟的毕业设计,老师给了个优秀。是一款基于opengl的3D射击游戏,类似cs.主要用到计算机图形学、c++、opengl的一些相关知识,有文档。程序需要做一点配置才能运行,中国普通本科计算机专业的学生可能用一周的时间才能让该程序运行起来,如果你是一个平时只会玩游戏和泡妞的菜鸟,最好不要下这个东西。

立即下载
C++卡通风格3D射击游戏源码

游戏截图: http://blog.csdn.net/niehanmin/article/details/79342876 C++卡通风格3D射击游戏源码,国外网站无意中看到的,3D卡通风格游戏,基于 3D OpenGL 、 QFusion 引擎开发,支持windows 、linux、MAC OS X。

立即下载
蛮牛太空射击资源和源码

蛮牛太空射击资源和源码

立即下载
Visual C++ 游戏编程基础 完整全部源码

Visual C++ 游戏编程基础是一本非常适于新手入门游戏开发的书,书中提供了大量代码供读者进行学习,此处提供了本书需要的全部源码。

立即下载
Visual C++游戏设计 第二版

Visual C++游戏设计 第二版Visual C++游戏设计 第二版

立即下载
android 弹幕射击游戏设计与开发毕业设计

android 弹幕射击游戏设计与开发毕业设计 包含:代码,ppt,论文 android 弹幕射击游戏设计与开发毕业设计 包含:代码,ppt,论文 android 弹幕射击游戏设计与开发毕业设计 包含:代码,ppt,论文 android 弹幕射击游戏设计与开发毕业设计 包含:代码,ppt,论文android 弹幕射击游戏设计与开发毕业设计 包含:代码,ppt,论文 android 弹幕射击游戏设计与开发毕业设计 包含:代码,ppt,论文

立即下载
Visual C++游戏设计前两章源代码

Visual C++游戏设计前两章源代码详细找我要

立即下载
C++实现的射击游戏

该游戏,类似于射击游戏,首先,从窗口顶部的随机位置产生随机的分值为:1,5,10,-20的4种运动的位图。窗口下面有一个发送子弹的小人,小人可以左右移动,子弹从小人的位置往上运动,若子弹射中了相应分值的位图,就在总分数加上相应的分值,并在窗口的左上角显示出来。如果按住菜单栏里的退出菜单项,那么就结束整个游戏。用C++原始API实现的。

立即下载
Microsoft Visual C++ 2008 Express Edition

Microsoft Visual C++ 2008 Express Edition<br>需要连接网络后安装

立即下载
关闭
img

spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip

资源所需积分/C币 当前拥有积分 当前拥有C币
5 0 0
点击完成任务获取下载码
输入下载码
为了良好体验,不建议使用迅雷下载
img

visual C++ 2008 太空射击游戏设计源代码

会员到期时间: 剩余下载个数: 剩余C币: 剩余积分:0
为了良好体验,不建议使用迅雷下载
VIP下载
您今日下载次数已达上限(为了良好下载体验及使用,每位用户24小时之内最多可下载20个资源)

积分不足!

资源所需积分/C币 当前拥有积分
您可以选择
开通VIP
4000万
程序员的必选
600万
绿色安全资源
现在开通
立省522元
或者
购买C币兑换积分 C币抽奖
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
为了良好体验,不建议使用迅雷下载
确认下载
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 0 0
为了良好体验,不建议使用迅雷下载
VIP和C币套餐优惠
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
确认下载
下载
您还未下载过该资源
无法举报自己的资源

兑换成功

你当前的下载分为234开始下载资源
你还不是VIP会员
开通VIP会员权限,免积分下载
立即开通

你下载资源过于频繁,请输入验证码

您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:webmaster@csdn.net!

举报

若举报审核通过,可返还被扣除的积分

  • 举报人:
  • 被举报人:
  • *类型:
    • *投诉人姓名:
    • *投诉人联系方式:
    • *版权证明:
  • *详细原因: