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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Un pequeño regalo de un viejo conocido...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Un pequeño regalo de un viejo conocido...  (Leído 2,882 veces)
Perrito08

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Un pequeño regalo de un viejo conocido...
« en: 18 Noviembre 2012, 02:42 am »

Aquí os dejo una cosita que he hecho esta noche ;) Llevaba tiempo sin programar absolutamente nada y he pensado que ya era hora...
Tan sólo comentadme si veis que le falta algo importante, si he puesto algún disparate, etc... Si os animáis hasta podéis seguir desarrollándolo un poquito ;) ¡Gracias!

Citar
Código
  1. // By ***** : 17-18.11.2012 : Lenguaje C
  2. // FALTA: - Mostrar casillas próximas a abierta que sean 0 - Implementar sistema de marcación por tiempo y menú
  3. // - Mejorar entrada datos - Implementar interfaz más intuitiva
  4. // - Mejorar algoritmo y simplificar el código
  5. // Made with NANO + GCC  -  Linux Ubuntu 3.5.0-17 i686  -  También funciona correctamente en plataforma Windows [PORTABLE]
  6.  
  7. #include <stdio.h>
  8. #define TAM2 6
  9. #define TAM (TAM2*TAM2)
  10. #define MINA TAM2*2
  11.  
  12. int main (int argc, char *argv [])
  13. { printf ("Buscaminas 1.0 : By ***** 2012\n"); if (TAM2<=2 || TAM2>9) { printf ("[!] Please change the TAM2 value [>2 min - <9 max]\n"); return 1; } printf ("\n");
  14. int tablero [TAM], tablero2 [TAM], a, b, x; srand (time (NULL)); for (a=0; a<TAM; a++) { tablero [a]=0; tablero2 [a]=0; }
  15. for (a=0; a<MINA; a++) { b=rand ()%TAM; while (tablero [b]==-1) b=rand()%TAM; tablero [b]=-1; }
  16. for (a=0, b=0; a<TAM; a++) {
  17. if (tablero [a-1]==-1 && (a+0)%TAM2!=0 && a>=1) b++; if (tablero [a+1]==-1 && (a+1)%TAM2!=0 && a<(TAM-1)) b++;
  18. if (tablero [a-TAM2]==-1 && a>=TAM2) b++; if (tablero [a+TAM2]==-1 && a<(TAM-TAM2)) b++;
  19. if (tablero [a-(TAM2+1)]==-1 && (a+0)%TAM2!=0 && a>=(TAM2+1)) b++; if (tablero [a+(TAM2+1)]==-1 && (a+1)%TAM2!=0 && a<(TAM-TAM2-1)) b++;
  20. if (tablero [a-(TAM2-1)]==-1 && (a+1)%TAM2!=0 && a>=(TAM2-1)) b++; if (tablero [a+(TAM2-1)]==-1 && (a+0)%TAM2!=0 && a<(TAM-TAM2+1)) b++;
  21. if (tablero [a]==-1) {b=0; continue;} else tablero [a]=b; b=0; }
  22.  
  23. while (1) { printf ("    "); for (x=1; x<=TAM2; x++) printf ("%d ", x); printf ("\n    "); for (x=1; x<=TAM2; x++) printf ("- ", x);
  24. for (a=0; a<TAM; a++) {
  25. if (a%TAM2==0) printf ("\n%d.  ", (a/TAM2)+1); if (tablero2 [a]==1) printf ("%d ", tablero [a]); else printf (". "); } printf ("\n");
  26. printf ("\nInsert X: "); scanf ("%d", &a); while (a<1 || a>TAM2) { printf ("[!] The inserted value is not OK. Please choose one value between 1 and %d...\n", TAM2); printf ("\nInsert X: "); scanf ("%d", &a); }
  27. printf ("Insert Y: "); scanf ("%d", &x); while (x<1 || x>TAM2) { printf ("[!] The inserted value is not OK. Please choose one value between 1 and %d...\n", TAM2); printf ("Insert Y: "); scanf ("%d", &x); } a=(a-1)*TAM2+(x-1);
  28. if (tablero [a]==-1) { printf ("---  You lost this time...  ---\n"); printf ("    "); for (x=1; x<=TAM2; x++) printf ("%d ", x); printf ("\n    "); for (x=1; x<=TAM2; x++) printf ("- ", x); for (a=0; a<TAM; a++) { if (a%TAM2==0) printf ("\n%d.  ", (a/TAM2)+1); if (tablero [a]==-1) printf ("* "); else printf ("%d ", tablero [a]); } printf ("\n\n"); return 0; }
  29. else {tablero2 [a]=1; b++;}
  30. if (b==TAM-MINA) { printf ("\nCongratulations! You won this time...\n"); return 0; } }
  31. }
  32.  


*** Modif 18/11/12 - 11:25 : He eliminado un bucle for innecesario


« Última modificación: 18 Noviembre 2012, 11:26 am por Perrito08 » En línea

zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: Un pequeño regalo de un viejo conocido...
« Respuesta #1 en: 20 Noviembre 2012, 21:45 pm »

Código:
#define TAM2 6
#define TAM (TAM2*TAM2)
#define MINA TAM2*2
Sobre estas líneas, ¿se llaman macros?
Voy a referirme a la primera expresión que le sigue a #define como "abreviatura" y a lo que le sigue como "lo abreviado".
Me parece que cada vez que defines una abreviatura para cierta expresión, cuando uses de allí en adelante la abreviatura, es como si en el código se pegara "lo abreviado" como más código, justo antes de que el compilador convierta a lenguaje máquina las instrucciones.
Es como un comando más que una instrucción, de modo que cada vez que has usado MINA se ha realizado una multiplicación, y lo mismo con TAM.
Quizás en este caso no importe mucho, pero creo que podrías haber usado:
Código:
cons int TAM2=6;
cons int TAM = TAM2*TAM2;
const int MINA = TAM2*2;


En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
Perrito08

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Un pequeño regalo de un viejo conocido...
« Respuesta #2 en: 20 Noviembre 2012, 22:50 pm »

Cierto, se ahorra mucho tiempo si declaro MINA y TAM como variables, pero TAM2 es básica, porque define el tamaño del tablero y está así para que se pueda modificar fácilmente...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Commodore OS Vision, una distro moderna para un viejo conocido
Noticias
wolfbcn 0 1,530 Último mensaje 27 Febrero 2012, 21:50 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines