Oppure

Loading
18/03/09 17:25
gigisoft
Postato originariamente da pollon85:

void printScacchiera(char [][8]); //8metodi per i possibili spostamenti Cavallo//
void UnPassoSuDueDestra(char [][8],char [], int, int); 
void UnPassoSuDueSinistra(char [][8],char [], int, int); 
void UnPassoGiuDueSinistra(char [][8],char [], int, int); 
void UnPassoGiuDueDestra(char [][8],char [], int, int);    
void UnPassoDestraDueSu(char [][8],char [], int, int); 
void UnPassoDestraDueGiu(char [][8],char [], int, int);  
void UnPassoSinistraDueSu(char [][8],char [], int, int);  
void UnPassoSinistraDueGiu(char [][8],char [], int, int); 




Scusa un dubbio, ma cosa fanno esattamente queste
aaa
18/03/09 17:49
pollon85
Postato originariamente da gigisoft:

Postato originariamente da pollon85:

void printScacchiera(char [][8]); //8metodi per i possibili spostamenti Cavallo//
void UnPassoSuDueDestra(char [][8],char [], int, int); 
void UnPassoSuDueSinistra(char [][8],char [], int, int); 
void UnPassoGiuDueSinistra(char [][8],char [], int, int); 
void UnPassoGiuDueDestra(char [][8],char [], int, int);    
void UnPassoDestraDueSu(char [][8],char [], int, int); 
void UnPassoDestraDueGiu(char [][8],char [], int, int);  
void UnPassoSinistraDueSu(char [][8],char [], int, int);  
void UnPassoSinistraDueGiu(char [][8],char [], int, int); 




Scusa un dubbio, ma cosa fanno esattamente queste


Sono i possibili movimenti del Cavallo,visto che sulla scacchiera il Cavallo si muove a L,compie in totale 3 passi,per questo li ho chiamati 1passo sopra e 2 a dx...ho fatto la stessa cosa del programma di "clikkami" solo che lui faceva muovere la Regina e quindi gestiva solo i movimenti in verticale e in orizzontale senza limiti perchè la Regina non ha limiti e per questo lui li ha chiamati void ReginaNord,void ReginaSud.Nel mio caso invece devo gestire altri tipi di movimenti..spero di essere stata più chiara

:hail:
aaa
18/03/09 17:55
gigisoft
Postato originariamente da pollon85:

Postato originariamente da gigisoft:

Postato originariamente da pollon85:

void printScacchiera(char [][8]); //8metodi per i possibili spostamenti Cavallo//
void UnPassoSuDueDestra(char [][8],char [], int, int); 
void UnPassoSuDueSinistra(char [][8],char [], int, int); 
void UnPassoGiuDueSinistra(char [][8],char [], int, int); 
void UnPassoGiuDueDestra(char [][8],char [], int, int);    
void UnPassoDestraDueSu(char [][8],char [], int, int); 
void UnPassoDestraDueGiu(char [][8],char [], int, int);  
void UnPassoSinistraDueSu(char [][8],char [], int, int);  
void UnPassoSinistraDueGiu(char [][8],char [], int, int); 




Scusa un dubbio, ma cosa fanno esattamente queste


Sono i possibili movimenti del Cavallo,visto che sulla scacchiera il Cavallo si muove a L,compie in totale 3 passi,per questo li ho chiamati 1passo sopra e 2 a dx...ho fatto la stessa cosa del programma di "clikkami" solo che lui faceva muovere la Regina e quindi gestiva solo i movimenti in verticale e in orizzontale senza limiti perchè la Regina non ha limiti e per questo lui li ha chiamati void ReginaNord,void ReginaSud.Nel mio caso invece devo gestire altri tipi di movimenti..spero di essere stata più chiara

:hail:


so come si muove il cavallo, intendevo dire, cosa ritornano?
aaa
18/03/09 18:09
pollon85
Ti chiedo sempre scusa per la mia ignoranza in materia!!!!
Io avevo questo dubbio nel senso che io ho creato le mie funzioni sulla falsa riga di questa
void ReginaNordOvest(char scacchiera[][8],char colonne[], int posRiga, int posCol)
{
int i,j, pedoneTrovato = 0;

for(i=posCol, j=posRiga; i>=0 && j>=0;i--, j--) 
//solo che qui non ho messo il for,ma i=posRiga;j=posCol;1<i<8 && 1<j<8;i=i+1;j=j+2;//
//da qui in poi dovrei modificare questo per il mio caso,ma ho grossa crisi//
{
if((scacchiera[j][i ] == 'P') && (pedoneTrovato == 0))
{
if((scacchiera[j-1][i-1] != 'P') && (scacchiera[j-1][i+1] != 'P'))
{
printf("Pedone in %c%d\n",colonne[i ],8-j);
pedoneTrovato = 1;
}
else
{
pedoneTrovato = 1;
}
}
}
} 


