
Présentation
"Linux n'est pas pour les jeux!" - phrase obsolète: maintenant il y a beaucoup de grands jeux spécialement pour ce merveilleux système. Mais quand même, parfois, je veux quelque chose de spécial qui vous convienne ... Et j'ai décidé de créer ce spécial.
Base
Je ne montrerai pas et ne dirai pas tout le code (ce n'est pas très intéressant) - seulement les points principaux.
1. caractère
Voici la liste de tous les paramètres du personnage (santé, armure, expérience, etc.) qui intéressent le rendu et la direction du mouvement (qui n'est pas présent).
int x = 5, y = 5; hp = 100, maxhp = 100, dm = 20, armor = 0, xp = 0, level = 0, diff = 10,
2. Gestion
Comment déplacer le caractère si clairement (x - \ ++, y - \ ++). Mais le traitement au clavier est plus amusant:
char key; char getkey() { system("stty raw"); key = getchar(); system("stty cooked"); return key; }
Il ne reste plus qu'à définir les "caractères de contrôle". Cela peut être fait avec un interrupteur, mais je déteste ça.
switch(...) case .. : ... ; break
mieux
switch(...) case .. : ... ; break
comme ça
#define KEY if (key == #define I ){ #define J ;}else void keys() { getkey(); KEY 'a' I x-- ; pos = 1 J KEY...... }
La beauté! Boucle des fonctions et tourne autour de l'écran! Mais en quelque sorte durement ... Et le curseur scintille, et les lettres ... Fixez-le!
Ouah! Un pour cent est prêt!
3. Le monde autour
Ici, nous faisons des tableaux pour les pièces x, y du monde et les pièces elles-mêmes
(char o[N])
, de même pour les monstres et les bonus.
Nous créons la fonction
world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N])
par analogie avec
hero()
, mais avec des paramètres et une boucle supplémentaire pour sortir le tableau ... par intérêt, on ne dessine que dans le champ de vision (vis)
(if (ox[k] < vis && oy[k]....))
Maintenant, nous remplissons l'écran de particules du monde à travers des pièces et des passages peu compliqués et procéduraux, en même temps que des ennemis et des objets, pour un hasard complet, n'oubliez pas le
srand(time(NULL));
4. Interaction
Maintenant, nous devons en quelque sorte ne pas traverser les murs et les monstres, recevoir des bonus des objets.
Notre préféré pour et #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
Nous affichons simplement le menu à l'écran, numérotons les éléments, en utilisant getkey () nous traitons le choix du joueur. Nous écrivons la barre d'état du personnage, nous implémentons le menu de pompage, nous écrivons l'arrière-plan et nous obtenons ce que j'ai appelé "Subsoil" ("Subsoil").
Conclusion
C'est quelque chose. Vous pouvez y jouer en
téléchargeant , décompressant et exécutant de cette manière:
$ sudo chmod +x Subsoil-1.0/Subsoil
$ Subsoil-1.0/Subsoil
ou, enfin, inspiré, écrivez-vous une aventure à votre goût. Je vous préviens à l'avance: mon jeu n'est pas facile!
Les liens
Génération procédurale ,
inspirateur .