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


 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  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 377 veces)
Perrito08

Desconectado Desconectado

Mensajes: 3


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

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 por Perrito08 » En línea

zonahurbana

Desconectado Desconectado

Mensajes: 140

RS, JC.


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

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

Aprendiendo de a pocos ...
Perrito08

Desconectado Desconectado

Mensajes: 3


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

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
Regalo Hosting mas dominio [solo se agrega pequeño bloque de anuncios]
Foro Libre
rancitis 8 907 Último mensaje 23 Enero 2007, 00:17
por rancitis
EMM386.EXE , un viejo conocido
Windows
Nakar 5 1,552 Último mensaje 8 Agosto 2007, 17:26
por nhaalclkiemr
Un saludo de un viejo conocido
Foro Libre
Aironjack 2 897 Último mensaje 12 Octubre 2007, 02:11
por Hwagm
Regalo para mi viejo por su cumpleaños.
Foro Libre
. . . 3 1,808 Último mensaje 1 Enero 2010, 12:38
por Artikbot
Commodore OS Vision, una distro moderna para un viejo conocido
Noticias
wolfbcn 0 634 Último mensaje 27 Febrero 2012, 21:50
por wolfbcn
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines