elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5
21  Programación / Programación C/C++ / Re: doble duda (arreglo dinamico y funciones entre clases) en: 5 Abril 2014, 22:11 pm
cierto jeje... bueno la duda principal era esa... si podia hacerlo de una manera simple como en el codigo qu epuse arriba pero veo que estaba haciendo otra cosa distinta... son una luz en la oscuridad :D solo me falta investigar sobre eso de los metodos de clases
22  Programación / Programación C/C++ / Re: doble duda (arreglo dinamico y funciones entre clases) en: 5 Abril 2014, 21:24 pm
gracias por responder ^^ en realidad lo que quiero es no darle un tamaño definido sino que mi arreglo crezca  al ritmo en que yo lo vaya necesitando... y la vdd no se si eso se pueda hacer a base de puros new -asi como en mi codigo- o a fuerzas necesite usar los realloc (que aqui entre nos me han funcionado de maravilla)
23  Programación / Programación C/C++ / doble duda (arreglo dinamico y funciones entre clases) en: 5 Abril 2014, 20:12 pm
buen dia... le he estado dando vueltas a este codiguito pero no le veo el error... el caso es que se me cicla la ejecucion y no me responde... codigo:

Código:
include<iostream>
using namespace std;

void main(){
int *a,*b;

a=new int;
b=new int;

for(int i=0; i<=50; i++)
{*a=i;
*b=i;
cout<<*a<<" "<<*b<<" "<<&a<<" "<<&b<<endl;
cout<<endl;

a++;b++;}

system("pause");
}


el programa funciona correctamente si el for es hasta 4 o 5 elementos... pero si son mas de diez se corta la ejecucion y me dice que desencadene un punto de interrupcion.. he probado mi codigo en visual c++ 2010 y en borland c++... en ambos sucede lo mismo, probe tmb modificandolo asi:

Código:
void main(){
int *a,*b;

a=new int;
b=new int;

for(int i=0; i<=50; i++)
{*(a+i)=i;
*(b+i)=i;
cout<<*(a+i)<<" "<<*(b+i)<<endl;
cout<<endl;

}

system("pause");}


pero es igual... en ultima instancia me vere obligado a usar la directiva <list> o bien hacerlo con listas enlazadas mediante punteros dentro de una estructura... pero he visto en varios lugares de internet que esta forma tambien es valida, y sin embargo no logro que funcione con mas de diez elementos.... estoy haciendo algo mal?



y ahora el pilon jeje. Alguien sabe si es posible que, teniendo dos clases distintas, el valor de retorno del metodo de la segunda se use como parametro en el metodo de la primera? por ejemplo algo asi:

Código:
class uno{
void recibo(int a);
};

class dos{
void paso(int a);
};

int dos::paso(int a){
return a;
}


void uno::recibo(int a){    //esta es la parte que no se como implementar
cout<<dos::paso(a);
}


me podrian ayudar??


24  Programación / Programación C/C++ / Re: consejos con optimizacion de codigo snake en: 28 Marzo 2014, 18:41 pm
gracias por responder chicos ^^
amchacon: las librerias son estandarizadas, la conio1 la descargue para el dev y la windows si esta ahi pero me refeia mas bien a que lo puedo correr en cualquier compu que no tenga instalado borland :p

en cuanto al codigo del compañero eferion. muchas gracias ^^ tratare de estudiar el tuyo y acomodar el propio. si tuvieran alguna otra sugerencia estaria agradecido :D
25  Programación / Programación C/C++ / consejos con optimizacion de codigo snake en: 27 Marzo 2014, 20:57 pm
que tal amigos.... al grano:
hace poco terminé un juego snake en consola en borland c++. hice una biblioteca conio independiente del entorno (mi programa corre donde quiera). y el juego no tiene errores -que yo haya descubierto-.... el caso es que este juego es una prueba para cierto empleo y antes de enviar mi codigo y el ejecutable quise que un amigo me dijera sus opiniones...
en resumen el me dijo que la logica estaba bien, que el juego corre perfecto pero... en cuestion de optimizacion y posicion del codigo estaba horrible. coloco el codigo:

Código:
# include<iostream.h>
# include<conio1.h>
# include<windows.h>
#include<stdio.h>
#include<time.h>

#define ARRIBA 72
#define ABAJO 80
#define DERECHA 77
#define IZQUIERDA 75


