Guest Ueta Postado Março 13, 2007 Denunciar Share Postado Março 13, 2007 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 basicosint op1; //opcao pra ver se atributos estao corretosint escolha; //escolha das acoes do menuint escolha_shop1; //escolha do menu do shop de poçãoint escolha_shop2; //escolha do shop de armasvoid aataque(),aarmadura(),aagilidade(),adano(),ahp(); //são as funções do shop que aumentam o atributo se a pocao for compradaint shoppo();grana = 500; //dinheiro inicial//Limpar a p**** da telavoid 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 personagemvoid 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 novoatributos(){ 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 armasarmas(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çõesshoppo(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 ataquevoid 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 danovoid 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 armaduravoid 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 agilidadevoid 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 HPvoid 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 jogadorstatus() { 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 jogomenu(){ 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 principalvoid 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 ppNa função shoppo que é o shop de poções, eu declarei duas variaveis uma para escolha e outra para mostraro 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 como que o jogador escolheu. São elas: aataque(),aarmadura(),aagilidade(),adano(),ahp(). Eu fiz um IF paraverificar 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Felipe Pedroso Postado Março 13, 2007 Denunciar Share Postado Março 13, 2007 (editado) 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 Março 13, 2007 por Felipe Pedroso Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Ueta Postado Março 13, 2007 Denunciar Share Postado Março 13, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Felipe Pedroso Postado Março 13, 2007 Denunciar Share Postado Março 13, 2007 (editado) Eu irei ajudar a montar o programa... Com OO você poderá fazer batalhas entre seus amigos e não só ir para floresta arranjar tretaModelando 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 Março 13, 2007 por Felipe Pedroso Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest Ueta
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
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.