codice:
/*
AUTORE: Alessandro Re
(eh eh, mi chiamo proprio cosi', non si poteva scegliere combinazione migliore)
SPONSOR: akiross
COPYRIGHT: Licenza GNU, sett 2002
*/
#include <stdio.h>
#include <stdlib.h>
#define DEBU
void printTab(const int *table, const int h, int spec = 0)
{
for (int i = 0; i < h; i++)
{
for (int j = 0; j < 3; j++)
if (*(table + ((i*3)+j)) != 0)
printf("%3d|", (spec == 0) ? *(table + ((i*3)+j)): ((i*3)+j));
else
printf(" |");
printf(" ");
}
printf("---|---|---| ");
printf("-1-|-2-|-3-| ");
printf("---|---|---| ");
}
void initTab(int *table, const int h, int *oppos)
{
for (int i = 0; i < h * 3; i++)
*(table + i) = 0;
for (int i = 0; i < h; i++)
*(table + (i*3)) = i;
for (int i = 0; i < h * 3; i++)
*(oppos + i) = 0;
for (int i = 0; i < h; i++)
*(oppos + (i*3 + 2)) = *(table + (i*3));
}
int getLastPos(int *table, const int h, const int col)
{
int count = 0;
for (int i = 0; i < 3*h; i++)
{
if (i%3 == col)
{
#ifdef DEBUG
printf(" Sono in colonna: %d, con i=%d",i%3, i);
#endif
if (*(table+i) == 0)
{
#ifdef DEBUG
printf(" Aggiungo 1 in colonna: %d, con i=%d",i%3, i);
#endif
count++;
}
else
break;
}
}
return count*3 + col;
}
void getMove(int *orig, int *dest)
{
printf("Inserisci la colonna origine [< 0 per uscire]: ");
scanf("%d", orig);
(*orig)--;
if (*orig < 0)
{
printf("Grazie per avere usato questo gioco. ");
exit(0);
}
printf("Inserisci la colonna destinazione [< 0 per uscire]: ");
scanf("%d", dest);
(*dest)--;
if (*dest < 0)
{
printf("Grazie per avere usato questo gioco. ");
exit(0);
}
}
void check(const int *tab, const int *opp, const int elem)
{
int counter = 0;
for (int i = 0; i < elem * 3; i++)
if ((tab[i] == opp[i]) && (tab[i] != 0))
counter++;
printf("Contatore: %d, Elementi: %d ", counter, elem);
if (counter == elem)
{
printf("^_^ ^_^ ^_^ !!!HAI VINTO!!! ^_^ ^_^ ^_^");
printf(" 111 1 11111 1 1 11111 1 11111 111 1 11111 ");
exit(0);
}
}
int main()
{
int tmp = 0;
int orig = 0, dest = 0;
printf(" Benvenuto nel gioco: LA FINE DEL MONDO! ");
while (!(3 < tmp) && (tmp < 200))
{
printf("Inserisci gi elementi che vuoi usare [> 4 e < 200]: ");
scanf("%d", &tmp);
}
const int n_elem = tmp;
int tabella[n_elem][3], *ptab = &tabella[0][0], opposite[n_elem][3];
initTab(&tabella[0][0], n_elem, &opposite[0][0]);
printf("---IL TUO OBBIETTIVO:--- ");
printTab(&opposite[0][0], n_elem);
printf("------------------------ ");
while(1)
{
printTab(&tabella[0][0], n_elem);
getMove(&orig, &dest);
int orgP = getLastPos(&tabella[0][0], n_elem, orig);
if (orgP >= n_elem * 3)
orgP -= 3;
int desP = getLastPos(&tabella[0][0], n_elem, dest);
if (desP >= n_elem * 3)
desP -= 3;
if (*(ptab+orgP) < *(ptab+desP))
{
*(ptab+desP - 3) = *(ptab+orgP);
*(ptab+orgP) = 0;
printf("OK, mossa consentita (SRC:%d, DST:%d) ", *(ptab+orgP), *(ptab+desP));
}
else if (*(ptab+desP) == 0)
{
*(ptab+desP) = *(ptab+orgP);
*(ptab+orgP) = 0;
printf("OK, mossa consentita (SRC:%d, DST:%d) ", *(ptab+orgP), *(ptab+desP));
}
else
{
printf("KO, mossa NON consentita (SRC:%d, DST:%d) ", *(ptab+orgP), *(ptab+desP));
}
check(&tabella[0][0], &opposite[0][0], n_elem);
}
return 0;
}
P.S. se ti va, copia/incolla anche l'altro.