void nocursor()                                     //FUNCTION TO DISSAPEARS THE CURSOR OF THE WINDOW
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cci;
cci.dwSize=20;
cci.bVisible=FALSE;
SetConsoleCursorInfo(hStdout,&cci); }
void sicursor()                                     //FUNCTION TO APEARS THE CURSOR OF THE WINDOW
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cci;
cci.dwSize=20;
cci.bVisible=TRUE;
SetConsoleCursorInfo(hStdout,&cci); }


class vibora{
char comptecla,tecla,comida,*head;
int x,y,cx,cy,*hx,*hy,tamano;
public:
int timer,timer1,vel;
bool perder;
vibora(int _x,int _y): x(_x),y(_y){}
void inicializar();
void mover();
void borrar();
void pintar();
void generarcomida();
void comer();
};

void vibora::inicializar()
{tamano=3;
perder=false;
comida='©';
tecla=IZQUIERDA;
comptecla=IZQUIERDA;
timer1=clock()/100;

head=(char *) malloc(tamano *sizeof(int));
head[0]='@';
for (int i = 1; i <= tamano-1; i++)
head[i]='o';

hx=(int *) malloc(tamano *sizeof(int));
hy=(int *)malloc(tamano *sizeof(int));
for(int i=0; i<=tamano-1; i++)
{hx[i]=x+i; hy[i]=y;}

borrar();
pintar();
generarcomida();
}

void vibora::pintar()
{
for (int i = 0; i <= tamano-1; i++)
{gotoxy(hx[i],hy[i]); cout<<head[i];}
}

void vibora::generarcomida()
{int i=0;
cx=2+rand()%37;
cy=2+rand()%9;

do{
   if(cx==hx[i]&&cy==hy[i])
{cx=2+rand()%39;
cy=2+rand()%9;
i=0;}
   else
i++;
}while(i<=tamano-1);

gotoxy(cx,cy); cout<<comida;
}

void vibora::comer()
{
if(hx[0]==cx&&hy[0]==cy)
  {tamano++;
  hx=(int *)realloc(hx, tamano *sizeof(int));
  hy=(int *)realloc(hy, tamano *sizeof(int));
  head=(char *)realloc(head, tamano *sizeof(int));
  head[tamano-1]='o';
  generarcomida();}
}

void vibora::mover()
{
timer=clock()/100;
if(kbhit()) tecla=getch();   //registra pulsacion
if(tecla!=ARRIBA&&tecla!=ABAJO&&tecla!=DERECHA&&tecla!=IZQUIERDA) tecla=comptecla; //si la tecla pulsada es diferente de la de direccion, copia el ultimo movimiento
if((hx[1]==x-1&&tecla==IZQUIERDA )||(hx[1]==x+1&&tecla==DERECHA)||(hy[1]==y-1&&tecla==ARRIBA)||(hy[1]==y+1&&tecla==ABAJO))tecla=comptecla;  //si quiero ir para el lado contrario al que voy, no lo dejo, sino que copio el ultimo movimiento

if((tecla==IZQUIERDA&&comptecla!=DERECHA)||(tecla==DERECHA&&comptecla!=IZQUIERDA)||(tecla==ARRIBA&&comptecla!=ABAJO)||(tecla==ABAJO&&comptecla!=ARRIBA))comptecla=tecla;  //si pulso tecla de direccion y no es contraria, copio a comptecla


if(timer1==timer)
{
if(tecla==IZQUIERDA)
x--;
if(tecla==DERECHA)
x++;
if(tecla==ARRIBA)
y--;
if(tecla==ABAJO)
y++;







if(x==1||x==40||y==1||y==12)     //si choca en la orilla pierde...
for (int i = 0; i <= 2; i++)
  {borrar();
  Sleep(500);
  pintar();
  Sleep(500);
  perder=true;}
else                             //...pero si no choca en la orilla...
{
for (int i = 1; i <= tamano-1; i++)    //...reviso eslabon por eslabon...
if(x==hx[i]&&y==hy[i])    //...y si las coordenadas estan en un eslabon
for (int i1 = 0; i1 <= 2; i1++)
{borrar();
Sleep(500);                //...pierdo...
pintar();
Sleep(500);
perder=true;}
else                         //...pero si no estan en el eslabon...
   if(i==tamano-1&&perder==false)            //...compruebo si ya reviso todos y si ya lo hizo...
   {borrar();
for(int i=tamano-1; i>=1; i--)
{hx[i]=hx[i-1];
hy[i]=hy[i-1];}                     //... se mueve
hx[0]=x;
hy[0]=y;
pintar();
timer1=timer+vel;}
}

}

}

void vibora::borrar()
{
for (int i = 0; i <= tamano-1; i++)
{gotoxy(hx[i],hy[i]); cout<<" ";}
}


void main()
{
randomize();
bool nuevamente=true;
char resp;
for (int i = 1; i <= 40; i++)  //limite superior
{gotoxy(i,1); cout<<"*";}
for (int i = 2; i <= 12; i++)  //limite izquierdo
{gotoxy(1,i);cout<<"*";}
for (int i = 2; i <= 40; i++)  //limite inferior
{gotoxy(i,12); cout<<"*";}
for (int i = 2; i <= 12; i++)  //limite derecho
{gotoxy(40,i);cout<<"*";}





do{                    //do que sirve solo para comenzar y recomenzar el juego despues de perder

 
//este do sirve para elegir nivel de cada partida
  do{ gotoxy(1,13); cout<<"Bienvenido a Snake. Selecciona un nivel para comenzar a jugar (1-5): ";
  sicursor();
  cin>>resp;
  if(resp!='1'&&resp!='2'&&resp!='3'&&resp!='4'&&resp!='5')
{cout<<"Opcion no permitida...Debes seleccionar una opcion del 1 al 5."; Sleep(2000);
gotoxy(1,13);cout<<"                                                                                                                                                     ";
}
  else
{nocursor();
cout<<"Elegiste el nivel "<<resp; Sleep(1000);
gotoxy(1,13);cout<<"                                                                                                                                                     ";
gotoxy(11,13);cout<<"EL JUEGO COMIENZA EN";
gotoxy(20,14); cout<<"3"; Sleep(1000);
gotoxy(20,14); cout<<"2"; Sleep(1000);
gotoxy(20,14); cout<<"1"; Sleep(1000);
gotoxy(19,14); cout<<"YA"; Sleep(1000);
gotoxy(1,13);cout<<"                                                                                                                                                     ";
}         
  }while(resp!='1'&&resp!='2'&&resp!='3'&&resp!='4'&&resp!='5');


  vibora n(20,6);
  n.inicializar();
  switch (resp)
{case '1': n.vel=9; break;
case '2': n.vel=7; break;
case '3': n.vel=5; break;             //switch para la velocidad elegida
case '4': n.vel=3; break;
case '5': n.vel=1; break;}



 
  do{                                //bucle del juego en proceso
n.mover();
n.comer();
}while(n.perder==false);




  gotoxy(15,13);cout<<"HAS PERDIDO"; Sleep(1500);
  gotoxy(1,15); cout<<"Si quieres jugar de nuevo presiona 's', de lo contrario, presiona cualquier otra tecla: ";
  sicursor();
  cin>>resp;
  if(resp=='s'||resp=='S')
{
nocursor();
nuevamente=true;
gotoxy(15,13); cout<<"               ";
gotoxy(1,15); cout<<"                                                                                           ";
for(int i=2; i<=39; i++)
   for(int j=2; j<=11; j++)       //for que sirve para limpiar el campo de juego al perder
   {gotoxy(i,j);cout<<" ";}
Sleep(1000);
}
  else
  nuevamente=false;
 
}while(nuevamente==true);  //do que termina cuando le respondes que ya no quieres jugar


cout<<endl<<"Has elegido salir. ";
system("pause");
}


Si se fijan tengo una clase vibora, sus metodos y la funcion main que es donde va el bucle del juego... este compañero y amigo me dijo que los metodos de la clase definen (o deberian definir) de manera muy especifica y delimitada las propiedades y parametros del objeto, pero no colocar la mayoria del flujo del programa en esas partes... es decir. el me dijo que todos los metodos deberian ser parecidos a lo que hice con el metodo inicializar() y/o borrar(), no como en el metodo de mover(), donde se supone que solo deberia recibir instrucciones y ejecutarlas, mas no tomar  valores ni procesarlos ni nada ahi mismo...
ustedes que opinan? mi codigo es optimo de la forma que está? o podria sacar muchas partes de codigo de los metodos y colocarlo en main o en alguna funcion para que los metodos solo ejecuten instrucciones y parametros recibidos de dichas funciones??
NOTA: Aclaro que este codigo es 100% mio y que en realidad la critica no fue hacia este codigo sino hacia uno mucho mas largo y engorroso (un tetris) en el que el metodo llamado eliminacion tenia aprox el 70% del codigo total del programa... pero como ese codigo no tiene sangrias ni comentarios ni nada (lo hice hace como 4 meses y ni quiero meterme al codigo del metodo eliminacion porque es un reborujo que ni yo entiendo...por culpa de no ponerle los comentarios), puse mejor el del snake, que ilustra un poco mas ordenada la logica que use para el tetris, ya que es igual en casi todo el flujo del codigo... me podrian decir si debo modificarlo o asi esta bien?
26  Programación / Programación C/C++ / Re: "bloquear" teclas en: 21 Marzo 2014, 02:42 am
rulovive XD si, fallas en muchas cosas XD

el mayor es el 9, el menor siempre es 0, XD 0<9 siempre, los numeros vienen primero que las letras mayusculas, luego las minúsculas... los numeros empiezan en el carácter 48 (0x30), las mayusculas en 64+1 (0x40+1) (lo digo así porque es la mejor manera de recordarlo)  y las minúsculas en 96+1 (0x60+1)

por otr lado el lo que quieres es que en consola no se escriba cuando la tecla no sea valida, justamente la intencion es no revisar caracter por caracter

aunque no se si es buena practica... con <conio.h> puedes, con la funcion getch();


un ejemplo

Código
  1. #include <iostream>
  2. #include <conio.h>
  3. #define UP_ARROW 224
  4. using namespace std;
  5.  
  6. int main() {
  7.     int cInput = getch();
  8.     if(cInput==UP_ARROW){cout << "fin" << endl;}
  9.     cin.get();
  10. return 0;
  11. }
  12.  

jajaja cierto.... lo habia hecho en modo visual hace muchos años pero no recordaba el orden exacto.. gracias :D
27  Programación / Programación C/C++ / Re: "bloquear" teclas en: 21 Marzo 2014, 02:21 am
sip.. con un if que solo permita leer carateres del 0 al 9... esto se hace con el codigo ascii.. cada tecla tiene un valor numerico empezando por la primera letra del abecedario en minusculas, hasta la ultima letra del abecedario en mayuscula... despues de eso siguen los numeros y ellos tienen un caracter ascii (no recuerdo si el orden de caracteres de teclado es asi o van primero los numeros) solo pon en la condicion que si el caracter pulsado es menor al que corresponde al 1 y mayor al que corresponde al 0 -el cual es el ultimo de los diez- la tecla sea nula... si estoy equivocado corrijanme XD
28  Programación / Programación C/C++ / instalando freeglut en c++ en: 21 Marzo 2014, 02:17 am
buenas friends ando aca nuevamente (siempre digo nuevamente XD) en esta ocasion es para preguntar a ver si alguien podria orientarme sobre el proceso.... quiero instalar freeglut en mi borland c++ o bien en dev c++ en el peor de los casos... tengo que hacerlo de la misma forma que el glut normal??? otra cosilla, vi en otro foro que una persona lo tenia instalado en su dev-c y al correr un proyecto con freeglut tuvo errores de linker y alguien le dijo que probara a crear el proyecto en c y no en c++... glut... funciona en c++... verdad? :-[ es un proyecto visual o de consola?
29  Programación / Programación C/C++ / Re: Una duda bastante idiota sobre c++ y .net en: 13 Febrero 2014, 00:41 am
perfecto entonces al hablar en c# estamos hablando en .net y aparte de eso el .net seria parecido a lo que seria las applets y servlets en java (o algo asi ya que no he querido meterme en java sin antes aprender a manejar al 100 los punteros jejej)
gracias a ambos ^^
30  Programación / Programación C/C++ / Una duda bastante idiota sobre c++ y .net en: 12 Febrero 2014, 20:43 pm
Bueno ehhh... me da un poco de pena preguntar esto pero este foro siempre me ha sido de ayuda desde aquellos ayeres en los que me interesaba mas el hacking y la seguridad informatica... hoy por hoy ya tengo mi experiencia en c++ pero a la hora de buscar trabajo todos piden saber .net...
la duda es la siguiente: basta con pasar a usar el entorno de microsoft visual studio en lugar del de borland c++ para que mis aplicaciones ya sean en c++ .net?? o tengo que aprender otras cosas? la vdd no encuentro respuesta clara en la red pero todo me da a entender que solo tengo que cambiar el entorno que uso
Páginas: 1 2 [3] 4 5
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines