Pra quem gosta de RPG. Um sistema de lutas.
Publicado por Hunz 29/11/2004
[ Hits: 13.444 ]
Homepage: http://tnegri.com/
Antes de tudo..
* Cada personagem tem o seu arquivo de texto.
* No código explica a estrutura do arquivo e tem um exemplo.
Para compilar:
gcc luta.c -o luta
Para executar:
luta <personagem1> <personagem2>
Os arquivos de cada personagem tem que estar na pasta de onde o arquivo for executado.
Bom divertimento e que isso seja de alguma ajuda.
Abraços,
Fiquem com Deus.
/* Desenvolvido por: Thiago Negri ( hunz ) */
/* Email: tn_negri@hotmail.com */
/*
-- Estrutura do arquivo --
Linha 1: Dano --> Quantidade maxima de dano que o personagem pode causar.
Linha 2: Defesa --> Quantidade maxima de pontos de dano que o personagem pode defender.
Linha 3: Probabilidade de Defesa --> Com que frequencia ele defende os ataques.
Linha 4: Vida --> A vida do personagem.
Linha 5: Destreza --> Diminui as probabilidades de esquiva do inimigo.
Linha 6: Probabilidade de Esquiva --> Com que frequencia o personagem esquiva os ataques.
Linha 7: Velocidade do Ataque --> Com que frequencia seu personagem ataca, quanto maior, mais rapido.
Linha 8: Penetracao de Armadura/Defesa --> Diminui a defesa total do inimigo.
<-- Exemplo de Arquivo -->
35
25
35
550
25
40
154
10
<-- Obs: Todos os atributos devem ser numeros inteiros. -->
*/
#include <stdlib.h>
#include <stdio.h>
FILE *char1,
*char2;
int dmg1,dmg2,dmgx,
def1,def2,defx,
der1,der2,
vit1,vit2,
acu1,acu2,
dod1,dod2,dodx,
asp1,asp2,
pie1,pie2,
tua1,tua2,
per;
int atking(int player, char *play1, char *play2) {
switch (player) {
case 1: {
dodx = dod2 - acu1;
per = rand() % 100;
if (per <= dodx) {
printf("%s esquivou o ataque de %s.\n",play2,play1);
return 0;
}
per = rand() % 100;
if (per <= der2) {
defx = def2 - pie1;
dmgx = dmg1 - defx;
if (dmgx < 1) {
printf("%s defendeu todo o ataque de %s.\n",play1,play2);
return 0;
}
vit2 = vit2 - dmgx;
printf("%s sofreu um dano de %d ponto",play2,dmgx);
if (dmgx > 1)
printf("s");
printf(" (defendeu %d ponto",defx);
if (defx > 1)
printf("s");
printf(").\n");
return 0;
}
printf("%s sofreu um dano de %d ponto",play2,dmg1);
if (dmg1 > 1)
printf("s");
printf("\n");
vit2 = vit2 - dmg1;
return 0;
}
case 2: {
dodx = dod1 - acu2;
per = rand() % 100;
if (per <= dodx) {
printf("%s esquivou o ataque de %s.\n",play1,play2);
return 0;
}
per = rand() % 100;
if (per <= der1) {
defx = def1 - pie2;
dmgx = dmg2 - defx;
if (dmgx < 1) {
printf("%s defendeu todo o ataque de %s.\n",play2,play1);
return 0;
}
vit1 = vit1 - dmgx;
printf("%s sofreu um dano de %d ponto",play1,dmgx);
if (dmgx > 1)
printf("s");
printf(" (defendeu %d ponto",defx);
if (defx > 1)
printf("s");
printf(").\n");
return 0;
}
printf("%s sofreu um dano de %d ponto",play1,dmg2);
if (dmg2 > 1)
printf("s");
printf("\n");
vit1 = vit1 - dmg2;
return 0;
}
}
}
int main(int argc, char *argv[])
{
srand(time(NULL));
if (argc != 3) {
printf("Modo de uso incorreto.n");
return 0;
}
if ((char1=fopen(argv[1],"r"))==NULL) {
printf("%s, personagem não encontrado.\n",argv[1]);
return 0;
}
if ((char2=fopen(argv[2],"r"))==NULL) {
printf("%s, personagem não encontrado.\n",argv[2]);
return 0;
}
/* Carrega atributos do Personagem1 */
fscanf(char1,"%d\n",&dmg1);
fscanf(char1,"%d\n",&def1);
fscanf(char1,"%d\n",&der1);
fscanf(char1,"%d\n",&vit1);
fscanf(char1,"%d\n",&acu1);
fscanf(char1,"%d\n",&dod1);
fscanf(char1,"%d\n",&asp1);
fscanf(char1,"%d\n",&pie1);
printf("-%s- [Dmg: %d][Def: %d][Def\%: %d][Vit: %d][Acu: %d][Dod\%: %d][Atkspd: %d][PA: %d]\n",argv[1],dmg1,def1,der1,vit1,acu1,dod1,asp1,pie1);
/* Carrega atributos do Personagem2 */
fscanf(char2,"%d\n",&dmg2);
fscanf(char2,"%d\n",&def2);
fscanf(char2,"%d\n",&der2);
fscanf(char2,"%d\n",&vit2);
fscanf(char2,"%d\n",&acu2);
fscanf(char2,"%d\n",&dod2);
fscanf(char2,"%d\n",&asp2);
fscanf(char2,"%d\n",&pie2);
printf("-%s- [Dmg: %d][Def: %d][Def\%: %d][Vit: %d][Acu: %d][Dod\%: %d][Atkspd: %d][PA: %d]\n",argv[2],dmg2,def2,der2,vit2,acu2,dod2,asp2,pie2);
printf("Iniciando batalha.. %s VS %s\n",argv[1],argv[2]);
tua1 = 100000;
tua2 = 100000;
while ((vit1 > 0) || (vit2 > 0)) {
tua1 = tua1 - asp1;
if (tua1 < 1) {
atking(1,argv[1],argv[2]);
tua1 = 100000;
}
if (vit2 < 1)
break;
tua2 = tua2 - asp2;
if (tua2 < 1) {
atking(2,argv[1],argv[2]);
tua2 = 100000;
}
if (vit1 < 1)
break;
}
if (vit2 < 1) {
printf("%s ganhou a luta!\n",argv[1]);
return 0;
}
if (vit1 < 1) {
printf("%s ganhou a luta!\n",argv[2]);
return 0;
}
}
Matrizes esparsas, produto por escalar e produto por um vetor
SIMULADOR DE DADOS DE RPG - BASEADO EM VAMPIRO A MÁSCARA
Teoria do Caos - (Equação Logística)
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Gentoo binário em 2026: UEFI, LUKS, Btrfs e Systemd
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
O que houve com slackware ??? (12)
Alterar conteúdo de dica [RESOLVIDO] (3)
Vou destruir sua infância:) (5)









