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

 

 


Tema destacado:


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6
1  Programación / Programación C/C++ / Re: Listas enlazadas C++, struct a clases en: 6 Mayo 2015, 14:19 pm
Muy buenas, si no me equivoco a efectos prácticos una estructura hace prácticamente cualquier cosa que haga una clase, hay muy muy poquitas diferencias, por ejemplo, en struct por defecto lo que definas es "public", en las clases por defecto es"private".
A lo que voy, para pasarlo a clase apenas si tendrás que cambiar código.
Únicamente define las variables principales como "private"; y las funciones defínelas como métodos de la clase, en la sección "public".
Con eso ya haría lo mismo que ahora, aunque como buena práctica te recomendaría que añadieses los "getters" y "setters" oportunos.

Ejemplo:
Código
  1.  
  2. class dato
  3. {
  4.    private:
  5.           char nombre[80];
  6.           int nota;
  7.           dato *sig;
  8.    public:
  9.          nodo* crear_lista(nodo* lista)
  10.          {
  11.                  return (lista = NULL);
  12.           }
  13.     //..... y todos los métodos
  14. };
  15.  
  16.  

Eso en caso de que solo se te permita usar clases, si tu profesora te dejara usar un "struct" y clases además a mi personalmente me gusta este método:

Código
  1.  
  2. struct dato
  3. {
  4.           char nombre[80];
  5.           int nota;
  6.           dato *sig;
  7. }
  8.  
  9. class NombreClase
  10. {
  11.    private:
  12.           dato *ptr;
  13.    public:
  14.          nodo* crear_lista(nodo* lista)
  15.          {
  16.                  return (lista = NULL);
  17.           }
  18.     //..... y todos los métodos
  19. };
  20.  
  21.  

Espero haberte ayudado, corregidme si he errado en algo por favor.
 
2  Programación / Programación C/C++ / Re: Listas enlazadas C++, struct a clases en: 6 Mayo 2015, 14:10 pm
Muy buenas, si no me equivoco a efectos prácticos una estructura hace prácticamente cualquier cosa que haga una clase, hay muy muy poquitas diferencias, por ejemplo, en struct por defecto lo que definas es "public", en las clases por defecto es"private".
A lo que voy, para pasarlo a clase apenas si tendrás que cambiar código.
Únicamente define las variables principales como "private"; y las funciones defínelas como métodos de la clase, en la sección "public".
Con eso ya haría lo mismo que ahora, aunque como buena práctica te recomendaría que añadieses los "getters" y "setters" oportunos.

Ejemplo:
Código
  1.  
  2. class dato
  3. {
  4.    private:
  5.           char nombre[80];
  6.           int nota;
  7.           dato *sig;
  8.    public:
  9.          nodo* crear_lista(nodo* lista)
  10.          {
  11.                  return (lista = NULL);
  12.           }
  13.     //..... y todos los métodos
  14. };
  15.  
  16.  

Espero haberte ayudado, corregidme si he errado en algo por favor.
 
3  Programación / Programación C/C++ / Re: Programa de fuerza bruta: en: 12 Febrero 2015, 18:37 pm
Vale muchas gracias a todos por vuestra ayuda, creo que más o menos lo he entendido todo  ;D
Muchas gracias por la ayuda!!!!
4  Programación / Programación C/C++ / Re: Programa de fuerza bruta: en: 10 Febrero 2015, 19:54 pm
 :-X  Vale, la verdad, no se como no he podido caer  en el problema del tiempo  :silbar: .
De verdad muchas gracias por la ayuda, tanto a engel lex como a tremolero. La verdad es que la respuesta de sabeeee no es de demasiada ayuda. Agradezco las respuestas que explican el fallo, de verdad, muchas gracias. Por esas respuestas se aprende¡¡¡¡
Pero, me podéis indicar sobre que temas debo buscar y/o que conocimientos previos debo tener para que un programa que yo cree, pueda introducir datos en otro programa, por ejemplo como en este caso, que quería que el programa generara una secuencia de caracteres y lo introdujera en el sitio de  la pass.
Gracias por adelantado.
5  Programación / Programación C/C++ / Programa de fuerza bruta: en: 10 Febrero 2015, 16:54 pm
Hola a todos.
Os cuento, me gustaría desarrollar un programa que sirva para descubrir claves wifi.
Tengo en mente hacerlo por fuerza bruta. Mi duda no está en esa parte del código en sí. Quiero decir, sé como hacer que genere pass para probar todas las combinaciones posibles.
Lo que no sé, es cómo acceder desde el código para que introduzca esa pass para intentar validar y conectarse. Es decir, mi idea es, genero la posible pass con la que probar a conectarse, pero, no se el código que habría que poner para llegar a introducir esa pass.
Si me pudiérais guiar un poco sobre los conceptos que debo estudiar y demás os lo agradecería mucho.
Gracias a todos de antemano.
6  Programación / Programación C/C++ / Re: Existe esta funcion??? en: 17 Diciembre 2014, 20:52 pm
Si, esa función si hago bastante uso de ella, de hecho yo diría que es uno de los pilares, pero bueno, intentare plantearmelo de otra forma, con matrices como indicas, muchas gracias.
7  Programación / Programación C/C++ / Existe esta funcion??? en: 16 Diciembre 2014, 21:42 pm
Hola a todos;
os cuento, tengo un problema, estoy intentando desarrollar el famoso juego de la serpiente en modo consola, pero tengo un problema a la hora de borrar el rastro que deja.
Para mi duda no hace falta que ponga nada de código del que llevo, asi que me lo ahorro  :rolleyes: .

