Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas Com Passagens De Valores


Guest Ueta

Pergunta

Estou fazendo um joguinho bem tosco em C e estou com problemas na passagem de parametros.

Segue o fonte:

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <windows.h>

int ataque, dano, armadura, agilidade, exp, level, hp; //atributos basicos

int op1; //opcao pra ver se atributos estao corretos

int escolha; //escolha das acoes do menu

int escolha_shop1; //escolha do menu do shop de poção

int escolha_shop2; //escolha do shop de armas

void aataque(),aarmadura(),aagilidade(),adano(),ahp(); //são as funções do shop que aumentam o atributo se a pocao for comprada

int shoppo();

grana = 500; //dinheiro inicial

//Limpar a p**** da tela

void cls(void)

{

COORD coordScreen = {0, 0};

DWORD cCharsWritten;

CONSOLE_SCREEN_BUFFER_INFO csbi;

DWORD dwConSize;

HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);

GetConsoleScreenBufferInfo(hConsole, &csbi);

dwConSize = csbi.dwSize.X * csbi.dwSize.Y;

FillConsoleOutputCharacter(hConsole, TEXT(' '),

dwConSize, coordScreen, &cCharsWritten);

GetConsoleScreenBufferInfo(hConsole, &csbi);

FillConsoleOutputAttribute(hConsole, csbi.wAttributes,

dwConSize, coordScreen, &cCharsWritten);

SetConsoleCursorPosition(hConsole, coordScreen);

}

//fim do limpa

//Aqui o jogador entra com os atributos do personagem

void inicio()

{

op1 = 0;

puts("Entre com os seus atributos (numeros de 1 a 20): \n");

puts("Ataque:");

scanf("%d", &ataque);

puts("Dano:");

scanf("%d", &dano);

puts("Armadura:");

scanf("%d", &armadura);

puts("Agilidade:");

scanf("%d", &agilidade);

puts("HP:");

scanf("%d", &hp);

atributos();

puts("Esses são seus atributos:");

printf("Ataque: %d \n",ataque);

printf("Dano: %d \n",dano);

printf("Armadura: %d \n",armadura);

printf("Agilidade: %d \n",agilidade);

printf("HP: %d \n",hp);

puts("Os atributos estao certos? 1-Sim / 2-não");

scanf("%d",&op1);

if (op1 == 2)

{

inicio();

}

cls();

}

//fim

//caso algum atributo esteja fora de 1 a 20 ele tem que digitar de novo

atributos()

{

if (ataque < 1 || ataque > 20)

{

puts("Atributo tem que ser entre 1 a 20!");

inicio();

}

if (dano < 1 || dano > 20)

{

puts("Atributo tem que ser entre 1 a 20!");

inicio();

}

if (armadura < 1 || armadura > 20)

{

puts("Atributo tem que ser entre 1 a 20!");

inicio();

}

if (agilidade < 1 || agilidade > 20)

{

puts("Atributo tem que ser entre 1 a 20!");

inicio();

}

if (hp < 1 || hp > 20)

{

puts("Atributo tem que ser entre 1 a 20!");

inicio();

}

}

//fim

//shop de armas

armas(int escolha_shop)

{

puts("Bem vindo ao shop de armas!");

puts("Uma arma aumenta o seu ATAQUE e DANO. Quanto mais atributos a");

puts("arma fornecer melhor e consequentemente mais cara sera.");

puts("Qual arma voce deseja?");

puts("1-Bastão de madeira");

puts("2-Adaga");

puts("3-Lança pequena");

puts("4-Sair");

puts("");

printf("Grana: %d \n", grana);

scanf("%d",&escolha_shop);

}

//inicio shop de poções

shoppo(int escolha_shop,int grana)

{

puts("Bem vindo ao shop de pocao!");

puts("Aqui temos pocao que aumentam permanentemente um determinado atributo.");

puts("Escolha a pocao que deseja:");

puts("1-Pocao do ataque : 100g");

puts("2-Pocao do dano : 100g");

puts("3-Pocao da armadura : 100g");

puts("4-Pocao da agilidade : 100g");

puts("5-Pocao do hp : 100g");

puts("6-Nem quero comprar nada.");

puts("");

printf("Grana: %d \n", grana);

scanf("%d",&escolha_shop);

switch(escolha_shop)

{

case 1 : aataque();

break;

case 2 : adano();

break;

case 3 : aarmadura();

break;

case 4 : aagilidade();

break;

case 5 : ahp();

break;

case 6 : cls(),menu();

}

return 0;

}

//funcao de compra da pocao de ataque

void aataque(int grana)

{

if (grana < 100);

{

printf("Se não tem dinheiro seu lixo! \n");

system("pause");

cls();

menu();

}

ataque++;

printf("Seu ataque aumentou em 1 ponto! \n");

system("pause");

cls();

grana = grana - 100;

shoppo();

}

//idem mas para dano

void adano(int grana)

{

if (grana < 100);

{

printf("Se não tem dinheiro seu lixo! \n");

system("pause");

cls();

menu();

}

dano++;

printf("Seu dano aumentou em 1 ponto!");

grana = grana - 100;

shoppo();

}

//idem mas para armadura

void aarmadura(int grana)

{

if (grana < 100);

{

printf("Se não tem dinheiro seu lixo! \n");

system("pause");

cls();

menu();

}

armadura++;

printf("Sua armadura aumentou em 1 ponto!");

grana = grana - 100;

shoppo();

}

//idem mas para agilidade

void aagilidade(int grana)

{

if (grana < 100);

{

printf("Se não tem dinheiro seu lixo! \n");

system("pause");

cls();

menu();

}

agilidade++;

printf("Sua agilidade aumentou em 1 ponto!");

grana = grana - 100;

shoppo();

}

//idemmas para HP

void ahp(int grana)

{

if (grana < 100);

{

printf("Se não tem dinheiro seu lixo! \n");

system("pause");

cls();

menu();

}

hp++;

printf("Seu HP aumentou em 1 ponto!");

grana = grana - 100;

shoppo();

}

//fim shop pocoes

//exibe janela de status do jogador

status()

{

printf("*****Status***** \n");

printf("Ataque: %d \n",ataque);

printf("Dano: %d \n",dano);

printf("Armadura: %d \n",armadura);

printf("Agilidade: %d \n",agilidade);

printf("HP: %d \n",hp);

printf("Grana: %d \n", grana);

printf("**************** \n");

system("pause");

cls();

menu();

}

//fim status

// menu de acoes do jogo

menu()

{

for(;;)

{

puts("Menu de acoes");

puts("1-Shop de pocao");

puts("2-Shop de armas");

puts("3-Shop de armaduras");

puts("4-Ir na floresta arrumar treta");

puts("5-Taverna");

puts("6-Status");

puts("7-Eu não quero mais jogar!");

printf("----------------------\n");

printf("HP %d \n", hp);

printf("Grana %d \n", grana);

printf("Escolha uma acao: ");

scanf("%d",&escolha);

cls();

switch(escolha)

{

case 1 : shoppo();

break;

case 6 : status();

break;

case 7 : exit(0);

}

}

}

//fim menu

//programa principal

void main()

{

puts("Bem vindo ao RPG tosco do Ueta\n");

puts("Agora voce vai entrar com os atributos do seu personagem ");

puts("mas antes irei explicar o que e cada um deles. \n");

puts("ATAQUE: Quanto maior mais chance de acertar o inimigo voce tera \n");

puts("DANO: Quanto maior mais dano o inimigo recebera. \n");

puts("ARMADURA: Quanto maior menos dano voce leva quando um inimigo te acertar. \n");

puts("AGILIDADE: Quanto maior mais chance o inimigo terá de errar o ataque. \n");

puts("HP: Quanto maior mais dano voce ira aguentar dos seus inimigos. \n");

inicio();

menu();

}

//fim pp

Na função shoppo que é o shop de poções, eu declarei duas variaveis uma para escolha e outra para mostrar

o dinheiro atual que o jogador tem. O primeiro erro está aí: o dinheiro não mostra certo.

Quando o jogador escolhe uma das pocoes, cai la no case que chama uma determinada funcao de acordo com

o que o jogador escolheu. São elas: aataque(),aarmadura(),aagilidade(),adano(),ahp(). Eu fiz um IF para

verificar se o jogador tiver menos de 100 de grana retorna uma mensagem dizendo que ele não tem dinheiro.

O problema é que SEMPRE esta caindo nesse IF.

Estava utilizando variáveis globais e tava dando o mesmo erro.

alguém me da uma mão e possíveis sugestões para otimização do código.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Tenho uma sugestão para lhe fazer: Orientação à objetos!

Isso vai otimizar seu código que está mutio grande e complicado.

Posso te ajudar a modelar e até programar seu jogo. Vamos começar com a classe personagem (character):

Quais serão os atributos?

Quais serão os métodos (ações que o personagem pode ter)?

Obs.: Se você está usando o windows porque você não usa system("cls") para limpar a tela?

Editado por Felipe Pedroso
Link para o comentário
Compartilhar em outros sites

  • 0

Um personagem tera 5 atributos basicos: Ataque,Dano,Defesa,Agilidade e HP.

Esses atributos serão numeros de 1 a 20 definidos pelo jogador (tem gente que gosta de começar forte...).

o Ataque define a chance que voce tera de acertar o inimigo (isso sera implementado em um formula mais tarde baseado na agilidade do inimigo).

o Dano é quantidade de dano que o personagem infringe caso o ataque seja bem sucedido. O dano é deduzido da armadura do persongaem.

A Defesa é a quantidade de dano que o personagem consegue absorver de um ataque bem sucedido de um inimigo (o dano NUNCA é menor que 1)

A Agilidade define a chance de voce evitar que o inimigo te acerte.

HP do ingles Hit Points é a sua vida. Se HP = 0 se está morto.

Quando o usuario preenche esse dados ele cai em um menu de ações. Aí ele escolhe o que ele quer fazer.

Eu comecei a implementar o shop de poções depois passaria pro resto.

Como eu sou ruim em programação eu estava tentando fazer do meu jeito mas não está dando.

Passar para OO não seria ma idéia só que eu to meio por fora.

Se voce rodar o jogo vai ver como é mais ou menos o esquema.

Por enquanto só coisas simples nada de complicações.

Meu MSN para contato: miklotovx@hotmail.com

Link para o comentário
Compartilhar em outros sites

  • 0

Eu irei ajudar a montar o programa... Com OO você poderá fazer batalhas entre seus amigos e não só ir para floresta arranjar treta

Modelando uma classe básica de personagem:

class Character{
     private:
          int HP;
          int atkSkill; //Pontos de ataque
          int defSkill; //Pontos de defesa
          int agiSkill; //Pontos de agilidade
          int money; //Grana do personagem
     public:
          int attack(); //Método que retorna quanto o personagem produziu de ataque
          void defense(int atk, int agi);      // Metodo de defesa/absorção de dano. Utiliza os ptos de def e agilidade do oponente para calcular se houve defesa ou absorção de dano
}

void Character::defense(int atk, int agi){
<ESCREVER FUNÇÃO DE DEFESA>
};

int Character::attack(){
<ESCREVER FUNÇÃO DE ATAQUE SEM ESQUECER QUE TEM QUE RETORNAR UM ATAQUE>
};

É uma classe simples, com ataque e defesa... Temos também a grana e tals... Faltam implementar as funções... Me passa como você quer e eu converto para OO... O que mais um personagem pode fazer? (atenção personagem e não usuário)

MSN: f_pedroso677@hotmail.com

Editado por Felipe Pedroso
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...