Foros del Web » Programación para mayores de 30 ;) » C/C++ »

ayuda error programacion: no obedece el codigo [SOLUCIONADO]

Estas en el tema de ayuda error programacion: no obedece el codigo [SOLUCIONADO] en el foro de C/C++ en Foros del Web. Hola, estoy haciendo un programa que consiste basicamente en un combate. Lo he terminado ya y despues de corregir todos los errores de sintaxis que ...
  #1 (permalink)  
Antiguo 13/07/2010, 10:54
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 8 meses
Puntos: 4
ayuda error programacion: no obedece el codigo [SOLUCIONADO]

Hola, estoy haciendo un programa que consiste basicamente en un combate. Lo he terminado ya y despues de corregir todos los errores de sintaxis que daba al compilar, lo he ejecutado y no hace lo que yo quiero es decir es como si no obedeciera el codigo .

lenguaje: C++
S.O: UBUNTU 10.04
IDE: NETBEANS
decir que soy totalmente novato. acabo de empezar hace unos dias.

los errores los explico en el siguiente mensaje junto con lo que me devuelve el programa. (no me cabe en uno solo)

OBJETOS:
Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3. #include <cstdlib>
  4. #include <stdlib.h>
  5.  
  6. class elfo {
  7.  
  8. public:
  9.     string nombre;
  10.     int vida;
  11.     int ataque;
  12.     int defensa;
  13.     int dec;       // variable decision del arma
  14.     elfo();
  15.     ~elfo();
  16.  
  17.     int atacar();
  18.     int defender();
  19.     int abandonar();
  20.     int muerto();
  21.    
  22.  
  23.     friend class espada;
  24.     friend class mandoble;
  25.    
  26. };
  27.  
  28. class espada {
  29.  
  30. public:
  31.     espada();
  32.     ~espada();
  33.     int dano; //bonificacion daño
  34.     int def;
  35.     friend class elfo;
  36. };
  37.  
  38. class mandoble{
  39. public:
  40.     mandoble();
  41.     ~mandoble();
  42.     int danoo;     //bonificaciones de daño y (abajo) defensa.
  43.     int deff;
  44.     friend class elfo;
  45. };
  46.  
  47. class trasgo1 {
  48. public:
  49.     int vida_t;
  50.     int ataque_t;
  51.     int defensa_t;
  52.  
  53.     trasgo1();
  54.     ~trasgo1();
  55.  
  56.     int atacar_t();
  57.     int defender_t();
  58.     int muerto_t();
  59.  
  60. };