naturalmente GRAZIE sempre!!!!
Ultima modifica effettuata da pollon85 18/03/09 18:10
aaa
19/03/09 8:59
gigisoft
Postato originariamente da pollon85:

Ti chiedo sempre scusa per la mia ignoranza in materia!!!!
Io avevo questo dubbio nel senso che io ho creato le mie funzioni sulla falsa riga di questa
[...]


naturalmente GRAZIE sempre!!!!



Beh ti potresti semplicemente fare una cosa del genere:

void ReginaNordOvest(char scacchiera[][8],char colonne[], int posRiga, int posCol)
{
 int i = posCol, j = posRiga, pedoneTrovato = 0;
 if ((scacchiera[j - 1][i - 2] == 'P') && ((j - 1) > 0) && ((i - 2) > 0))
    {
     printf("Pedone in %c%d\n",colonne[i - 2], j + 1);
     pedoneTrovato++;
    }

 if ((scacchiera[j + 1][i - 2] == 'P') ((j + 1) < 9) && ((i - 2) > 0))
    {
     printf("Pedone in %c%d\n",colonne[i - 2], j + 1);
     pedoneTrovato++;
    }

 if ((scacchiera[j + 2][i - 1] == 'P') && ((j + 2) < 9) && ((i - 1) > 0)) ||
    {
     printf("Pedone in %c%d\n",colonne[i - 1], j + 1);
     pedoneTrovato++;
    }

 if ((scacchiera[j + 2][i + 1] == 'P') && ((j + 2) < 9) && ((i + 1) < 9)) ||
    {
     printf("Pedone in %c%d\n",colonne[i + 1], j + 1);
     pedoneTrovato++;
    }

 if ((scacchiera[j + 1][i + 2] == 'P') && ((j + 1) < 9) && ((i + 2) < 9)) ||
    {
     printf("Pedone in %c%d\n",colonne[i + 2], j + 1);
     pedoneTrovato++;
    }

 if ((scacchiera[j - 1][i + 2] == 'P') && ((j - 1) > 0) && ((i + 2) < 9)) ||
    {
     printf("Pedone in %c%d\n",colonne[i + 2], j + 1);
     pedoneTrovato++;
    }

 if ((scacchiera[j - 2][i + 1] == 'P') && ((j - 2) > 0) && ((i + 1) < 9)) ||
    {
     printf("Pedone in %c%d\n",colonne[i + 1], j + 1);
     pedoneTrovato++;
    }

 if ((scacchiera[j - 2][i - 1] == 'P') && ((j - 2) > 0) && ((i - 1) > 0)))
    {
     printf("Pedone in %c%d\n",colonne[i - 1], j + 1);
     pedoneTrovato++;
    }
   
}


dimmi che ne pensi :k:

Luigi
aaa
19/03/09 12:01
pollon85
Penso che va benissimo!!!:blush:
Non so come ringraziarti :hail:
Alla fine come mi hai dimostrato tu,posso dichiarare un'unica funzione
che mi gestisce tutte le mosse :k: giusto???Ho capito bene??? :doubt:
Comunque GRAZIE MILLE per tutto il tempo che hai perso per aiutarmi!!! :hail::hail:
aaa
19/03/09 13:39
pollon85
Scusami se ancora scrivo...alla fine dopo averlo riprovato ho visto che non mi trovo sempre.Il codice finale che ho scritto è:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

void printScacchiera(char [][8]);
void MossaCavallo(char [][8],char [], int, int);
void main(void)
{
    int i;
    int posRiga, posCol;

    char colonne[8] = {'a','b','c','d','e','f','g','h'};

    char scacchiera[][8] =                    
    {{'b','n','b','n','b','n','b','n'},
    {'n','b','n','b','n','b','n','b'},
    {'b','n','b','n','b','n','b','n'},
    {'n','b','n','b','n','b','n','b'},
    {'b','n','b','n','b','n','b','n'},
    {'n','b','n','b','n','b','n','b'},
    {'b','n','b','n','b','n','b','n'},
    {'n','b','n','b','n','b','n','b'}};

    srand(time(NULL));

    i = 0;

    while(i<8)
    {
        posRiga = rand()%8;
        posCol = rand()%8;

        if(scacchiera[posRiga][posCol] == 'b' || scacchiera[posRiga][posCol] == 'n')
        {
            scacchiera[posRiga][posCol] = 'P';
            i++;
        }
    }
    
    i = 0;

    while(i<1)
    {
        posRiga = rand()%8;
        posCol = rand()%8;

        if(scacchiera[posRiga][posCol] == 'b' || scacchiera[posRiga][posCol] == 'n')
        {
            scacchiera[posRiga][posCol] = 'C'; // Cavallo
            i++;
        }
    }

    printf("Regina in %c%d puo' catturare i seguenti pedoni: \n\n",colonne[posCol],8-posRiga);
   MossaCavallo(scacchiera,colonne,posRiga,posCol); 
	 printScacchiera(scacchiera);
} 
void printScacchiera(char scacchiera[][8])
{
    int i,j;

    printf("\n");
    printf("  a b c d e f g h\n\n");
    for(i=0;i<8;i++)
    {
        printf("%d",8-i);
        for(j=0;j<8;j++)
        {
            printf(" %c", scacchiera[i ][j]);
            
        }
        printf("\n");
    }
}


void MossaCavallo(char scacchiera[][8],char colonne[], int posRiga, int posCol)
{
int i = posCol, j = posRiga, pedoneTrovato = 0;
if ((scacchiera[j - 1][i - 2] == 'P') && ((j - 1) > 0) && ((i - 2) > 0))
    {
     printf("Pedone in %c%d\n",colonne[i - 2], j + 1);
     pedoneTrovato++;
    }

if ((scacchiera[j + 1][i - 2] == 'P')&& ((j + 1) < 9) && ((i - 2) > 0))
    {
     printf("Pedone in %c%d\n",colonne[i - 2], j + 1);
     pedoneTrovato++;
    }

if ((scacchiera[j + 2][i - 1] == 'P') && ((j + 2) < 9) && ((i - 1) > 0))
    {
     printf("Pedone in %c%d\n",colonne[i - 1], j + 1);
     pedoneTrovato++;
    }

if ((scacchiera[j + 2][i + 1] == 'P') && ((j + 2) < 9) && ((i + 1) < 9))
    {
     printf("Pedone in %c%d\n",colonne[i + 1], j + 1);
     pedoneTrovato++;
    }

if ((scacchiera[j + 1][i + 2] == 'P') && ((j + 1) < 8) && ((i + 2) < 9))
    {
     printf("Pedone in %c%d\n",colonne[i + 2], j + 1);
     pedoneTrovato++;
    }

if ((scacchiera[j - 1][i + 2] == 'P') && ((j - 1) > 0) && ((i + 2) < 9))
    {
     printf("Pedone in %c%d\n",colonne[i + 2], j + 1);
     pedoneTrovato++;
    }

if ((scacchiera[j - 2][i + 1] == 'P') && ((j - 2) > 0) && ((i + 1) < 9))
    {
     printf("Pedone in %c%d\n",colonne[i + 1], j + 1);
     pedoneTrovato++;
    }

if ((scacchiera[j - 2][i - 1] == 'P') && ((j - 2) > 0) && ((i - 1) > 0))
    {
     printf("Pedone in %c%d\n",colonne[i - 1], j + 1);
     pedoneTrovato++;
    }
  
}


La posizione del Cavallo la legge sempre bene,ma quella dei pedoni no
E ad esempio mandandolo in esecuzione,una delle volte mi ha detto che il pedone catturabile era in c6 e b6,mentre sulla scacchiera i pedoni stavano in c5 e b5...quindi dovrei modificare qualche iterazione?
SCUSAMI!!!!8-|
aaa
19/03/09 14:01
gigisoft
Postato originariamente da pollon85:

La posizione del Cavallo la legge sempre bene,ma quella dei pedoni no
E ad esempio mandandolo in esecuzione,una delle volte mi ha detto che il pedone catturabile era in c6 e b6,mentre sulla scacchiera i pedoni stavano in c5 e b5...quindi dovrei modificare qualche iterazione?
SCUSAMI!!!!8-|



Piccolo errore ( D'oh!!! ) allora negli if è:
  printf("Pedone in %c%d\n",colonne[i - 1], j);


:k:

Luigi
aaa