ciao a tutti,
dovevo fare il gioco del 15 in c.
il mio problema e che non si devono ripetere numeri uguali.
secondo e che lo zero( che in verità dovrebe essere una casella vuota ma non sò come si fa si dovrebbe spostare tutte le volte che voglio in qualunque posizione senza cancella il numero che sostituisce).
codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4
void Su();
void Giu();
void Dx();
void Sx();
char mat[N][N];
int ia1,ja1;
int main()
{ int massimo,minimo;
char risp;
int i,j;
srand(time(NULL));
massimo=15;
minimo=1;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
mat[i][j]=(rand()%(massimo-minimo)+1);
mat[3][3]=0; // e' come se fosse vuota
ia1=3;
ja1=3;
do
{
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%d\t",mat[i][j]);
printf("\n");
}
do
{
printf("\n\nDove sposti l'uno? \n( n=su , s=giu , e=dx , o=sx )\nq per uscire\n");
scanf("%c",&risp);
}
while(risp!='q' && risp!='Q' && risp!='n' && risp!='N' && risp!='s' && risp!='S' && risp!='e' && risp!='E' && risp!='o' && risp!='O');
switch(risp)
{
case 'n': Su(); break;
case 'N': Su(); break;
case 's': Giu(); break;
case 'S': Giu(); break;
case 'e': Dx(); break;
case 'E': Dx(); break;
case 'o': Sx(); break;
case 'O': Sx(); break;
}
}
while(risp!='q' && risp!='Q');
}
void Su()
{
if (ia1>0)
{
mat[ia1][ja1]=mat[2][3]; // ho provato solo con questa funzione lo 0 si dovrebbe spostare senza cancellare il contenuto di dove viene spostato.
ia1--;
mat[ia1][ja1]=0;
}
}
void Giu()
{
if (ia1<N-1){
mat[ia1][ja1]=0;
ia1++;
mat[ia1][ja1]=1;
}
}
void Dx()
{
if (ja1<N-1){
mat[ia1][ja1]=0;
ja1++;
mat[ia1][ja1]=1;
}
}
void Sx()
{
if (ja1>0){
mat[ia1][ja1]=0;
ja1--;
mat[ia1][ja1]=1;
}
}
Avevo pensato a un ciclo for per la funzione Su che agisse sulle I, oltre questo non mi viene in mente niente..
Sapreste aiutarmi??!!!
Grazie in anticipo spero di essere stato chiaro..