[C++游戏开发]3D障碍飞车
[C++游戏开发]3D障碍飞车
匿名用户__
于2023-02-05 17:51:39发布
1297
收藏
10
分类专栏:
C++
游戏
EGE
文章标签:
c++
游戏
3d
C++
同时被 3 个专栏收录
21 篇文章
9 订阅
订阅专栏
游戏
9 篇文章
6 订阅
订阅专栏
EGE
1 篇文章
0 订阅
订阅专栏
[C++游戏开发][EGE]3D障碍飞车
前言功能实现运行截图![在这里插入图片描述](https://img-blog.csdnimg.cn/316fabcfefd540fca2b3a9ef7ab70c34.png)核心代码完整程序下载
前言
本人写了一个3D项目,竟然获了领航杯一等奖~~,因此来分享一下。 这是是之前开发过一个2D版本的升级版,文章链接在这里:
球球飞车(2D旧版) https://blog.csdn.net/wangxun20081008/article/details/115600163?spm=1001.2014.3001.5502
下载链接:
球球飞车程序下载(2D旧版) https://download.csdn.net/download/wangxun20081008/15403933
该项目是用控制台开发的 ,不支持鼠标检测,只能使用按键控制。为了使界面更加美观,我决定采用EGE进行重写,并添加了3D渲染,使效果更加美观。
功能实现 EGE图形化简单3D渲染游戏存档键盘、鼠标控制(你可以将鼠标当作游戏手柄来玩)暂停、返回关卡进度条 运行截图核心代码
3D渲染原理:
/* 获取3d投影到2d的坐标: ______________________ &&&&&&&&&&&&&&&&&&& <---- 投影到画布的二维图像 \ / \ / \ &&&&&&& / \ &&&&&&& / <---- 三维物体 \&&&&&&&/ \ / \ / \ / O <---- 灯光 */3D模型建立
// 创建正方体 t3d create_rect(double x,double y,double z,double a,double b,double h) { p3d p1[10]= {{x,y,z},{x-h,y,z},{x-h,y+a,z},{x,y+a,z}}; // 前 p3d p2[10]= {{x-h,y+a,z+b},{x,y+a,z+b},{x,y,z+b},{x-h,y,z+b}}; // 后 p3d p3[10]= {{x-h,y+a,z+b},{x,y+a,z+b},{x,y+a,z},{x-h,y+a,z}}; // 右 p3d p4[10]= {{x,y,z},{x-h,y,z},{x-h,y,z+b},{x,y,z+b}}; // 左 p3d p5[10]= {{x,y,z},{x,y+a,z},{x,y+a,z+b},{x,y,z+b}}; // 上 p3d p6[10]= {{x-h,y+a,z+b},{x-h,y,z+b},{x-h,y,z},{x-h,y+a,z}}; // 下 m3d m[10]; m[0].sum=m[1].sum=m[2].sum=m[3].sum=m[4].sum=m[5].sum=0; m[0].p2ds=p1,m[0].sum=4,m[0].num=0; m[1].p2ds=p2,m[1].sum=4,m[1].num=1; m[2].p2ds=p3,m[2].sum=4,m[2].num=2; m[3].p2ds=p4,m[3].sum=4,m[3].num=3; m[4].p2ds=p5,m[4].sum=4,m[4].num=4; m[5].p2ds=p6,m[5].sum=4,m[5].num=5; m[0].mid=get_mid(m[0]); m[1].mid=get_mid(m[1]); m[2].mid=get_mid(m[2]); m[3].mid=get_mid(m[3]); m[4].mid=get_mid(m[4]); m[5].mid=get_mid(m[5]); t3d t; t.ms=m; t.sum=6; return t; } // 创建山体 t3d create_moun(double x,double y,double z,double a,double h) { p3d p1[10]= {{x,y,z},{x,y+a,z},{x+h,y+a/2.0,z+a/2.0}}; // 前 p3d p4[10]= {{x,y,z+a},{x,y+a,z+a},{x+h,y+a/2.0,z+a/2.0}}; // 后 p3d p2[10]= {{x,y,z},{x,y,z+a},{x+h,y+a/2.0,z+a/2.0}}; // 左 p3d p3[10]= {{x,y+a,z},{x,y+a,z+a},{x+h,y+a/2.0,z+a/2.0}}; // 右 m3d m[10]; m[0].sum=m[1].sum=m[2].sum=m[3].sum=m[4].sum=m[5].sum=0; m[0].p2ds=p1,m[0].sum=3,m[0].num=0; m[1].p2ds=p2,m[1].sum=3,m[1].num=1; m[2].p2ds=p3,m[2].sum=3,m[2].num=2; m[3].p2ds=p4,m[3].sum=3,m[3].num=3; m[0].mid=get_mid(m[0]); m[1].mid=get_mid(m[1]); m[2].mid=get_mid(m[2]); m[3].mid=get_mid(m[3]); t3d t; t.ms=m; t.sum=4; return t; }游戏主循环
int main() { if(full)wx=cx,wy=cy,setinitmode(INIT_DEFAULT|INIT_RENDERMANUAL|1); else setinitmode(INIT_DEFAULT|INIT_RENDERMANUAL); initgraph(wx,wy); setbkmode(1); setcaption("球球飞车 2.6.0 - ggcc"); // 开始字幕 setbkcolor(BLACK); cleardevice(); setfont(32,0,"MV boli"); for(int i=255; i>=0; i-=5) { logo(wx/2-wx/10,wy/3-wx/10,wx/5); setcolor(WHITE); string text="Copyright (c) GGCC 2019-2022"; outtextxy(wx/2-textwidth(text.c_str())/2,wy/3-wx/10+wx/5+20,text.c_str()); setfillcolor(EGEARGB(i,0,0,0)); ege_fillrect(0,0,wx,wy); Sleep(1); } Sleep(3000); for(int i=0; i<=255; i+=5) { logo(wx/2-wx/10,wy/3-wx/10,wx/5); setcolor(WHITE); string text="Copyright (c) GGCC 2019-2022"; outtextxy(wx/2-textwidth(text.c_str())/2,wy/3-wx/10+wx/5+20,text.c_str()); setfillcolor(EGEARGB(i,0,0,0)); ege_fillrect(0,0,wx,wy); Sleep(1); } if(os==10) { if(gq<18)os=5+gq*5; else if(gq<38)os=100+(gq-18)*3; else if(gq<74)os=160+(gq-38); else os=200; } // 读取存档 fr.open("C:/ggcc/saves/球球飞车saves.txt"); fr>>gq; fr.close(); if(gq==0)gq=1; // 游戏 setfont(16,8,"宋体"); while(1) { gq+=game(); fw.open("C:/ggcc/saves/球球飞车saves.txt"); fw<<gq; fw.close(); } } 完整程序下载完整项目 https://download.csdn.net/download/wangxun20081008/87418926?spm=1001.2014.3001.5503