Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Algoritmo scacchi
Forum - C/C++ - Algoritmo scacchi - Pagina 3

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
clikkami (Normal User)
Newbie


Messaggi: 14
Iscritto: 01/01/2007

Segnala al moderatore
Postato alle 17:33
Giovedì, 11/01/2007
scusa se nn seguo i tuoi consiji ma certe volte mi sembrano troppo difficili...io cerco di farlo nel modo + semplice possibile...
ora ho ricominciato a farlo vedi ora cosa c'è ke non va...penso di essere sulla buona strada:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void main ()
{
    int i=0,j=0,nx=0,ny=0;
    float x_casuale;
    float a[][8]=
    {{' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' ',' ',' ',' '}};

    float a_diffuso[8][8];

    srand(time(NULL));
    for (i=0;i<8;i++)
    {
        for (j=0;j<8;j++)
        {
            x_casuale=-100.0F+200.0F*(float)rand()/(float)RAND_MAX;
            a[j]=x_casuale;
        }
    }
        
    for (i=0;i<8;i++)
        {
            for (j=0;j<8;j++)
                
                printf(" %.2f ",a[j]);
        
            printf("\n");
        }

    i=0;j=0;
    for (i=0;i<8;i++)
    {
        for (j=0;j<8;j++)
        {
            if (a[j]=a[0][0])
                a_diffuso[0][0]=(a[1][0]+a[0][1])/2;
            else if (a[j]=a[0][4])
                a_diffuso[0][4]=(a[0][6]+a[1][7])/2;
            else if (a[j]=a[4][0])
                a_diffuso[4][0]=(a[6][0]+a[7][1])/2;
            else if (a[j]=a[4][4])
                a_diffuso[4][4]=(a[6][7]+a[7][6])/2;
        }
    }
    
    
    for (nx=1;nx<7;nx++)
    {
        for(ny=1;ny<7;ny++)
        {
            a_diffuso[nx][ny]=(a[i-1][j]+a[i+1][j]+a[j-1]+a[j+1])/4;
        }
    }


    for (nx=1;nx<7;nx++)
    {
            a_diffuso[nx][ny]=(a[i-1][0]+a[i+1][0]+a[1])/3;
    }
    

    for (nx=1;nx<7;nx++)
    {
            a_diffuso[nx][ny]=(a[i-1][7]+a[i+1][7]+a[6])/3;
    }
    

    for (ny=1;ny<7;ny++)
    {
            a_diffuso[nx][ny]=(a[0][j-1]+a[0][j+1]+a[1][j])/3;
    }


    for (ny=1;ny<7;ny++)
    {
            a_diffuso[nx][ny]=(a[7][j-1]+a[7][j+1]+a[6][j])/3;
    }

    printf("\n\n\n");
    for (nx=0;nx<8;nx++)
    {
        for(ny=0;ny<8;ny++)
        {
            printf(" %.2f ",a_diffuso[nx][ny]);
        }
        printf("\n");
    }
}

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 2:51
Domenica, 14/01/2007
Testo quotato

Postato originariamente da clikkami:
scusa se nn seguo i tuoi consiji ma certe volte mi sembrano troppo difficili...io cerco di farlo nel modo + semplice possibile...



Qual'è il punto in cui non sono stato abbastanza chiaro nel spiegarti i punti da seguire?

Devi suddividere il programma in funzioni, altrimenti è ovvio che viene fuori confusione. Inoltre non devi scrivere l'intero programma e poi incrociando le dita provarlo ad eseguire e vedere se funziona, un programma dev'essere costruito passo per passo, pianificare un percorso (i punti che ti ho scritto lo fanno in maniera molto riassuntiva) e procedere, uno ad uno, completando tutti i punti, assicurandosi di volta in volta che siano corretti.


Il mio blog: https://piero.dev
PM Quote
Avatar
pollon85 (Normal User)
Newbie


Messaggi: 13
Iscritto: 17/03/2009

Segnala al moderatore
Postato alle 17:07
Martedì, 17/03/2009
Ciao,scusate se ho ripresto questo post abbastanza vecchio,ma ho anche io il progetto degli scacchi da implementare,quindi vi ringrazio in anticipo perchè devo dire che già con questo post mi avete aiutato molto. :k: La mia traccia è uguale,solo che oltre ai pedoni bianchi ho solo un Cavallo nero(quindi niente regina o torre).
Però mi sono bloccata in un punto che non capisco ed è per questo che gentilmente vorrei chiedere il vostro aiuto

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <math.h>
  5.  
  6. void printScacchiera(char [][8]);
  7. void 1PassoSu2Destra(char [][8],char [], int, int);
  8. void 1PassoSu2Sinistra(char [][8],char [], int, int);
  9. void 1PassoGiu2Sinistra(char [][8],char [], int, int);
  10. void 1PassoGiu2Destra(char [][8],char [], int, int);
  11. void 1PassoDestra2Su(char [][8],char [], int, int);
  12. void 1PassoDestra2Giu(char [][8],char [], int, int);
  13. void 1PassoSinistra2Su(char [][8],char [], int, int);
  14. void 1PassoSinistra2Giu(char [][8],char [], int, int);
  15.  
  16. void main(void)
  17. {
  18.     int i;
  19.     int posRiga, posCol;
  20.  
  21.     char colonne[8] = {'a','b','c','d','e','f','g','h'};
  22.  
  23.     char scacchiera[][8] =                    
  24.     {{'b','n','b','n','b','n','b','n'},
  25.     {'n','b','n','b','n','b','n','b'},
  26.     {'b','n','b','n','b','n','b','n'},
  27.     {'n','b','n','b','n','b','n','b'},
  28.     {'b','n','b','n','b','n','b','n'},
  29.     {'n','b','n','b','n','b','n','b'},
  30.     {'b','n','b','n','b','n','b','n'},
  31.     {'n','b','n','b','n','b','n','b'}};
  32.  
  33.     srand(time(NULL));
  34.  
  35.     i = 0;
  36.  
  37.     while(i<8)
  38.     {
  39.         posRiga = rand()%8;
  40.         posCol = rand()%8;
  41.  
  42.         if(scacchiera[posRiga][posCol] == 'b' || scacchiera[posRiga][posCol] == 'n')
  43.         {
  44.             scacchiera[posRiga][posCol] = 'P';
  45.             i++;
  46.         }
  47.     }
  48.      
  49.     i = 0;
  50.  
  51.     while(i<1)
  52.     {
  53.         posRiga = rand()%8;
  54.         posCol = rand()%8;
  55.  
  56.         if(scacchiera[posRiga][posCol] == 'b' || scacchiera[posRiga][posCol] == 'n')
  57.         {
  58.             scacchiera[posRiga][posCol] = 'C'; //Cavallo
  59.             i++;
  60.         }
  61.     }



fin qui tutto bene perchè ho messo le pedine e il cavallo e ho dichiarato le 8 funzioni delle possibili mosse del Cavallo.
Ora i miei dubbi sono questi,questo Printf,nel mio caso,come si traduce perchè la Regina non ha un numero di passi limitati,mentre il mio Cavallo si :doubt:
Codice sorgente - presumibilmente C/C++

  1. printf("Regina in %c%d puo' catturare i seguenti pedoni: \n\n",colonne[posCol],8-posRiga)


.....
E poi quando vado a scrivere le funzioni dichiarate all'inizio


Codice sorgente - presumibilmente C#

  1. void 1PassoSu2Destra (char scacchiera [][8],char colonne[],int posRiga, int posCol)
  2. {
  3. int i,j, pedoneTrovato = 0;
  4.  
  5. (i=posRiga, j=posCol;1<=i<=8 && 1<=j<=8;i=i+1, j=j+2)  
  6. {
  7. if((scacchiera[i][j] == 'P') && (pedoneTrovato == 0))
  8. {
  9. if((scacchiera[i+1][j+2] != 'P') && (scacchiera[i+1][j+2] != 'P'))
  10. {
  11. [b]printf("Pedone in %c%d\n",colonne[i ],8-j);[/b]
  12. pedoneTrovato = 1;
  13. }
  14. else
  15. {
  16. pedoneTrovato = 1;
  17. }
  18. }
  19. }
  20. }



Quello che ho evidenziato in blu è la parte che non capisco come scrivere nel mio caso...e poi è un problema che ho messo la i come indice di riga e j come colonne?
Grazie in anticipo e mi scuso per il post lungo :hail:

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 14:34
Mercoledì, 18/03/2009
Testo quotato

Postato originariamente da pollon85:

Ciao,scusate se ho ripresto questo post abbastanza vecchio,ma ho anche io il progetto degli scacchi da implementare,quindi vi ringrazio in anticipo perchè devo dire che già con questo post mi avete aiutato molto. :k: La mia traccia è uguale,solo che oltre ai pedoni bianchi ho solo un Cavallo nero(quindi niente regina o torre).
Però mi sono bloccata in un punto che non capisco ed è per questo che gentilmente vorrei chiedere il vostro aiuto

Codice sorgente - presumibilmente C++

  1. [...]
  2.  
  3. void 1PassoSu2Destra(char [][8],char [], int, int);
  4. void 1PassoSu2Sinistra(char [][8],char [], int, int);
  5. void 1PassoGiu2Sinistra(char [][8],char [], int, int);
  6. void 1PassoGiu2Destra(char [][8],char [], int, int);
  7. void 1PassoDestra2Su(char [][8],char [], int, int);
  8. void 1PassoDestra2Giu(char [][8],char [], int, int);
  9. void 1PassoSinistra2Su(char [][8],char [], int, int);
  10. void 1PassoSinistra2Giu(char [][8],char [], int, int);
  11. [...]



fin qui tutto bene perchè ho messo le pedine e il cavallo e ho dichiarato le 8 funzioni delle possibili mosse del Cavallo.


Forse era il caso di riunire gli otto controlli in un'unica funzione?

Testo quotato



Ora i miei dubbi sono questi,questo Printf,nel mio caso,come si traduce perchè la Regina non ha un numero di passi limitati,mentre il mio Cavallo si :doubt:
Codice sorgente - presumibilmente C/C++

  1. printf("Regina in %c%d puo' catturare i seguenti pedoni: \n\n",colonne[posCol],8-posRiga)


.....




Basta che individui le case controllate dalla regina.
Sia (h,k) la casa in cui risiede la regina, la casa (a,b) sarà controllata dalla regina se:

('a' <= a <= 'h') And (1 <= b <= 8) And (una delle seguenti)

h - k == a - b // Diagonale NE -> SO
h + k == a + b // Diagonale NO -> SE
h == a         // Stessa colonna
k == b         // Stessa riga

:k:

Ciao.

Luigi

Ultima modifica effettuata da gigisoft il 18/03/2009 alle 14:36
PM Quote
Avatar
pollon85 (Normal User)
Newbie


Messaggi: 13
Iscritto: 17/03/2009

Segnala al moderatore
Postato alle 16:47
Mercoledì, 18/03/2009
Inizio con il ringraziarti per la risposta :)
Forse sono stata poco chiara e chiedo scusa...ma non capisco :-| perchè diciamo che la prima parte va bene,quindi ho la scacchiera,gli 8 pedoni, il Cavallo e gli 8 metodi per i possibili movimenti del Cavallo. Ora prima di dichiarare i metodi c'è un "printf" del tipo
printf("Cavallo in %c%d puo'catturare i seguenti pedoni:\n\n",....
qui non riesco a capiere le coordinate di posCol e posRiga che devo inserire per dire i pedoni catturabili dal Cavallo.

E l'altro dubbio amletico è che quando vado a dichiarare ogni metodo,quindi ad esempio
Codice sorgente - presumibilmente C++

  1. void UnPassoSuDueSinistra (char scacchiera [][8],char colonne[],int posRiga, int posCol)
  2. {
  3. int i,j, pedoneTrovato = 0;
  4.  
  5. i=posRiga;j=posCol;1<i<8 && 1<j<8;i=i+1;j=j+2;


a questo punto vanno i 2 if per vedere se incrementando le 2 variabili delle possibili mosse  del Cavallo ,si trova il pedone da mangiare...anche qui ho il dubbio sugli indici che devo mettere per le variabili;io ho provato così
Codice sorgente - presumibilmente C/C++

  1. {
  2. if((scacchiera[i][j] == 'P') && (pedoneTrovato == 0))
  3. {
  4. if((scacchiera[i+1][j+2] != 'P') && (scacchiera[i+1][j+2] != 'P'))
  5. {
  6. printf("Pedone in %c%d\n",colonne[i],riga[j]);
  7. pedoneTrovato = 1;
  8. }
  9. else
  10. {
  11. pedoneTrovato = 1;
  12. }
  13. }
  14. }
  15. }


ma naturalmente non va :d
Scusami per la poca chiarezza :hail:

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 17:31
Mercoledì, 18/03/2009
Testo quotato

Postato originariamente da pollon85:

Inizio con il ringraziarti per la risposta :)



Prego, non c'e' di che.

Testo quotato


Forse sono stata poco chiara e chiedo scusa...ma non capisco :-| perchè diciamo che la prima parte va bene,quindi ho la scacchiera,gli 8 pedoni, il Cavallo e gli 8 metodi per i possibili movimenti del Cavallo. Ora prima di dichiarare i metodi c'è un "printf" del tipo
printf("Cavallo in %c%d puo'catturare i seguenti pedoni:\n\n",....
qui non riesco a capiere le coordinate di posCol e posRiga che devo inserire per dire i pedoni catturabili dal Cavallo.



Non ho capito cosa vuoi dire, me lo spiegheresti meglio?

Testo quotato


E l'altro dubbio amletico è che quando vado a dichiarare ogni metodo,quindi ad esempio
Codice sorgente - presumibilmente C++

  1. void UnPassoSuDueSinistra (char scacchiera [][8],char colonne[],int posRiga, int posCol)
  2. {
  3.  int i,j, pedoneTrovato = 0;
  4.  
  5.  i = posRiga;
  6.  j = posCol; // posRiga e posCol sono le coordinate del cavallo giusto?
  7.  1<i<8 && 1<j<8; // Non capisco questa istruzione...
  8.  i = i + 1; // perché la doppia assegnazione? Non potevi fare i = posRiga + 1?
  9.  j = j + 2; // come sopra



a questo punto vanno i 2 if per vedere se incrementando le 2 variabili delle possibili mosse  del Cavallo ,si trova il pedone da mangiare...anche qui ho il dubbio sugli indici che devo mettere per le variabili;io ho provato così
Codice sorgente - presumibilmente C/C++

  1. {
  2.  if((scacchiera[i][j] == 'P') &&
  3.     (pedoneTrovato == 0))
  4.    {
  5.     if((scacchiera[i+1][j+2] != 'P') &&
  6.        (scacchiera[i+1][j+2] != 'P')) // perche' fai l'if con due condizioni uguali?
  7.       {
  8.        printf("Pedone in %c%d\n",colonne[i],riga[j]);
  9.        pedoneTrovato = 1;
  10.       }
  11.     else
  12.       {
  13.        pedoneTrovato = 1;
  14.       }
  15.    }
  16. }
  17. }


ma naturalmente non va :d
Scusami per la poca chiarezza :hail:



Beh il codice che hai postato e' poco chiaro, non capisco cosa vuoi fare esattamente.

PM Quote
Avatar
pollon85 (Normal User)
Newbie


Messaggi: 13
Iscritto: 17/03/2009

Segnala al moderatore
Postato alle 18:16
Mercoledì, 18/03/2009
Ti chiedo davvero scusa e grazie del tempo che stai perdendo con me...il problema è che non sono proprio capace con la programmazione(e si è notato :doubt:)
Cerco di essere più chiara,il mio progetto è come quello che sta all'inizio del post,ho scacchiera,8 pedoni e un cavallo.Io ho cercato di modificare il programma che "clikkami" aveva postato per il suo progetto
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <math.h>
  5. void printScacchiera(char [][8]); //8metodi per i possibili spostamenti Cavallo//
  6. void UnPassoSuDueDestra(char [][8],char [], int, int);
  7. void UnPassoSuDueSinistra(char [][8],char [], int, int);
  8. void UnPassoGiuDueSinistra(char [][8],char [], int, int);
  9. void UnPassoGiuDueDestra(char [][8],char [], int, int);    
  10. void UnPassoDestraDueSu(char [][8],char [], int, int);
  11. void UnPassoDestraDueGiu(char [][8],char [], int, int);  
  12. void UnPassoSinistraDueSu(char [][8],char [], int, int);  
  13. void UnPassoSinistraDueGiu(char [][8],char [], int, int);
  14.  
  15. void main(void)
  16. {
  17.     int i;
  18.     int posRiga, posCol;
  19.        
  20.         char riga[8] = {'1','2','3','4','5','6','7','8'};
  21.  
  22.     char colonne[8] = {'a','b','c','d','e','f','g','h'};
  23.  
  24.     char scacchiera[][8] =                    
  25.     {{'b','n','b','n','b','n','b','n'},
  26.     {'n','b','n','b','n','b','n','b'},
  27.     {'b','n','b','n','b','n','b','n'},
  28.     {'n','b','n','b','n','b','n','b'},
  29.     {'b','n','b','n','b','n','b','n'},
  30.     {'n','b','n','b','n','b','n','b'},
  31.     {'b','n','b','n','b','n','b','n'},
  32.     {'n','b','n','b','n','b','n','b'}};
  33.  
  34.     srand(time(NULL));
  35.          i = 0;
  36.  
  37.     while(i<8)
  38.     {
  39.         posRiga = rand()%8;
  40.         posCol = rand()%8;
  41.  
  42.         if(scacchiera[posRiga][posCol] == 'b' || scacchiera[posRiga][posCol] == 'n')
  43.         {
  44.             scacchiera[posRiga][posCol] = 'P';
  45.             i++;
  46.         }
  47.     }
  48.  
  49.   i = 0;
  50.  
  51.     while(i<1)
  52.     {
  53.         posRiga = rand()%8;
  54.         posCol = rand()%8;
  55.  
  56.         if(scacchiera[posRiga][posCol] == 'b' || scacchiera[posRiga][posCol] == 'n')
  57.         {
  58.             scacchiera[posRiga][posCol] = 'C'; // Cavallo
  59.             i++;
  60.         }
  61.     } //a questo punto posRiga e posCol hanno le coord del Cavallo,ultimo dichiarato//



A questo punto nel programma che ho visto di "clikkami" sempre in questo post,c'è in
Codice sorgente - presumibilmente C/C++

  1. printf("Regina in %c%d puo'catturare i seguenti pedoni:\n\n",colonne[posCol],8-posRiga); //questo lo dovrei modificare per il mio caso e quindi dovrei scrivere un printf("Cavallo in...puo'catturare.... e questo non riesco a capirlo//


Poi c'è
Codice sorgente - presumibilmente C/C++

  1. UnPassoSuDueDestra(scacchiera,colonne,posRiga,posCol);
  2.     UnPassoSuDueSinistra(scacchiera,colonne,posRiga,posCol);
  3.         UnPassoGiuDueSinistra(scacchiera,colonne,posRiga,posCol);
  4.         UnPassoGiuDueDestra(scacchiera,colonne,posRiga,posCol);
  5.         UnPassoDestraDueSu(scacchiera,colonne,posRiga,posCol);
  6.         UnPassoDestraDueGiu(scacchiera,colonne,posRiga,posCol);
  7.         UnPassoSinistraDueSu(scacchiera,colonne,posRiga,posCol);
  8.         UnPassoSinistraDueGiu(scacchiera,colonne,posRiga,posCol);
  9.     printScacchiera(scacchiera);
  10. void printScacchiera(char scacchiera[][8])
  11. {
  12.     int i,j;
  13.  
  14.     printf("\n");
  15.     printf("  a b c d e f g h\n\n");
  16.     for(i=0;i<8;i++)
  17.     {
  18.         printf("%d",8-i);
  19.         for(j=0;j<8;j++)
  20.         {
  21.             printf(" %c", scacchiera[i ][j]);
  22.              
  23.         }
  24.         printf("\n");
  25.     }
  26. }
  27. //dichiarato tutto,ora devo scrivere i movimenti del Cavallo per vedere se trova i Pedoni//


Nel programma di "clikkami" un metodo ad esempio era

Codice sorgente - presumibilmente C#

  1. void ReginaNord(char scacchiera[][8], char colonne[], int posRiga, int posCol)
  2. {
  3.     int i,pedoneTrovato = 0;
  4.    
  5.     for(i=posRiga;i>=0;i--)
  6.     {
  7.         if((scacchiera[i ][posCol] == 'P') && (pedoneTrovato == 0))
  8.         {
  9.             if((scacchiera[i-1][posCol-1] != 'P') && (scacchiera[i-1][posCol+1] != 'P'))
  10.             {
  11.                 printf("Pedone in %c%d\n",colonne[posCol],8-i);
  12.                 pedoneTrovato = 1;
  13.        
  14.             }
  15.             else
  16.             {
  17.                 pedoneTrovato = 1;
  18.             }
  19.         }
  20.     }
  21. }


Io invece ho il metodo ad esempio UnPassoSuDueDestra,a differenza del metodo che ho scritto prima della Regina di "clikkami" io non ho inserito il ciclo for perche il Cavallo ha i passi limitati a differenza della Regina,quindi per questo io dovrei avere una situazione del genere
Codice sorgente - presumibilmente C/C++

  1. i=posRiga;j=posCol;1<i<8 && 1<j<8;i=i+1;j=j+2; // ho messo gli indici tra 1 e 8 perchè cmq non devo uscire fuori dalla scacchiera,perchè si deve gestire anche il caso in cui i passo su e i 2 a destra non si possano fare//


In parole povere,come ti ho detto all'inizio ho tentato di modificare il programma di "clikkami" per le mie esigenza 8-|

PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 18:25
Mercoledì, 18/03/2009
Testo quotato

Postato originariamente da pollon85:

Codice sorgente - presumibilmente C++

  1. void printScacchiera(char [][8]); //8metodi per i possibili spostamenti Cavallo//
  2. void UnPassoSuDueDestra(char [][8],char [], int, int);
  3. void UnPassoSuDueSinistra(char [][8],char [], int, int);
  4. void UnPassoGiuDueSinistra(char [][8],char [], int, int);
  5. void UnPassoGiuDueDestra(char [][8],char [], int, int);    
  6. void UnPassoDestraDueSu(char [][8],char [], int, int);
  7. void UnPassoDestraDueGiu(char [][8],char [], int, int);  
  8. void UnPassoSinistraDueSu(char [][8],char [], int, int);  
  9. void UnPassoSinistraDueGiu(char [][8],char [], int, int);






Scusa un dubbio, ma cosa fanno esattamente queste

PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo