Un pequeño regalo de un viejo conocido...

Iniciado por Perrito08, 18 Noviembre 2012, 02:42 AM

0 Miembros y 1 Visitante están viendo este tema.

Perrito08

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!

CitarPastebin: http://pastebin.com/Gwq42z1u

// By ***** : 17-18.11.2012 : Lenguaje C
// FALTA: - Mostrar casillas próximas a abierta que sean 0 - Implementar sistema de marcación por tiempo y menú
// - Mejorar entrada datos - Implementar interfaz más intuitiva
// - Mejorar algoritmo y simplificar el código
// Made with NANO + GCC  -  Linux Ubuntu 3.5.0-17 i686  -  También funciona correctamente en plataforma Windows [PORTABLE]

#include <stdio.h>
#define TAM2 6
#define TAM (TAM2*TAM2)
#define MINA TAM2*2

int main (int argc, char *argv [])
{ 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");
int tablero [TAM], tablero2 [TAM], a, b, x; srand (time (NULL)); for (a=0; a<TAM; a++) { tablero [a]=0; tablero2 [a]=0; }
for (a=0; a<MINA; a++) { b=rand ()%TAM; while (tablero [b]==-1) b=rand()%TAM; tablero [b]=-1; }
for (a=0, b=0; a<TAM; a++) {
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++;
if (tablero [a-TAM2]==-1 && a>=TAM2) b++; if (tablero [a+TAM2]==-1 && a<(TAM-TAM2)) b++;
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++;
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++;
if (tablero [a]==-1) {b=0; continue;} else tablero [a]=b; b=0; }

while (1) { 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 (tablero2 [a]==1) printf ("%d ", tablero [a]); else printf (". "); } printf ("\n");
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); }
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);
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; }
else {tablero2 [a]=1; b++;}
if (b==TAM-MINA) { printf ("\nCongratulations! You won this time...\n"); return 0; } }
}



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

zonahurbana

#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:
cons int TAM2=6;
cons int TAM = TAM2*TAM2;
const int MINA = TAM2*2;
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

Perrito08

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...