Jump to content
Sign in to follow this  
danny_winter

problema de chavetas que não descubro por nda o que é que se passa xD

Recommended Posts

danny_winter

int ganhou()
{
int i;

    for(i=0; i<numero_monstros; i++)
    {


    if(arr[i].hp <0)

    {

        if(strcmp(arr[i].nome, "Orc" == 0)   //****strcmp serve para comparar strings********/
           
    {



cout << "\n\n\nWee ganhou!!!!! e subiu de nivel " << endl;
player.forca += 2; //as modificações para "subir de nivel"
  	player.max_hp += 10;
   	player.max_mp += 7;
   	player.hp = player.max_hp; //recuperar a energia
   	player.mp = player.max_mp;
    }

   	if(strcmp(arr[i].nome, "Lizard" == 0)

{

cout << "\n\n\nWee ganhou!!!!! e subiu de nivel " << endl;
player.forca += 3; //as modificações para "subir de nivel"
  	player.max_hp += 15;
   	player.max_mp += 10.5;
   	player.hp = player.max_hp; //recuperar a energia
   	player.mp = player.max_mp;
    }

    if(strcmp(arr[i].nome,"Shadow" == 0)
    {

    cout << "\n\n\nWee ganhou!!!!! e subiu de nivel " << endl;
player.forca += 5; //as modificações para "subir de nivel"
  	player.max_hp += 20;
   	player.max_mp += 13;
   	player.hp = player.max_hp; //recuperar a energia
   	player.mp = player.max_mp;
    }
    if(strcmp(arr[i].nome, "Bahamut" == 0)
    {

    cout << "\n\n\nWee ganhou!!!!! e subiu de nivel " << endl;
player.forca += 14; //as modificações para "subir de nivel"
  	player.max_hp += 30;
   	player.max_mp += 25;
   	player.hp = player.max_hp; //recuperar a energia
   	player.mp = player.max_mp;
    }

    if(strcmp(arr[i].nome, "Ultima" == 0)

    {

    cout << "\n\n\nWee ganhou!!!!! e subiu de nivel " << endl;
player.forca += 50; //as modificações para "subir de nivel"
  	player.max_hp += 50;
   	player.max_mp += 50;
   	player.hp = player.max_hp; //recuperar a energia
   	player.mp = player.max_mp;
    }
    }
    }

//esperar.....
	system("PAUSE");

menuJogo();

	return 0;
}

conseguem ver alguma coisa errada ai?

Share this post


Link to post
Share on other sites
KTachyon

Eu vejo imensas coisas erradas aí. Principalmente a falta de fecho dos strcmp() :cheesygrin:

Mas o que acho pior é a forma como indentas o código ;)


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
danny_winter

pois o fecho dos parentisis já tinha visto, mas sim acho que isto tá tudo errado, pois já consegui que o programa corresse mas não está a fazer nem perto do que quero...

Share this post


Link to post
Share on other sites
danny_winter

basicamente o que queria que acontecesse era, que quando um tipo de monstro morresse, ganhava um tipo de atributos, quando fosse outro ganhava outro tipo de atributos, mas acho que compliquei e será mlhr usar vários if's xD só

Share this post


Link to post
Share on other sites
KTachyon

A minha dúvida será se tu queres de facto estabelecer comparações entre Strings para este efeito. A abordagem comum é declarares coisas como enum que contêm valores únicos para cada um dos monstros:

enum MonsterType { ORC, LIZARD, SHADOW, BAHAMUT, ULTIMA };

Eventualmente, se precisas de apresentar o nome do monstro ao utilizador, terás uma função que transforma o MonsterType (int) em texto. De resto, para a camada lógica do programa não deverás ter que estar a comparar caracteres.

Depois, relativamente aos conjuntos de blocos da função, o que vais fazer é igual em todos os casos, mudando apenas os valores consoante o monstro. Essa lógica devia ser associada a uma única função que recebe esses valores. E esses valores nunca devem ser escritos directamente no código. Deves utilizar outros métodos que te permitam alterar com facilidade esse valor em todo o teu programa, principalmente quando utilizas essas variáveis em vários pontos. Mesmo quando pensas que só vais precisar de indicar esse valor naquele sítio específico, deves sempre fazer isto. É uma boa prática de programação. Podes fazer isso, por exemplo, com defines (menos recomendado) ou com constantes.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
pikax

Apoio o que KTachyon disse.

Para mim comparações de strings devem ser evitadas ao máximo num jogo, porque comparações de strings torna-se um bocado lento, usa antes "int" ou enum.

O código está mal identado, aquelas 3 chavetas no final, por alto, não consigo perceber onde estão abertas.

Penso que a função que mandaste não faça parte de um metodo, por isso dá para concluir que tens bastantes de variaveis global identificadas, que tambem não é boa pratica de programação, visto que tambem não estão com nenhuma de denotação especial.

Acho que em fez de fazeres uma função que te suba automáticamente 3+ lvl, porque que não fazes tipo uma variavel int m_XP e se a variavel é mais que X então sobe de lvl e os status.

é que tens muitas vezes isto definido:

player.forca += 3; //as modificações para "subir de nivel"
player.max_hp += 15;
player.max_mp += 10.5;
player.hp = player.max_hp; //recuperar a energia
player.mp = player.max_mp;

bastava uma função para subir, nem que mandasses o max_hp e demais, por argumentos.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Flinger

Está um exemplo engraçado, que motiva a malta a treinar a programação. Lembro-me que quando estava a aprender a programar, o meu exercício favorito foi pegar num jogo que o professor tinha feito (estilo arcanoid), e melhorá-lo.

Não te posso ajudar muito agora com a questão das chavetas, mas para te dar uma dica de como implementar aquilo que a malta de disse dos enums, experimenta criar o enum, e adicionas à estrutura Monstro mais um campo, o campo código. Quando declaras cada variavel do tipo montro (no teu array), no campo codigo colocas o enum correspondente, e utilizas esse enum para fazer as comparações. Assim evitas uma comparação com strings que é muito mais pesada para o programa. Podes também usar o switch(), em vez de usares vários if's.

Outra hipótese, é adicionares à estrutura Monstro campos que definem quanto hp, mp e força o jogador ganha ao matar um determinado monstro. Assim evitas qualquer tipo de comparação, já que para qualquer monstro que o jogador mate, já tens os valores a incrementar à estrutura jogador.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.