Código C++:
Ver original
  1. // ######################################################################################
  2. elfo::elfo(){
  3.     espada esp;        
  4.     mandoble man;
  5.     vida = 25;
  6.     defensa = 2;
  7.     ataque = 5;
  8.     dec = 0;
  9.     cout << "creando Elfo...  ¿¿como lo quieres llamar?? ";
  10.     cin >> nombre;
  11.     cout << endl;
  12.     cout << nombre << " tiene las siguientes estadisticas: " << endl;
  13.     cout << endl;
  14.     cout << "vida: " << vida << endl;
  15.     cout << "ataque: " << ataque << endl;
  16.     cout << "defensa: " << defensa << endl;
  17.     cout << endl;
  18.     cout << "ahora escoge un arma. Armas disponibles: " << endl;
  19.     cout << endl;
  20.     cout << "1.- ESPADA Y ESCUDO.  +1 def +1 atq" << endl;
  21.     cout << "2.- MANDOBLE.  -1 def +3 atq" << endl;
  22.     cout << endl;
  23.  
  24.     for (;;){
  25.         cout << "==> ";
  26.  
  27.         cin >> dec;               // aqui se elige el arma
  28.         if (dec = 1){
  29.             cout << "las armas seleccionadas son: espada y escudo." << endl;
  30.             cout << "actualizando estadisticas..." << endl;
  31.             ataque = ataque + esp.dano;
  32.             defensa = defensa + esp.def;
  33.             cout << endl;
  34.             cout << "vida: " << vida << endl;
  35.             cout << "ataque: " << ataque << endl;
  36.             cout << "defensa: " << defensa << endl;
  37.             break;
  38.  
  39.         }
  40.  
  41.         if (dec = 2){
  42.             cout << "el arma seleccionada es: mandoble." << endl;
  43.             cout << "actualizando estadisticas..." << endl;
  44.             ataque = ataque + man.danoo;
  45.             defensa = defensa + man.deff;
  46.             cout << endl;
  47.             cout << "vida: " << vida << endl;
  48.             cout << "ataque: " << ataque << endl;
  49.             cout << "defensa: " << defensa << endl;
  50.             break;
  51.         }
  52.  
  53.         else{
  54.             cout << "ERROR!" << endl;
  55.         }
  56.     }
  57.  
  58.     cout << "se ha terminado de crear el personaje." << endl;
  59.     cout << endl;
  60.  
  61. }
  62.  
  63. elfo::~elfo(){
  64.     cout << "(elfo destruido.)";
  65. }
  66.  
  67.  
  68. int elfo::atacar(){
  69.    
  70.     cout << "aaaarrrrggg..." << endl;
  71.    
  72. }
  73.  
  74. int elfo::atacar_t2(){
  75.    
  76.     cout << "aaaarrrrggg..." << endl;
  77. }
  78.  
  79. int elfo::defender(){
  80.     cout << nombre << " se puso en posicion defensiva..." << endl;
  81. }
  82.  
  83. int elfo::abandonar(){
  84.     cout << nombre << " es un cagao y ha abandonado." << endl;
  85.     cout << "la partida ha terminado." << endl;
  86. }
  87.  
  88. int elfo::muerto(){
  89.     cout << nombre << " ha muerto. La partida ha terminado." << endl;
  90. }
  91.  
  92. // ESPADA Y ESCUDO #################################################################
  93.  
  94. espada::espada(){
  95.     cout << "(espada creada.)" << endl;
  96.     dano = 1;
  97.     def = 1;
  98.  
  99. }
  100.  
  101. espada::~espada(){
  102.     cout << "(espada destruida.)" << endl;
  103. }
  104.  
  105. // MANDOBLE ###############################################################
  106.  
  107. mandoble::mandoble(){
  108.     cout << "(mandoble creado.)." << endl;
  109.     danoo = 4;           // arriba he puesto que daba +3 pero da igual
  110.     deff = -2;
  111. }
  112.  
  113. mandoble::~mandoble(){
  114.     cout << "(mandoble destruido)." << endl;
  115. }
  116.  
  117. // CREAR TRASGO 1 #########################################################
  118.  
  119.  
  120.  
  121. trasgo1::trasgo1(){
  122.  
  123.     vida_t = 15;
  124.     ataque_t = 4;
  125.     defensa_t = 2;
  126.     cout << "trasgo apareció. El combate va a empezar..." << endl;
  127.     cout << endl;
  128. }
  129.  
  130. trasgo1::~trasgo1(){
  131.     cout << "(trasgo1 destruido.)";
  132.     cout << endl;
  133. }
  134.  
  135. int trasgo1::atacar_t(){
  136.    
  137.     cout << "AAAAAAAARRRRRGGGGG.........";
  138. }
  139.  
  140. int trasgo1::defender_t(){
  141.     cout << "la defensa y la vida del trasgo aumentó." << endl;
  142.     vida_t = vida_t + 1;
  143.     defensa_t = defensa_t + 1;
  144. }
  145.  
  146. int trasgo1::muerto_t(){
  147.     cout << "el trasgo ha muerto.";
  148. }


PRINCIPAL:
Código C++:
Ver original
  1. int main(){
  2.    
  3.     elfo f;
  4.     trasgo1 tr1;
  5.     espada es;
  6.     mandoble man;
  7.  
  8.     cout << "Comandos: " << endl;
  9.     cout << "atacar" << endl;
  10.     cout << "defender" << endl;
  11.     cout << "abandonar" << endl;
  12.     cout << endl;
  13.  
  14.     for (;;){
  15.  
  16.         cout << "el valor der dec es: " << f.dec << endl;       // para hacer el seguimiento del valor de dec (decision)
  17.  
  18.         cout << "tu turno: ";
  19.         string opc1;
  20.         cin >> opc1;
  21.  
  22.         if (opc1 == "atacar"){
  23.             f.atacar();
  24.             switch(f.dec){            //originalmente estaba con un if (igual que abajo), pero
  25.                 case 1 : {              // lo cambie para probar. (da el mismo error)
  26.                     tr1.vida_t = tr1.vida_t - f.ataque + tr1.defensa_t - es.dano;
  27.                     cout << f.nombre << " hizo " << f.ataque - tr1.defensa_t - es.dano << " puntos de daño con la espada." << endl;
  28.                     cout << endl;
  29.                 }
  30.                 case 2 : {
  31.                     tr1.vida_t = tr1.vida_t - f.ataque + tr1.defensa_t - man.danoo;
  32.                     cout << f.nombre << " hizo " << f.ataque - tr1.defensa_t - man.danoo << " puntos de daño con el mandoble." << endl;
  33.                     cout << endl;
  34.                 }
  35.             }
  36.  
  37.         }
  38.  
  39.         if (tr1.vida_t <= 0){
  40.             tr1.muerto_t();
  41.             break;
  42.         }
  43.         cout << endl;
  44.         cout << "el valor der dec es: " << f.dec << endl;
  45.         cout << endl;
  46.  
  47.         if (opc1 == "defender"){
  48.             f.defender();
  49.             if (f.dec = 1){
  50.             cout << "la defensa y la vida de " << f.nombre << "aumentó." << endl;
  51.             f.vida = f.vida + 1;
  52.             f.defensa = f.defensa + 2 + es.def;
  53.             cout << "vida: " << f.vida << "   defensa: " << f.defensa << endl;
  54.             }
  55.             if (f.dec = 2){
  56.             cout << "la defensa y la vida de " << f.nombre << "aumentó." << endl;
  57.             f.vida = f.vida + 1;
  58.             f.defensa = f.defensa + 2 + man.deff;
  59.             cout << "vida: " << f.vida << "   defensa: " << f.defensa << endl;
  60.             }
  61.         }
  62.  
  63.         if (opc1 == "abandonar"){
  64.             f.abandonar();
  65.             return 0;
  66.         }
  67.  
  68.         //reseteo de estadisticas del trasgo.     //al final del turno reseteo las estadisticas
  69.        
  70.         tr1.ataque_t = 4;
  71.         tr1.defensa_t = 2;
  72.  
  73.  
  74.         cout << endl;
  75.         cout << "turno del trasgo..." << endl;
  76.  
  77.         cout << endl;
  78.         cout << "el valor der dec es: " << f.dec << endl;
  79.         cout << endl;
  80.  
  81.         // GENERADOR DE NUMERO ALEATORIO PARA LAS DECISIONES DE LOS TRASGOS########
  82.         int opc2 = 1 + rand() % 2;
  83.  
  84.         if (opc2 = 1){
  85.             tr1.atacar_t();
  86.             if (f.dec = 1){
  87.             f.vida = f.vida - tr1.ataque_t + f.defensa + es.def;
  88.             cout << "el trasgo hizo " << tr1.ataque_t - f.defensa + es.def << "puntos de daño.";
  89.             cout << endl;
  90.             }
  91.             if (f.dec = 2){
  92.             f.vida = f.vida - tr1.ataque_t + f.defensa + man.deff;
  93.             cout << "el trasgo hizo " << tr1.ataque_t - f.defensa + man.deff << "puntos de daño.";
  94.             cout << endl;
  95.             }
  96.         }
  97.  
  98.         if (f.vida <= 0){
  99.             f.muerto();
  100.             return 0;
  101.         }
  102.  
  103.         if (opc2 = 2){
  104.             tr1.defender_t();
  105.  
  106.         }
  107.  
  108.         // reseteo de estadisticas del elfo.  depende que arma lleve se resetean unas u otras
  109.         if (f.dec = 1){
  110.             f.defensa = 2 + es.def;
  111.             f.ataque = 5 + es.dano;
  112.         }
  113.         if (f.dec = 2){
  114.             f.defensa = 2 + man.deff;
  115.             f.ataque = 5 + man.danoo;
  116.         }
  117.         cout << "FIN TURNO." << endl;
  118.         cout << endl;
  119.         cout << "el valor der dec es: " << f.dec << endl;
  120.         cout << endl;
  121.  
  122.     } //FIN 1º BUCLE FOR
  123.    
  124. }

Última edición por Munire; 14/07/2010 a las 07:04
  #2 (permalink)  
Antiguo 13/07/2010, 10:55
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: ayuda error programacion

el problema es que no me obedece la decision del arma, es como si se la saltara. como podeis comprobar tanto el elfo como el trasgo atacan dos veces, cosa que no deberia pasar.

se puede ver claramente con el seguimiento de "dec", que como ya he dicho antes es el valor de la decision del arma, cambia de 1 a 2, por que ???

otro error es que elijo el mandoble ( 2 ) y me pone que he elegido la espada... ¿¿??

Código:
(espada creada.)
(mandoble creado.).
creando Elfo...  ¿¿como lo quieres llamar?? yokese            

yokese tiene las siguientes estadisticas: 

vida: 25
ataque: 5
defensa: 2

ahora escoge un arma. Armas disponibles: 

1.- ESPADA Y ESCUDO.  +1 def +1 atq
2.- MANDOBLE.  -1 def +3 atq

==> 2
las armas seleccionadas son: espada y escudo.
actualizando estadisticas...

vida: 25
ataque: 6
defensa: 3
se ha terminado de crear el personaje.

(mandoble destruido).
(espada destruida.)
trasgo apareció. El combate va a empezar...

(espada creada.)
(mandoble creado.).
Comandos: 
atacar
defender
abandonar

el valor der dec es: 1
tu turno: atacar
aaaarrrrggg...
yokese hizo 3 puntos de daño con la espada.

yokese hizo 0 puntos de daño con el mandoble.


el valor der dec es: 1


turno del trasgo...

el valor der dec es: 1

AAAAAAAARRRRRGGGGG.........el trasgo hizo 2puntos de daño.
el trasgo hizo -1puntos de daño.
la defensa y la vida del trasgo aumentó.
FIN TURNO.

el valor der dec es: 2

el valor der dec es: 2
tu turno: defender

el valor der dec es: 2

yokese se puso en posicion defensiva...
la defensa y la vida de yokeseaumentó.
vida: 23   defensa: 3
la defensa y la vida de yokeseaumentó.
vida: 24   defensa: 3

turno del trasgo...

el valor der dec es: 2

AAAAAAAARRRRRGGGGG.........el trasgo hizo 2puntos de daño.
el trasgo hizo -1puntos de daño.
la defensa y la vida del trasgo aumentó.
FIN TURNO.

el valor der dec es: 2

el valor der dec es: 2
tu turno: atacar
aaaarrrrggg...
yokese hizo 2 puntos de daño con el mandoble.

el trasgo ha muerto.

Código:
tu turno: abandonar

el valor der dec es: 1

yokese es un cagao y ha abandonado.
la partida ha terminado.
(mandoble destruido).
(espada destruida.)
(trasgo1 destruido.)
(elfo destruido.)

he puesto anotaciones para facilitaros la lectura del codigo. aver si me podeis ayudar a localizar el problema.

saludos y gracias

Última edición por Munire; 13/07/2010 a las 11:03
  #3 (permalink)  
Antiguo 14/07/2010, 05:19
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 1 mes
Puntos: 22
Respuesta: ayuda error programacion: no obedece el codigo

El código como lo posteaste no compila, ya que:

Código:
int elfo::atacar_t2(){

    cout << "aaaarrrrggg..." << endl;
}
no está declarada en la clase elfo (tal vez la usaste de prueba pero habrá que comentarla/borrarla o declararla).

