نسخة Minecraft لأنظمة التشغيل Windows وMac OS X وLinux. فقط بضعة آلاف من أسطر لغة C باستخدام برنامج OpenGL (التظليل) الحديث. يتم تضمين دعم اللاعبين المتعددين عبر الإنترنت باستخدام خادم يستند إلى Python.
http://www.michaelfogleman.com/craft/
تتوفر ثنائيات Mac وWindows على الموقع الإلكتروني.
http://www.michaelfogleman.com/craft/
انظر أدناه للتشغيل من المصدر.
قم بتنزيل وتثبيت CMake إذا لم يكن لديك بالفعل. يمكنك استخدام Homebrew لتبسيط عملية التثبيت:
brew install cmake
sudo apt-get install cmake libglew-dev xorg-dev libcurl4-openssl-dev
sudo apt-get build-dep glfw
قم بتنزيل وتثبيت CMake وMinGW. أضف C:MinGWbin
إلى PATH
الخاص بك.
قم بتنزيل وتثبيت cURL بحيث يكون CURL/lib و CURL/include موجودين في دليل ملفات البرنامج لديك.
استخدم الأوامر التالية بدلاً من تلك الموضحة في القسم التالي.
cmake -G "MinGW Makefiles"
mingw32-make
بمجرد حصولك على التبعيات (انظر أعلاه)، قم بتشغيل الأوامر التالية في جهازك الطرفي.
git clone https://github.com/fogleman/Craft.git
cd Craft
cmake .
make
./craft
بعد سنوات عديدة، تمت إزالة موقع craft.michaelfogleman.com. راجع قسم الخادم للحصول على معلومات حول الاستضافة الذاتية.
يمكنك الاتصال بخادم باستخدام وسيطات سطر الأوامر...
./craft [HOST [PORT]]
أو باستخدام الأمر "/online" الموجود في اللعبة نفسها.
/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]]
/goto [NAME]
النقل الفضائي إلى مستخدم آخر. إذا كان NAME غير محدد، فسيتم اختيار مستخدم عشوائي.
/list
عرض قائمة المستخدمين المتصلين.
/login NAME
قم بالتبديل إلى اسم مستخدم مسجل آخر. سيتم إعادة الاتصال بخادم تسجيل الدخول. اسم المستخدم حساس لحالة الأحرف.
/logout
قم بإلغاء المصادقة وتصبح مستخدمًا ضيفًا. لن تحدث عمليات تسجيل الدخول التلقائية مرة أخرى حتى يتم إعادة إصدار الأمر /login.
/offline [FILE]
التبديل إلى وضع غير متصل بالشبكة. يحدد FILE ملف الحفظ المطلوب استخدامه والإعدادات الافتراضية هي "craft".
/online HOST [PORT]
الاتصال بالخادم المحدد.
/pq P Q
النقل الفوري إلى القطعة المحددة.
/spawn
النقل الفضائي مرة أخرى إلى نقطة تفرخ.
يتم إنشاء التضاريس باستخدام ضوضاء Simplex - وهي وظيفة ضوضاء حتمية مصنفة بناءً على الموقع. لذلك سيتم إنشاء العالم دائمًا بنفس الطريقة في مكان معين.
يتم تقسيم العالم إلى قطع كتل مقاس 32 × 32 في المستوى XZ (Y في الأعلى). يتيح ذلك للعالم أن يكون "لا نهائيًا" (تمثل دقة النقطة العائمة حاليًا مشكلة عند قيم X أو Z الكبيرة) كما يسهل أيضًا إدارة البيانات. يجب الاستعلام عن القطع المرئية فقط من قاعدة البيانات.
يتم عرض الوجوه المكشوفة فقط. يعد هذا تحسينًا مهمًا نظرًا لأن الغالبية العظمى من الكتل إما مخفية تمامًا أو تكشف وجهًا واحدًا أو وجهين فقط. تسجل كل قطعة تداخل عرض كتلة واحدة لكل قطعة مجاورة حتى تعرف الكتل المكشوفة على طول محيطها.
يتم عرض القطع المرئية فقط. يتم استخدام أسلوب إعدام الإحباط الساذج لاختبار ما إذا كانت هناك قطعة في عرض الكاميرا. إذا لم يكن كذلك، لم يتم تقديمه. يؤدي هذا إلى تحسين الأداء بشكل جيد أيضًا.
يتم إعادة إنشاء المخازن المؤقتة للقطعة بالكامل عند تغيير كتلة في تلك القطعة، بدلاً من محاولة تحديث VBO.
يتم تقديم النص باستخدام أطلس الصورة النقطية. يتم عرض كل حرف على مثلثين يشكلان مستطيلاً ثنائي الأبعاد.
يتم استخدام برنامج OpenGL "الحديث" - ولا يتم استخدام وظائف خطوط الأنابيب ذات الوظيفة الثابتة المهملة. يتم استخدام كائنات Vertex buffer لإحداثيات الموضع والإحداثيات العادية والملمس. يتم استخدام تظليل Vertex و Fragment للعرض. توجد وظائف معالجة المصفوفات في المصفوفات Matrix.c للترجمة، والتدوير، والمنظور، والتهجئة، وما إلى ذلك. تتكون النماذج ثلاثية الأبعاد من عناصر أولية بسيطة جدًا - معظمها مكعبات ومستطيلات. يتم إنشاء هذه النماذج في التعليمات البرمجية في 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 لتجنب الوقوع تحت العالم.
يتم تنفيذ وضع تعدد اللاعبين باستخدام مآخذ التوصيل القديمة. يتم استخدام بروتوكول بسيط يستند إلى الخط ASCII. يتكون كل سطر من رمز الأمر وصفر أو أكثر من الوسائط المفصولة بفواصل. يطلب العميل قطعًا من الخادم باستخدام أمر بسيط: C,p,q,key. "C" تعني "قطعة" و(p, q) تحدد القطعة. يتم استخدام المفتاح للتخزين المؤقت - سيرسل الخادم فقط تحديثات الكتلة التي تم تنفيذها منذ طلب العميل آخر مرة لهذه القطعة. يتم إرسال تحديثات الكتلة (في الوقت الفعلي أو كجزء من طلب قطعة) إلى العميل بالتنسيق: B,p,q,x,y,z,w. بعد إرسال كافة الكتل للقطعة المطلوبة، سيرسل الخادم مفتاح ذاكرة تخزين مؤقت محدث بالتنسيق: K,p,q,key. سيقوم العميل بتخزين هذا المفتاح واستخدامه في المرة التالية التي يحتاج فيها إلى طلب هذا الجزء. يتم إرسال مراكز اللاعبين بالتنسيق: P,pid,x,y,z,rx,ry. معرف المنتج هو معرف اللاعب وتشير قيم rx وry إلى دوران اللاعب في محورين مختلفين. يقوم العميل باستيفاء مواقع اللاعب من تحديثي الموضعين السابقين للحصول على رسوم متحركة أكثر سلاسة. يرسل العميل موقعه إلى الخادم كل 0.1 ثانية على الأكثر (أقل إذا لم يكن متحركًا).
يمكن أن يكون التخزين المؤقت من جانب العميل لقاعدة بيانات sqlite كثيف الأداء عند الاتصال بالخادم لأول مرة. لهذا السبب، يتم تنفيذ عمليات الكتابة باستخدام SQLite على سلسلة رسائل في الخلفية. تحدث كافة عمليات الكتابة في معاملة للأداء. يتم تنفيذ المعاملة كل 5 ثوانٍ بدلاً من إكمال قدر منطقي من العمل. يتم استخدام المخزن المؤقت الحلقي/الدائري كقائمة انتظار للبيانات التي سيتم كتابتها في قاعدة البيانات.
في وضع اللعب الجماعي، يمكن للاعبين ملاحظة بعضهم البعض في العرض الرئيسي أو في عرض صورة داخل صورة. كان تنفيذ PnP بسيطًا بشكل مدهش - ما عليك سوى تغيير إطار العرض وعرض المشهد مرة أخرى من وجهة نظر اللاعب الآخر.
يتم تنفيذ اختبار الضربة (أي الكتلة التي يشير إليها المستخدم) عن طريق مسح شعاع من موضع اللاعب إلى الخارج، متبعًا متجه البصر الخاص به. هذه ليست طريقة دقيقة، لذا يمكن تقليل معدل الخطوة ليكون أكثر دقة.
يقوم اختبار الاصطدام ببساطة بضبط موضع اللاعب ليظل على مسافة معينة بعيدًا عن أي كتل مجاورة تمثل عوائق. (لا يتم وضع علامة على السحب والنباتات كعوائق، لذا يمكنك المرور من خلالها مباشرة.)
يتم استخدام قبة السماء محكم للسماء. يمثل الإحداثي X للنسيج الوقت من اليوم. يتم تعيين قيم Y من أسفل كرة السماء إلى أعلى كرة السماء. يكون اللاعب دائمًا في وسط الكرة. تقوم تظليل الأجزاء للكتل أيضًا باختبار نسيج السماء لتحديد لون الضباب المناسب للمزج معه بناءً على موضع الكتلة بالنسبة للسماء الخلفية.
يتم تنفيذ الإغلاق المحيط كما هو موضح في هذه الصفحة:
http://0fps.wordpress.com/2013/07/03/ambient-occlusion-for-minecraft-like-worlds/