
مقدمة
"لينكس ليس للألعاب!" - عبارة قديمة: الآن هناك الكثير من الألعاب الرائعة خصيصًا لهذا النظام الرائع. لكن ، في بعض الأحيان ، أريد شيئًا مميزًا يناسبك ... وقررت إنشاء هذا الأمر الخاص.
مؤسسة
لن أعرض وأقول كل الشفرة (هذا ليس ممتعًا للغاية) - فقط النقاط الرئيسية.
1.Personazh
فيما يلي قائمة بجميع معالم الشخصية (الصحة ، الدروع ، التجربة ، إلخ) التي تهمك هي تقديم واتجاه الحركة (وهو غير موجود في الوقت الحالي).
int x = 5, y = 5; hp = 100, maxhp = 100, dm = 20, armor = 0, xp = 0, level = 0, diff = 10,
2. الإدارة
كيفية نقل الحرف بوضوح (x - \ ++ ، y - \ ++). لكن معالجة لوحة المفاتيح أكثر تسلية:
char key; char getkey() { system("stty raw"); key = getchar(); system("stty cooked"); return key; }
يبقى فقط لضبط "أحرف التحكم". يمكن أن يتم ذلك مع التبديل ، لكنني أكره ذلك.
switch(...) case .. : ... ; break
switch(...) case .. : ... ; break
أفضل مثل هذا
#define KEY if (key == #define I ){ #define J ;}else void keys() { getkey(); KEY 'a' I x-- ; pos = 1 J KEY...... }
الجمال! وظائف حلقة وتشغيل حول الشاشة! ولكن بطريقة قاسية ... وميض المؤشر ، والحروف ... إصلاحه!
اه-XX! واحد بالمائة جاهز!
3. العالم من حوله
نحن هنا نصنع صفائف لـ x و y حول العالم والقطع نفسها
(char o[N])
، نفس الشيء بالنسبة للوحوش والمكافآت.
نخلق وظيفة
world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N])
عن طريق القياس مع
hero()
، ولكن مع المعلمات وحلقة إضافية لإخراج المصفوفة ... من أجل الاهتمام ، نرسم فقط في مجال الرؤية (تجاه)
(if (ox[k] < vis && oy[k]....))
الآن نملأ الشاشة بجزيئات العالم من خلال غرف وممرات غير معقدة من الناحية الإجرائية ، وفي نفس الوقت ندخل الأعداء والأشياء ، لأن العشوائية الكاملة لا تنسى
srand(time(NULL));
4. التفاعل
الآن نحن بحاجة إلى عدم المرور عبر الجدران والوحوش ، والحصول على مكافآت من الأشياء.
لدينا المفضل و # تعريف
#define TOUCH if (x == ox[i] && y == oy[i] && pos == #define HIT x == ex[i] && y == ey[i] && pos == for (int i = 0; i <= n; i++) { if (i <= diff) { if (Mdm) ehp[i]-=2 ; // " " epos[i] = 0; if (ex[i] < x+5 && ex[i] > x-5 && ey[i] < y+5 && ey[i] > y-5 ) { edel(i); // if (ex[i] < x I ex[i]++ ; epos[i] = 1 J if (ex[i] > x I ex[i]-- ; epos[i] = 2 J if (ey[i] < y I ey[i]++ ; epos[i] = 3 J if (ey[i] > y I ey[i]-- ; epos[i] = 4 ;} } for (int j = 0; j <= n; j++) // while (ex[i] == ox[j] && ey[i] == oy[j] || ex[i] == ex[j] && ey[i] == ey[j] && j != i) { if (epos[i] == 1) ex[i]-- ; else if (epos[i] == 2) ex[i]++ ; else if (epos[i] == 3) ey[i]-- ; else if (epos[i] == 4) ey[i]++ ; } if (x == ex[i] && y == ey[i]) // "" { if (ehp[i] > 1) { ehp[i] -= dm; (edm[i] < armor) ? hp -= 0 : hp -= edm[i]-armor; } else { ex[i] = ey[i] = -1; xp += exp[i]; ehp[i] = 12; } } if (!ght) // { if (HIT 1) y++ ;else if (HIT 2) x-- ;else if (HIT 3) y-- ;else if (HIT 4) x++ ; } } if (!ght) // , { TOUCH 1 I y++ J TOUCH 2 I x-- J TOUCH 3 I y-- J TOUCH 4 ) x++ ; } }
5.Menyu
نقوم ببساطة بعرض القائمة على الشاشة ، وترقيم العناصر ، باستخدام getkey () نعالج اختيار اللاعب. نكتب شريط الحالة للشخصية ، وننفذ قائمة الترقية ، ونكتب الخلفية ، ونحصل على ما أسميته "Subsoil".
استنتاج
هذا شيء يمكنك تشغيله عن طريق
التنزيل والتفريغ والتشغيل بهذه الطريقة:
$ sudo chmod +x Subsoil-1.0/Subsoil
$ Subsoil-1.0/Subsoil
أو أخيرًا ، ألهم نفسك ، اكتب لنفسك مغامرة ترضيك. أحذرك مقدمًا: لعبتي ليست سهلة!
المرجع
الجيل الإجرائي ،
الملهم .