El primer punto que quiero tocar está en tus archivos de cabecera:

Código:
#include <iostream>
using namespace std;
#include <cstdlib>  // versión C++ OK pero no se necesita
#include <stdlib.h> // versión C sale sobrando
¿y el include de string?
Lo necesario es que tengas:
Código:
#include <iostream>
#include <string>
using namespace std;
Siguiente punto:
Código:
    int atacar();
    int defender();
    int abandonar();
    int muerto();
    int atacar_t();
    int defender_t();
    int muerto_t();
Lo correcto es que estos métodos retornen un entero. Ejemplo:
Código:
int elfo::defender(){
	cout << nombre << " se puso en posicion defensiva..." << endl;
	return 1;
}
Último punto y más importante:
Código:
if (dec = 1){...
}
En varios if's estás asignando y no comparando valores. Lo correcto:
Código:
if (dec == 1){...
}
Revisa el código y haz las correcciones necesarias para que funcione como esperas.

OJO: En el switch también has olvidado utilizar 'break'.

Saludos.
  #4 (permalink)  
Antiguo 14/07/2010, 06:30
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 8 meses
Puntos: 4
Respuesta: ayuda error programacion: no obedece el codigo

Cita:
El código como lo posteaste no compila, ya que:

Código:
int elfo::atacar_t2(){

    cout << "aaaarrrrggg..." << endl;
}
no está declarada en la clase elfo (tal vez la usaste de prueba pero habrá que comentarla/borrarla o declararla).
se me olvido borrarla, ya que en el original yo tenia puesto dos "trasgos" y borre el segundo para acortar el codigo para postearlo.

Cita:
El primer punto que quiero tocar está en tus archivos de cabecera:

Código:
#include <iostream>
using namespace std;
#include <cstdlib>  // versión C++ OK pero no se necesita
#include <stdlib.h> // versión C sale sobrando
¿y el include de string?
Lo necesario es que tengas:
Código:
#include <iostream>
#include <string>
using namespace std;
cstdlib si lo necesito por que es necesaria para rand()
por que es necesario include string? ami me funciona string sin poner eso...


Cita:
Siguiente punto:
Código:
    int atacar();
    int defender();
    int abandonar();
    int muerto();
    int atacar_t();
    int defender_t();
    int muerto_t();
Lo correcto es que estos métodos retornen un entero. Ejemplo:
Código:
int elfo::defender(){
	cout << nombre << " se puso en posicion defensiva..." << endl;
	return 1;
}
entonces no hace falta int... tendria que poner void?

Cita:
Último punto y más importante:
Código:
if (dec = 1){...
}
En varios if's estás asignando y no comparando valores. Lo correcto:
Código:
if (dec == 1){...
}
Revisa el código y haz las correcciones necesarias para que funcione como esperas.

OJO: En el switch también has olvidado utilizar 'break'.

Saludos.
vale ahora entiendo por que cambiaba el valor xD

muchas gracias fightmx, voy a probarlo y te cuento.

EDITO: ya lo he probado y funciona perfecto.

Última edición por Munire; 14/07/2010 a las 06:58
  #5 (permalink)  
Antiguo 14/07/2010, 08:58
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 1 mes
Puntos: 22
Respuesta: ayuda error programacion: no obedece el codigo [SOLUCIONADO]

Cita:
cstdlib si lo necesito por que es necesaria para rand()
Ups, se me pasó, tienes razón.
Cita:
por que es necesario include string? ami me funciona string sin poner eso...
Lo mejor que puedes hacer es incluir todas las librerias que estés utilizando. El que funcione para este caso sin incluir <string> depende de la implementación del compilador (supongo utilizas gcc-g++), en este caso lo que se puede deducir es que la implementación de GNU debe incluir <string> en algún lugar a partir del include <iostream>, pero eso no tiene que ser verdad para la implementación de cualquier otro compilador, por ejemplo, el mismo código no compila con MSVC++ si no haces el include de <string>.

Etiquetas: programacion, solucionado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:55.