Craft

2025-12-11 0 496

Craft

用于Windows的Craft克隆,Mac OS X和Linux。使用现代OpenGL(着色器)仅几千条C。使用基于Python的服务器包括在线多人游戏支持

http://www.*michael**feman.com/craft/

特征

  • 简单但漂亮的地形生成,使用珀林 /单纯噪声。
  • 可以轻松添加10种以上类型的块和更多块。
  • 支持植物(草,花,树木等)和透明度(玻璃)。
  • 天空中的简单云(它们不动)。
  • 白天 /夜间周期和一个质感的天穹顶。
  • 世界变化持续存在于SQLITE3数据库中。
  • 多人游戏支持!

下载

Mac和Windows二进制文件可在网站上找到。

http://www.*michael**feman.com/craft/

请参阅下文以从源运行。

安装依赖项

Mac OS X

如果您还没有下载并安装Cmake。您可以使用自制酿造来简化安装:

 brew install cmake

Linux(Ubuntu)

 sudo apt-get install cmake libglew-dev xorg-dev libcurl4-openssl-dev
sudo apt-get build-dep glfw

视窗

下载并安装CMAKE和MINGW。将C:\\MinGW\\bin添加到您的PATH

下载并安装卷发,以便在您的程序文件目录中使用Curl/Lib和Curl/Inclage。

使用以下命令代替下一节中描述的命令。

 cmake -G \"MinGW Makefiles\"
mingw32-make

编译和运行

一旦获得依赖项(请参见上文),请在终端中运行以下命令。

Craft
cmake .
make
./ Craft \”>

 git clone https://github**.*com/fogleman/Craft.git
cd Craft
cmake .
make
./ Craft

多人游戏

多年后, Craft .Michaelfememan.com被删除了。有关自我托管的信息,请参见服务器部分。

客户

您可以使用命令行参数连接到服务器…

./ Craft [HOST [PORT]]

或者,使用游戏本身的“/在线”命令。

 /online [HOST [PORT]]

服务器

您可以运行自己的服务器或连接到我的服务器。该服务器是用Python编写的,但需要一个编译的DLL,因此可以像客户端一样执行地形生成。

gcc -std=c99 -O3 -fPIC -shared -o world -I src -I deps/noise deps/noise/noise.c src/world.c
python server.py [HOST [PORT]]

控件

  • 沃斯(Wast)向前,向左,向后,右前进。
  • 跳跃的空间。
  • 左键单击以销毁一个块。
  • 右键单击或CMD +左键单击以创建一个块。
  • CTRL +右键单击以切换一个块作为光源。
  • 1-9选择要创建的块类型。
  • e循环通过块类型。
  • 标签以在步行和飞行之间切换。
  • ZXCVBN沿XYZ轴朝精确的方向移动。
  • 左移缩放。
  • F以拼字法显示场景。
  • o观察主要视图中的球员。
  • p在图片中观察玩家。
  • t将文本输入聊天。
  • 向前斜杠(/)输入命令。
  • BackQuote(`)在任何块上写文本(符号)。
  • 箭头键模仿鼠标运动。
  • 输入模拟鼠标单击。

聊天命令

 /goto [NAME]

传送到另一个用户。如果名称未指定,则选择随机用户。

 /list

显示连接用户的列表。

 /login NAME

切换到另一个注册的用户名。登录服务器将重新连接。用户名对病例敏感。

 /logout

未经许可并成为客座用户。在重新发布 /登录命令之前,自动登录将不会再次发生。

 /offline [FILE]

切换到离线模式。文件指定要使用的保存文件和默认为“ Craft ”。

 /online HOST [PORT]

连接到指定的服务器。

 /pq P Q

传送到指定的块。

 /spawn

传送回生成点。

截屏

实施详细信息

地形一代

使用单纯形噪声生成地形 – 根据位置播种的确定性噪声函数。因此,在给定位置,世界将始终以相同的方式生成。

世界被分成XZ平面的32×32块块(Y已升起)。这使世界成为“无限”(浮点精度当前是大X或Z值的问题),并且还可以更轻松地管理数据。仅需要从数据库查询可见块。

渲染

仅呈现裸露的面孔。这是一个重要的优化,因为绝大多数块要么完全隐藏,要么只暴露一两个面。每个块记录了每个相邻块的单块宽度重叠,因此它知道沿其周长的哪个块被暴露出来。

仅渲染可见的块。一种天真的冰扣方法用于测试摄像机视野中是否有块。如果不是,则不会渲染。这也会带来相当不错的表现。

当块在该块中更改一个块时,块缓冲区将完全再生,而不是试图更新VBO。

文本是使用位图图集渲染的。每个字符都呈现到形成2D矩形的两个三角形上。

使用“现代” OpenGL – 不使用dobece悔的固定功能管道功能。顶点缓冲物对象用于位置,正常和纹理坐标。顶点和碎片着色器用于渲染。矩阵操作函数在矩阵中,用于翻译,旋转,透视,拼字等矩阵。 3D型号由非常简单的原语组成,主要是立方体和矩形。这些模型是在Cube.C中生成的。

通过在碎片着色器中丢弃洋红色的像素来实现玻璃块和植物(植物不占用其三角形原始矩形形状的完整矩形形状)的透明度。

数据库

对世界的用户更改存储在SQLite数据库中。仅存储三角洲,因此生成了默认世界,然后加载时用户更改将在顶部应用。

主数据库表被命名为“块”,并具有列P,Q,X,Y,Z,W。 (p,q)标识块,(x,y,z)标识块位置,(w)标识块类型。 0代表一个空块(空气)。

在游戏中,块将其块存储在哈希地图中。一个(x,y,z)键映射到(w)值。

块的y位限制为0 <= y <256。上限主要是人工限制,以防止用户建造不必要的高层结构。不允许用户在y = 0处摧毁块,以免落在世界下。

多人游戏

多人游戏模式是使用普通的插座实现的。使用了一个简单的,基于线路的协议。每行均由命令代码和零或更多逗号分隔的参数组成。客户端通过简单命令从服务器请求块:C,P,Q,键。 “ C”的意思是“块”,(P,Q)标识了块。该密钥用于缓存 – 服务器将仅发送自客户端上一次要求该块以来执行的块更新。块更新(实时或作为块请求的一部分)以格式发送给客户端:b,p,q,x,x,y,z,w。在为请求的块发送了所有块后,服务器将以格式发送更新的高速缓存键:k,p,q,key。客户将在下次需要该块时存储此键并使用它。播放器位置以格式发送:P,PID,X,Y,Z,RX,RY。 PID是播放器ID,RX和RY值表示播放器的旋转,以两个不同的轴旋转。客户端从过去两个位置更新中介绍了播放器位置,以使动画更顺畅。客户端最多每0.1秒钟将其位置发送到服务器(如果不移动的话,更少)。

首次连接到服务器时,对SQLite数据库的客户端缓存可能是性能密集的。因此,在背景线程上执行sqlite写入。所有写入都会出现在交易中以进行绩效。该交易每5秒进行一次,而不是完成一定逻辑量的工作。环 /圆形缓冲区用作将哪些数据写入数据库的队列。

在多人游戏模式下,玩家可以在主视图或图片视图中相互观察。 PNP的实现非常简单 – 只需从另一个玩家的角度更改视口,然后再次渲染场景即可。

碰撞测试

通过在视力向量之后从玩家的位置扫描射线,通过扫描射线来实现HIT测试(用户指向用户指向的障碍)。这不是一种精确的方法,因此可以使步骤速率更小以更准确。

碰撞测试只需调整玩家的位置即可保持一定距离与障碍物的任何相邻区块的一定距离。 (云和植物没有标记为障碍,因此您可以通过它们。)

天穹顶

天空使用质感的天圆顶。纹理的X坐标代表一天中的时间。 Y值从天空球的底部映射到天空球的顶部。玩家始终处于球体的中心。块的片段着色器还采样了天空纹理,以根据块相对于衬里的天空来确定适当的雾色与块的位置混合。

环境阻塞

如本页面所述实施环境阻塞:

http://0fps.wo*rd*pr*ess.com/2013/07/03/ambient-occlusion-for-minecraft-like-worlds/

依赖性

  • GLEW用于管理跨平台的OpenGL扩展。
  • GLFW用于跨平台窗口管理。
  • 卷曲用于身份验证过程的HTTPS / SSL POST。
  • LODEPNG用于加载PNG纹理。
  • SQLite3用于保存用户添加 /删除的块。
  • TinycThread用于跨平台线程。

下载源码

通过命令行克隆项目:

git clone https://github.com/fogleman/Craft.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 Craft https://www.zuozi.net/34170.html

hoplite
上一篇: hoplite
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务