资深光能
最近很多人都做出了我的世界的2d版,在这里呢,我就放一个狠话:我决定尝试制作一个3d版的我的世界!!!!
看到这里,肯定有很多人都认为我在开玩笑,不过,我要说的是:我是认真的!!!!
我要声明一下,我可没有不务正业,当然,凡是以学习为重!!!
那首先我们需要梳理一下步骤:
1:制作方块
众所周知,我的世界是由无数个方块组成的,那想要作出我的世界就必须要制作出一个正方体方块,这算是制作我的世界的第一步。
那经过了无数次实验后,我作出了一个方块:
cout<<" * * * * * * * * * * * * * \n";
cout<<" * * * \n";
cout<<" * * * \n";
cout<<" * * * \n";
cout<<" * * * \n";
cout<<"* * * * * * * * * * * * * * \n";
cout<<"* * *\n";
cout<<"* * *\n";
cout<<"* * *\n";
cout<<"* * *\n";
cout<<"* * *\n";
cout<<"* * *\n";
cout<<"* * *\n";
cout<<"* * *\n";
cout<<"* * *\n";
cout<<"* * *\n";
cout<<"* * *\n";
cout<<"* * *\n";
cout<<"* * * * * * * * * * * * *";
这个代码段放到这上面就成了这样,但是在dev上面是可以生成一个正方体的。
同理,我们还可以生成一个小的正方体
cout<<"\n\n\n\n\n";
cout<<" * * * *\n";
cout<<" * * *\n";
cout<<"* * * * *\n";
cout<<"* * *\n";
cout<<"* * *\n";
cout<<"* * * *\n";
当我们生成好一个正方体后,就可以将“*”替换成横线就行了。(这里乐意使用easyx的图形库)
2:生成地图
这也是比较简单的,主要由无数个方块组成。
生成很多的方块就会比较的取巧。具体步骤如下:
众所周知,正方体一共有六个面,但是在可见的视野中,我们永远只能看到三个面。所以在代码中,我们只需要吧人看到的三个面输出即可。当然,如果生成的方块太多,也会撑爆我们的cpu。
最后只需要加上地图的生成算法即可。
3:加入人物角色
这一步也是非常困难的,因为人物为两个高,那么需要将摄像头转到两个高的地方。
另外大家都知道,在我的世界中,在第一人称下的视角是可以看见手的。不过在这个项目里我并不准备制作手。具体还是因为不会做。
至此,整个项目的核心也就完成了,最后就是ui的制作了。
当然,我知道自己的想法有亿些天方夜谭,不过,我相信终有一天我也可以实现自己的想法。
另外,如果有想要和做的同学们可以在下方评论告诉我。我们一起制作出3d我的世界!!!
如果在多年后这个帖子没有任何进展,也请大家忘掉以上的所有话,毕竟这不过是我一时的想法。但是,希望我永远也不会忘记!!!
(申精)
陈则霖在2022-01-30 18:13:05追加了内容
希望很快就会有人找上门(QWQ)
初级启示者
高级启示者
新手光能
可以用图形界面
比方说,立方体的一个面在x1,y1,x2,y2的位置,另一个面的偏移量为x,y则
在(x1,y1,x2,y2)的位置,画一个空心矩形,再在(x1+x,y1+y,x2+x,y2+y)的位置
画一个空心矩形,再把他们的顶点用线连起来,就是一个立方体
更多请参考<<我们在四维空间里可以做什么>>
王牌工作室官方在2022-02-04 10:56:38追加了内容
看看它吧,它能画出一个立方体
请在Windows7+**试验
#include<windows.h>
#include<stdlib.h>
#include<wp/console.h>
#define WIDTH 640
#define HEIGHT 480
HINSTANCE thisInst;
LPCSTR lpClassName="WindowClass";
LPCSTR lpTitleName="Window";
const UINT x=30,y=20;
const UINT x1=100,x2=200,y1=100,y2=200;
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
void frameRect(HDC hdc,int x1,int y1,int x2,int y2,COLORREF color)
{
RECT rect;
SetRect(&rect,x1,y1,x2,y2);
HBRUSH hBrush=CreateSolidBrush(color);
FrameRect(hdc,&rect,hBrush);
DeleteObject(hBrush);
}
void Line(HDC hdc,int x1,int y1,int x2,int y2,COLORREF color)
{
HPEN hPen=CreatePen(PS_SOLID,1,color);
HPEN hOldPen=(HPEN)SelectObject(hdc,hPen);
MoveToEx(hdc,x1,y1,0);
LineTo(hdc,x2,y2);
SelectObject(hdc,hOldPen);
DeleteObject(hPen);
}
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR cmdline,int nCmdShow)
{
thisInst=hInst;
WNDCLASSEX wc;
HWND hwnd;
MSG msg;
memset(&wc,0,sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
wc.lpfnWndProc = WndProc;
wc.hInstance = hInst;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = lpClassName;
if(!RegisterClassEx(&wc))
{
MessageBox(NULL,"注册窗口时遇到问题","错误",MB_ICONERROR);
return EXIT_FAILURE;
}
hwnd=CreateWindowEx(WS_EX_CLIENTEDGE,
lpClassName,
lpTitleName,
WS_VISIBLE|WS_OVERLAPPEDWINDOW,
100,
200,
WIDTH,
HEIGHT,
NULL,
NULL,
hInst,
NULL);
if(hwnd==NULL)
{
MessageBox(NULL,"创建窗口时遇到问题","错误",MB_ICONERROR);
return EXIT_FAILURE;
}
ShowWindow(hwnd,nCmdShow);
while(GetMessage(&msg,hwnd,0,0) > 0)
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return EXIT_SUCCESS;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_DESTROY: {
PostQuitMessage(0);
break;
}
case WM_PAINT: {
HDC hdc=GetDC(hwnd);
frameRect(hdc,x1,y1,x2,y2,RGB(0,0,0));
frameRect(hdc,x1+x,y1+y,x2+x,y2+y,RGB(0,0,0));
Line(hdc,x1,y1,x1+x,y1+y,RGB(0,0,0));
Line(hdc,x2,y1,x2+x,y1+y,RGB(0,0,0));
Line(hdc,x1,y2,x1+x,y2+y,RGB(0,0,0));
Line(hdc,x2,y2,x2+x,y2+y,RGB(0,0,0));
ReleaseDC(hwnd,hdc);
break;
}
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
王牌工作室官方在2022-02-04 10:57:39追加了内容
把第三行删掉
中级天翼
3D?(你在开玩笑)
c++是不适合编游戏的(真话)
不信,编个c++程序,打印个这个:
十分钟内完成,我算你**
要知道,某些语言干这件事只要导个图片。。。
资深光能
“《做好了,还是网页版》”(人话:你相信这是我做的吗?)
吴庞茂旭在2022-02-04 18:57:48追加了内容
另外,您看否定您的人吧,全是巨头,希望您好好努力啊,以酷町堂学员的实力,实现您的梦想还差一大段呢!
吴庞茂旭在2022-02-09 13:38:09追加了内容
回复@刘宇航,这是一个无名网站而已,不是我做的,你不理解双引号和书名号的含义吗?