
Pendahuluan
"Linux bukan untuk game!" - Ungkapan usang: sekarang ada banyak permainan hebat khusus untuk sistem yang luar biasa ini. Tapi tetap saja, kadang-kadang, aku menginginkan sesuatu yang istimewa yang cocok untukmu ... Dan aku memutuskan untuk membuat ini istimewa.
Base
Saya tidak akan menunjukkan dan memberi tahu semua kode (ini tidak terlalu menarik) - hanya poin utama.
1. Karakter
Di sini tercantum semua parameter karakter (kesehatan, baju besi, pengalaman, dll.) Yang menarik adalah render dan arah gerakan (yang tidak tersedia sekarang).
int x = 5, y = 5; hp = 100, maxhp = 100, dm = 20, armor = 0, xp = 0, level = 0, diff = 10,
2. Manajemen
Cara memindahkan karakter dengan sangat jelas (x - \ ++, y - \ ++). Tetapi pemrosesan keyboard lebih menghibur:
char key; char getkey() { system("stty raw"); key = getchar(); system("stty cooked"); return key; }
Tetap hanya untuk mengatur "karakter kontrol." Itu bisa dilakukan dengan saklar, tapi aku benci itu.
switch(...) case .. : ... ; break
switch(...) case .. : ... ; break
lebih baik seperti ini
#define KEY if (key == #define I ){ #define J ;}else void keys() { getkey(); KEY 'a' I x-- ; pos = 1 J KEY...... }
Cantik! Fungsi lingkaran dan jalankan di sekitar layar! Tapi entah bagaimana kasar ... Dan kursor berkedip, dan surat-surat ... Perbaiki!
Wow! Satu persen sudah siap!
3. Dunia sekitar
Di sini kita membuat array untuk x, y keping dunia dan keping itu sendiri
(char o[N])
, sama untuk monster dan bonus.
Kami membuat fungsi
world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N])
dengan analogi dengan
hero()
, tetapi dengan parameter dan loop tambahan untuk menampilkan array ... untuk kepentingan, kami menggambar hanya di bidang pandang (vis)
(if (ox[k] < vis && oy[k]....))
Sekarang kita mengisi layar dengan partikel-partikel dunia melalui tanpa rumit untuk dan secara prosedural melubangi kamar dan lorong, pada saat yang sama memasukkan musuh dan benda, untuk keacakan lengkap jangan lupa tentang
srand(time(NULL));
4. Interaksi
Sekarang kita perlu entah bagaimana tidak melewati dinding dan monster, menerima bonus dari objek.
Favorit kami untuk dan #define
#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.Menu
Kami cukup menampilkan menu di layar, menomori item, menggunakan getkey (), kami memproses pilihan pemain. Kami menulis bilah status karakter, kami menerapkan menu pemompaan, kami menulis latar belakang, dan kami mendapatkan apa yang saya sebut "Subsoil" ("Subsoil").
Kesimpulan
Ini sesuatu. Anda dapat memainkannya dengan
mengunduh , membongkar dan menjalankan dengan cara ini:
$ sudo chmod +x Subsoil-1.0/Subsoil
$ Subsoil-1.0/Subsoil
, atau, akhirnya, mengilhami, menulis sendiri petualangan sesuai keinginan Anda. Saya memperingatkan Anda sebelumnya: permainan saya tidak mudah!
Tautan
Generasi Prosedural ,
Inspirer .