[C++游戏开发]3D障碍飞车

2年前未命名252
[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

标签: [db:标签TAG]

相关文章

FPGA图像处理HLS实现三种图像缩放算法,线性插值、双线性插值、双三次插值,提供HLS工程和vivado工程源码

FPGA图像处理HLS实现三种图像缩放算法,线性插值、双线性插值、双三次插值,提供HLS工程和vivado工程源码...

【Hello Linux】进程概念

【Hello Linux】进程概念...

【H5】html实现微信授权登陆

【H5】html实现微信授权登陆...

英雄算法学习路线

英雄算法学习路线...

CentOS 7 部署Nginx和前端框架

CentOS 7 部署Nginx和前端框架...

我的个人微信也迅速接入了 ChatGPT

我的个人微信也迅速接入了 ChatGPT...