
Einführung
"Linux ist nichts für Spiele!" - veralteter Satz: Jetzt gibt es viele großartige Spiele speziell für dieses wunderbare System. Trotzdem möchte ich manchmal etwas Besonderes, das zu Ihnen passt ... Und ich habe beschlossen, dieses Besondere zu kreieren.
Basis
Ich werde nicht den gesamten Code zeigen und erzählen (das ist nicht sehr interessant) - nur die Hauptpunkte.
1.Charakter
Hier sind alle Parameter des Charakters (Gesundheit, Rüstung, Erfahrung usw.) aufgeführt, die für die Darstellung und Bewegungsrichtung von Interesse sind (was nicht vorhanden ist).
int x = 5, y = 5; hp = 100, maxhp = 100, dm = 20, armor = 0, xp = 0, level = 0, diff = 10,
2. Management
Wie man das Zeichen so deutlich bewegt (x - \ ++, y - \ ++). Die Tastaturverarbeitung ist jedoch unterhaltsamer:
char key; char getkey() { system("stty raw"); key = getchar(); system("stty cooked"); return key; }
Es bleiben nur die "Steuerzeichen" zu setzen. Es kann mit einem Schalter gemacht werden, aber ich hasse es.
switch(...) case .. : ... ; break
switch(...) case .. : ... ; break
besser
switch(...) case .. : ... ; break
#define KEY if (key == #define I ){ #define J ;}else void keys() { getkey(); KEY 'a' I x-- ; pos = 1 J KEY...... }
Schönheit! Loop-Funktionen und laufen um den Bildschirm! Aber irgendwie hart ... Und der Cursor flackert und die Buchstaben ... Reparieren Sie es!
Wow! Ein Prozent ist fertig!
3. Die Welt um uns herum
Hier machen wir Arrays für x, y Teile der Welt und die Teile selbst
(char o[N])
, das gleiche gilt für Monster und Boni.
Wir erstellen die
world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N])
in Analogie zu
hero()
, aber mit Parametern und einer zusätzlichen Schleife zur Ausgabe des Arrays ... aus interesse zeichnen wir nur im sichtfeld (vis)
(if (ox[k] < vis && oy[k]....))
Jetzt füllen wir den Bildschirm mit Partikeln der Welt durch unkomplizierte und prozedural ausgehöhlte Räume und Passagen, betreten gleichzeitig Feinde und Objekte, für völlige Zufälligkeit vergessen Sie nicht
srand(time(NULL));
4. Interaktion
Jetzt müssen wir irgendwie nicht durch Mauern und Monster gehen, sondern Boni von Gegenständen erhalten.
Unser Favorit für und #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. Menü
Wir zeigen einfach das Menü auf dem Bildschirm an, nummerieren die Elemente und verarbeiten mit getkey () die Auswahl des Spielers. Wir schreiben die Statusleiste des Charakters, wir implementieren das Pumpmenü, wir schreiben den Hintergrund und wir bekommen das, was ich "Untergrund" nannte.
Fazit
Das ist etwas. Sie können es spielen, indem Sie es wie folgt
herunterladen , entpacken und ausführen:
$ sudo chmod +x Subsoil-1.0/Subsoil
$ Subsoil-1.0/Subsoil
oder schließlich inspiriert, schreiben Sie sich ein Abenteuer nach Ihren Wünschen. Ich warne Sie im Voraus: Mein Spiel ist nicht einfach!
Links
Prozedurale Generierung ,
Inspirer .