Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] Gestione mosse su una scacchiera...

    Ciao a tutti!
    Come esercizio, devo effettuare delle operazioni su una scacchiera rappresentata da una matrice 8x8 (deve essere obbligatoriamente una matrice) che contiene all'interno come situazione iniziale la disposizione iniziale dei pezzi del gioco degli scacchi.

    L'esercizio fornisce un file di testo, dove ogni riga contiene dati del tipo:

    D2D4
    D7D5
    ...

    che deve essere letto inserendo i vari record in una struct coda (come lista legata) di questo tipo:

    Codice PHP:
    struct queue {
        
    char pos1;
        
    int pos2;
        
    char newpos1;
        
    int newpos2;
        
        
    struct queue *next/* Link a un'altro adt dello stesso tipo */
    }; 
    Fin qui nessun problema! Ho realizzato la coda che contiene tutte le mosse da eseguire! Ora devo estrarre dalla coda un record alla volta e utilizzarlo per gestire le modifiche alla matrice che contiene le posizioni iniziali dei pezzi!

    Ora, il problema è che a me servono, per la matrice, delle coordinate numeriche per modificarla, mentre io ho coordinate char, int - char, int....

    Ora in ASCII la lettera A dovrebbe essere 65... B = 66 e cosi via.... ma i valori degli indici della matrice variano solamente da 1 a 8.

    Quale soluzione veloce posso adottare per modificare la scacchiera? Mi verrebbe in mente di creare una funzione che dato un char, tramite uno switch che determina la lettera che è contenuta nella variabile, cambia il valore alla lettera, assegnandogli il valore ASCII del numero appropriato da 1 a 8....

    Però mi sembra una soluzione grezza e credo ci siano altri metodi più economici ed efficaci, che spero vogliate condividere con me! :P
    Visita il mio sito personale: AndreaBrandi.Com

  2. #2
    Ok, alla fine ho risolto con questo ciclo iterativo:

    codice:
         while( current->next != NULL ) {
             /* Inserisco nella scacchiera lo spostamento */
             chessboard[current->newpos2 - 1][current->newpos1 - 65] = chessboard[current->pos2 - 1][current->pos1 - 65];
             chessboard[current->pos2 - 1][current->pos1 - 65] = ' ';
             /* stampo la matrice con la nuova situazione della scacchiera */
             stampamat(chessboard, rig, col);
             
             printf( "Premi un tasto per continuare...\n" );
             getch();
             /* current va alla prossima mossa da effettuare */
             current = current->next;    
         }
    Visita il mio sito personale: AndreaBrandi.Com

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.