
1. Introdução
"Linux não é para jogos!" - frase obsoleta: agora existem muitos jogos excelentes especificamente para esse maravilhoso sistema. Mas ainda assim, às vezes, quero algo especial que combina com você ... E decidi criar esse especial.
Base
Não vou mostrar e contar todo o código (isso não é muito interessante) - apenas os pontos principais.
1.Personagem
Aqui estão listados todos os parâmetros do personagem (saúde, armadura, experiência, etc.) de interesse: a representação e a direção do movimento (que não está presente).
int x = 5, y = 5; hp = 100, maxhp = 100, dm = 20, armor = 0, xp = 0, level = 0, diff = 10,
2. Gerenciamento
Como mover o personagem tão claramente (x - \ ++, y - \ ++). Mas o processamento do teclado é mais divertido:
char key; char getkey() { system("stty raw"); key = getchar(); system("stty cooked"); return key; }
Resta apenas definir os "caracteres de controle". Isso pode ser feito com um interruptor, mas eu odeio isso.
switch(...) case .. : ... ; break
switch(...) case .. : ... ; break
melhor assim
#define KEY if (key == #define I ){ #define J ;}else void keys() { getkey(); KEY 'a' I x-- ; pos = 1 J KEY...... }
Beleza! Loop funções e correr ao redor da tela! Mas de alguma forma dura ... E o cursor pisca, e as letras ... Conserte!
Uau! Um por cento está pronto!
3. O mundo ao redor
Aqui criamos matrizes para x, y pedaços do mundo e as próprias peças
(char o[N])
, o mesmo para monstros e bônus.
Criamos a função
world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N])
por analogia com
hero()
, mas com parâmetros e um loop adicional para gerar a matriz ... por interesse, traçamos apenas no campo de visão (vis)
(if (ox[k] < vis && oy[k]....))
Agora enchemos a tela com partículas do mundo através de salas e passagens descomplicadas e processuais, ao mesmo tempo em que entram inimigos e objetos, para que a aleatoriedade completa não se esqueça de
srand(time(NULL));
4. Interação
Agora precisamos de alguma forma não atravessar paredes e monstros, receber bônus de objetos.
O nosso favorito e #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
Simplesmente exibimos o menu na tela, numerando os itens, usando getkey () e processamos a escolha do jogador. Nós escrevemos a barra de status do personagem, implementamos o menu de atualização, escrevemos o plano de fundo e obtemos o que eu chamei de "Subsolo".
Conclusão
Isso é alguma coisa. Você pode jogá-lo
baixando , descompactando e executando da seguinte maneira:
$ sudo chmod +x Subsoil-1.0/Subsoil
$ Subsoil-1.0/Subsoil
, ou, finalmente, inspirado, escreva para si mesmo uma aventura ao seu gosto. Eu te aviso com antecedência: meu jogo não é fácil!
Ligações
Geração procedural ,
Inspirador .