Qerría saber si existe alguna función que colocando el cursor en alguna coordenada de la consola me diga si en esa posición hay un cierto carácter. Es decir, asignarle lo que haya en esa posición a una variable para poder compararla y demás.
Si existe me podríais decir en qué biblioteca está y cómo se usa y funciona???
Muchas gracias por adelantado.
8  Programación / Programación C/C++ / Re: Pequeño juego de naves: en: 11 Diciembre 2014, 20:20 pm
Si, hice eso y sirvió perfectamente, muchas gracias!!!! ;D
He creado mi primer "juego"  :rolleyes:
Ahora toca crear uno yo de cero con lo aprendido en ese tutorial jaja  ;-)
9  Programación / Programación C/C++ / Pequeño juego de naves: en: 7 Diciembre 2014, 23:32 pm
Hola a todos. Veréis estoy programando un minijuego de naves siguiendo un pequeño tutorial, pero tengo ciertos problemillas. Les cuento:
En primer lugar es que nunca pone game_over a falso en el último if (el que comprueba si las vidas son 0) y no entiendo porque la verdad  :huh: .
Luego, es que va demasiado trabado y no dispara cuando le doy, debo dejarlo mucho rato pulsando la tecla 'a' (tecla de disparo) para que dispare alguna vez, y pasa lo mismo con el movimiento.
Por si es un dato importante, les diré que probando a poner varias veces dentro del bucle while lo de nave_1.Mover() si que se movía mejor, sin embargo, disparaba aún menos... :-( .

Les agradecería cualquier ayuda por favor. Pero no me indiquen solo lo que debo cambiar, agradecería aún más si me indican por qué está mal lo que deba cambiar y porque sí que funciona o es mejor opción lo que me recomendéis.

Muchas gracias por adelantado.

PD:Los signos y números que aparecen en mitad de los comentarios son acentos.

Código
  1.  
  2. #include <stdio.h>
  3. #include <windows.h>
  4. #include <conio.h>
  5. #include <stdlib.h>
  6. #include <list>
  7.  
  8. using namespace std;
  9.  
  10. /*Para colocar el cursor en la posición que queramos de la consola. Para ello utilizamos una clase definida
  11. en la biblioteca windows.h la HANDLE y la COORD y creamos dos objetos. También hacemos uso de de
  12. la función SetConsoleCursorPosition()*/
  13. void gotoxy(int x, int y){
  14. HANDLE hCon;    //indentificador de la consola
  15. hCon = GetStdHandle(STD_OUTPUT_HANDLE);
  16. COORD dwPos;
  17. dwPos.X = x;
  18. dwPos.Y = y;   //Las coordenadas "Y" están invertidas
  19.  
  20. SetConsoleCursorPosition(hCon, dwPos);
  21. }
  22.  
  23. /*Para evitar que el cursor esté parpadeando en pantalla. Utilizamos
  24.   una entrada semejante a la de la función gotoxy, y utilizamos la
  25.   función SetConsoleCursorInfo que sirve para mofificar las caracteristicas
  26.   del cursor (hacerlo más pequeño, grande, quitarlo,etc). Debemos crear
  27.   un objeto de la clase CONSOLE_CURSOR_INFO que debemos mandar como parametro
  28.   de la función, y modificaremos sus datos miembros que son dos: dwSize para
  29.   controlar el tamaño y bVisible para que se muestre el cursor o no. Al pasar
  30.   el objeto a la función SetConsoleCursorInfo hay qeu hacerlo usando un "&".*/
  31. void OcultarCursor(){
  32. HANDLE hCon;    //indentificador de la consola
  33. hCon = GetStdHandle(STD_OUTPUT_HANDLE);
  34. CONSOLE_CURSOR_INFO cci;
  35. cci.dwSize = 2;
  36. cci.bVisible = FALSE;
  37.  
  38. SetConsoleCursorInfo(hCon, &cci);
  39. }
  40.  
  41. /*Esta clase servirá para crear e interactuar con nuestro objeto nave.*/
  42. class Nave{
  43. private:
  44. int x, y;
  45. const char ARRIBA;
  46. const char ABAJO;
  47. const char IZQUIERDA;
  48. const char DERECHA;
  49. int corazones;
  50. int vidas;
  51. public:
  52.  
  53. /*Constructor para asignar una posición inicial*/
  54. Nave(int coordenada_x, int coordenada_Y, int _corazones, int _vidas, char sube, char baja, char giro_derecha, char giro_izquierda)
  55. :ARRIBA(sube), ABAJO(baja), IZQUIERDA(giro_izquierda), DERECHA(giro_derecha)
  56. {  
  57. x = coordenada_x;
  58. y = coordenada_Y;
  59. corazones = _corazones;
  60. vidas = _vidas;
  61. }
  62.  
  63. /*Este método sirve como su nombre indica para pintar la nave en pantalla,
  64.  para ello hemos usado caracteres ASCII.*/
  65. void Pintar(){
  66. gotoxy(x,y); printf("  %c",30);
  67. gotoxy(x,y+1); printf(" %c%c%c",40,207,41);
  68. gotoxy(x,y+2); printf("%c%c %c%c",30,190,190,30);
  69. }
  70.  
  71. /*Este método borra el rastro de la posición anterior la nave*/
  72. void BorrarNave(){
  73. gotoxy (x,y);   printf("   ");
  74. gotoxy (x,y+1); printf("    ");
  75. gotoxy (x,y+2); printf("     ");
  76. }
  77.  
  78. /*Este método sirve para borrar un rastro más grande como el que deja la explosión*/
  79. void BorrarExplosion(){
  80. gotoxy (x,y);   printf("       ");
  81. gotoxy (x,y+1); printf("       ");
  82. gotoxy (x,y+2); printf("       ");
  83. }
  84.  
  85. /*Este método sirve para mover la nave mediante las teclas.
  86.  Para detectar cuando pulsamos alguna tecla, y hacer algo en
  87.  de que tecla pulsemos. Usamos la función kbhit() incluida en
  88.  la biblioteca conio.h. También es necesario usar la función
  89.  getch() para recuperar la tecla que pulsemos y asignarla a
  90.  una variable. Al principio debemos imprimir un espacio en blanco
  91.  para borrar la posición anterior.*/
  92. void Mover(){
  93. if(kbhit()){    
  94. char tecla = getch();
  95. BorrarNave();
  96. if (tecla == IZQUIERDA && x>3)
  97. x--;
  98. else if(tecla == DERECHA && x<73)
  99. x++;
  100. else if(tecla == ARRIBA && y>3)
  101. y--;
  102. else if(tecla == ABAJO &&  y<25)
  103. y++;
  104. Pintar();
  105. }
  106. }
  107.  
  108. /*Este método sirve para marcar los límites y que la nave no pueda sobrepasar
  109.  los bordes establecidos y dibujados*/
  110. void PintarLimites(){
  111. int ancho;
  112. int alto;
  113. for (ancho = 2; ancho < 79; ancho++){
  114. gotoxy(ancho, 28); printf("%c",205);
  115. gotoxy(ancho, 2); printf("%c",205);
  116.  
  117. }
  118. for (alto=2; alto < 29; alto++){
  119. gotoxy(2, alto); printf("%c",186);
  120. gotoxy(78, alto); printf("%c",186);
  121. }
  122. gotoxy(2,2); printf("%c",201);
  123. gotoxy(78,2); printf("%c",187);
  124. gotoxy(2,28); printf("%c",200);
  125. gotoxy(78,28); printf("%c",188);
  126. }
  127.  
  128. /*Este método sirve para dibujar los corazones que simbolizarán la vida de
  129.  nuestra nave*/
  130. void PintarVidaSalud(){
  131. gotoxy(50,1); printf("Vidas:%d",vidas);
  132. gotoxy(64,1); printf("Salud:");
  133. gotoxy(70,1); printf("       ");
  134. for(int i=0; i<corazones; i++){
  135. gotoxy(70+i,1); printf("%c",3);
  136. }
  137. }
  138.  
  139. /*Este método es el encargado de quitar los corazones cuando los asteroides
  140.  colisionen con la nave*/
  141. void QuitaCorazones(){
  142. corazones--;
  143. }
  144.  
  145. /*Este método sirve para pintar una recreación de una explosión para
  146.  simular la muerte de la nave*/
  147. void Morir(){
  148. if(corazones==0){
  149. BorrarExplosion();
  150. gotoxy(x,y); printf("   **   ");
  151. gotoxy(x,y+1); printf("  ****  ");
  152. gotoxy(x,y+2); printf("   **   ");
  153. Sleep(200);
  154.  
  155. BorrarExplosion();
  156. gotoxy(x,y); printf(" * ** * ");
  157. gotoxy(x,y+1); printf("  ****  ");
  158. gotoxy(x,y+2); printf(" * ** * ");
  159. Sleep(200);
  160.  
  161. BorrarExplosion();
  162. gotoxy(x,y); printf("   **   ");
  163. gotoxy(x,y+1); printf("  ****  ");
  164. gotoxy(x,y+2); printf("   **   ");
  165. Sleep(200);
  166.  
  167. BorrarExplosion();
  168. gotoxy(x,y); printf(" * ** * ");
  169. gotoxy(x,y+1); printf("  ****  ");
  170. gotoxy(x,y+2); printf(" * ** * ");
  171. Sleep(200);
  172. BorrarExplosion();
  173.  
  174. vidas--;
  175. corazones=3;
  176. PintarVidaSalud();
  177. }
  178. }
  179.  
  180. /*Este método sirve para que al llamarlo podamos obtener la cordenada X*/
  181. int CoordenadaX(){
  182. return x;
  183. }
  184.  
  185. /*Este método sirve para que al llamarlo podamos obtener la cordenada Y*/
  186. int CoordenadaY(){
  187. return y;
  188. }
  189.  
  190. /*Este método sirve para obtener el número de vidas.*/
  191. int Vidas(){
  192. return vidas;
  193. }
  194. };
  195.  
  196. /*Esta clase servirá para crear e interáctuar con los asterioides*/
  197. class Asteroide{
  198. private:
  199. int x, y;
  200. public:
  201. /*Este método es el constructor de los objetos asteroides*/
  202. Asteroide(int _x, int _y){
  203. x = _x;
  204. y = _y;
  205. }
  206.  
  207. /*Este método se encarga de pintar los asteroides*/
  208. void Pintar(){
  209. gotoxy(x,y); printf("%c",184);
  210. }
  211.  
  212. /*Este método es el encargado del movimiento de los asteroides*/
  213. void Mover(){
  214. gotoxy(x,y); printf(" ");
  215. y++;
  216. if(y > 27){
  217. x= rand() %71 + 4;
  218. y=4;
  219. }
  220. Pintar();
  221. Sleep(5);
  222. }
  223.  
  224. /*Este método es el encargado de detectar si el asteroide colisiona con la nave.
  225.  Se lo debemos pasar por referencia (&) ya que vamos a modificar los valores del objeto*/
  226. void Colision(Nave &n){
  227. if(x >= n.CoordenadaX() && x <= n.CoordenadaX()+5 && y >= n.CoordenadaY() && y < n.CoordenadaY()+2){
  228. n.QuitaCorazones();
  229. n.Pintar();
  230. n.PintarVidaSalud();
  231.  
  232. Mover();            
  233. Pintar();
  234. }
  235. }
  236.  
  237. /*Este método sirve para que al llamarlo podamos obtener la cordenada X*/
  238. int CoordenadaX(){
  239. return x;
  240. }
  241.  
  242. /*Este método sirve para que al llamarlo podamos obtener la cordenada Y*/
  243. int CoordenadaY(){
  244. return y;
  245. }
  246. };
  247.  
  248. /*Esta clase sirve para crear e interactuar con la bala de nuestra nave*/
  249. class Bala{
  250. private:
  251. int x,y;
  252. public:
  253. /*Este método es el constructor del objeto bala.*/
  254. Bala(int _x, int _y){
  255. x = _x;
  256. y = _y;
  257. }
  258.  
  259. /*Este método es el encargado de mover la bala.*/
  260. void Mover(){
  261. gotoxy(x,y); printf(" ");
  262. if(y > 3)
  263. y--;
  264. gotoxy(x,y); printf("*");
  265. }
  266.  
  267. /*Comprueba si la bala ha llegado arriba del todo.*/
  268. bool Fuera(){
  269. if (y==3)
  270. return true;
  271. else return false;
  272. }
  273.  
  274. /*Este método sirve para que al llamarlo podamos obtener la cordenada X*/
  275. int CoordenadaX(){
  276. return x;
  277. }
  278.  
  279. /*Este método sirve para que al llamarlo podamos obtener la cordenada Y*/
  280. int CoordenadaY(){
  281. return y;
  282. }
  283. };
  284. int main(){
  285. bool game_over = false;
  286. int numero_meteoritos = 5;
  287. int puntos = 0;
  288.  
  289. Nave nave_1(50,25,3,3,72,80,77,75); //Los cuatro ultimos numeros son los que hacen referencia a los valores ASCII de las flechas.
  290.  
  291. OcultarCursor();
  292. nave_1.Pintar();
  293. nave_1.PintarLimites();
  294. nave_1.PintarVidaSalud();
  295.  
  296. /*Esto es una lista que contiente punteros a objetos de la clase Bala. Esto nos permitirá crear objetos.
  297.  También definitmos "it" lo cual nos servirá para recorrer todos los objetos que creemos y ejecutar sus acciones
  298.  ya que cada it será un puntero a un objeto. Haremos lo mismo con los meteoritos.*/
  299. list<Bala*>B;
  300. list<Bala*>::iterator itB;
  301.  
  302. list <Asteroide*>A;
  303. list<Asteroide*>::iterator itA;
  304.  
  305. /*Para crear los objetos de la clase Asteroide.*/
  306. for(int i=0; i<numero_meteoritos; i++){
  307. A.push_back(new Asteroide(rand()%75 + 3, rand()%5+4));
  308. }
  309.  
  310. /*Rutina de ejecución del juego. Al final colocamos la función Sleep(x) para detener el procesador
  311.  durante x milisegundos, para no forzarlo a trabajar demasiado, ya que mejora su rendimiento
  312.  y el tiempo de parada no es apreciable para los usuarios.*/
  313. while(!game_over){
  314.  
  315. gotoxy(4,1);
  316. printf("Puntos %d",puntos);
  317.  
  318. nave_1.Mover();
  319. nave_1.PintarVidaSalud();
  320. nave_1.Morir();
  321.  
  322. if(kbhit()){
  323. char tecla = getch();
  324. if (tecla == 'a')
  325. /*Para crear el objeto bala, y que empiece en el centro de la nave.*/
  326. B.push_back(new Bala(nave_1.CoordenadaX()+2, nave_1.CoordenadaY()-1));
  327. }
  328.  
  329. /*Para recorrer los elementos de la lista. Dentro del for cada "it" actúa como
  330.  un puntero a bala, por lo que al volver a poner "*it", el puntero se desreferencia
  331.  teniendo así su contenido y no su dirección. Cada (*it) es un objeto de la clase
  332.  Bala, y al ser un puntero, llamamos al método mover con "->". Necesitamos borrar la bala
  333.  ya que se queda arriba parada. Para ello comprobamos que esté arriba para ver si tenemos que
  334.     borrarla, si está alli dibujamos un espacio, y queda así borrada. Ahora nos falta borrar ese objeto
  335.     de la memoria (usando delete), y para que el iterador no pierda el hilo de por donde
  336.  debe seguir igualamos it a la siguiente iteración mediante la llamada al método "erase".*/
  337. for(itB=B.begin(); itB!=B.end(); itB++){
  338. (*itB)->Mover();
  339. if ((*itB)->Fuera()){
  340. gotoxy((*itB)->CoordenadaX(), (*itB)->CoordenadaY());
  341. printf(" ");
  342. delete (*itB);
  343. itB=B.erase(itB);
  344. }
  345. }
  346.  
  347. /*Recorremos todos los objetos de la clase Asteroide para moverlos y comprobar
  348.  si han colisionado con la nave.*/
  349. for(itA=A.begin(); itA!=A.end(); itA++){
  350. (*itA)->Mover();
  351. (*itA)->Colision(nave_1);
  352. }
  353.  
  354. /*Recorremos todos los objetos de la clase Asteroide, y para cada uno de ellos, recorremos los de
  355.  la clase Bala para comprobar si colisiona una bala con un meteorito. Al igual que antes al borrar
  356.  la bala debemos borrar también al puntero e igualar el it al siguiente espacio para que el iterador
  357.  no pierda el hilo. Al borrar el meteorito debemos crear otro, o llegaría un punto en el que al
  358.  destruirlos todos nos quedaríamos sin ninguno.*/
  359. for(itA=A.begin(); itA!=A.end(); itA++){
  360. for(itB=B.begin(); itB!=B.end(); itB++){
  361. if((*itA)->CoordenadaX()==(*itB)->CoordenadaX() && ((*itA)->CoordenadaY()+1==(*itB)->CoordenadaY() || (*itA)->CoordenadaY()==(*itB)->CoordenadaY())){
  362. gotoxy((*itB)->CoordenadaX(), (*itB)->CoordenadaY());
  363. printf(" ");
  364. delete(*itB);
  365. itB=B.erase(itB);
  366.  
  367. A.push_back(new Asteroide(rand()%74+3, 4));
  368.  
  369. gotoxy((*itA)->CoordenadaX(), (*itA)->CoordenadaY());
  370. printf(" ");
  371. delete(*itA);
  372. itA=A.erase(itA);
  373.  
  374. puntos += 5;
  375. }
  376. }
  377. }
  378.  
  379. if(nave_1.Vidas() <= 0)
  380. game_over = false;
  381.  
  382. Sleep(5);
  383. }
  384. return 0;
  385. }
  386.  
  387.  
10  Programación / Programación C/C++ / Re: Duda sobre programacion en varios lenguajes: en: 7 Diciembre 2014, 23:20 pm
ah vale vale, creo que me hago una pequeña idea sobre el tema. Muchas gracias por ayudar  :)
Páginas: [1] 2 3 4 5 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines