[c++] Algoritmo per una scacchiera

di il
1 risposte

[c++] Algoritmo per una scacchiera

Dunque sto sviluppando un gioco usando Visual C++ 2010 express e la libreria SDL. In questo gioco c'è una specia di scacchiera. Le pedine hanno ciacuna un massimo numero di movimenti diversi, c'è chi si può muovere fino a tre 3 caselle in una mossa (ma possono muoversi anche di meno), altre pedine fino a 2, ecc.
Tutte si possono muovere in tutte le 8 possibili direzioni(avanti,dietro,destra,sinistra,diagonale-destra in avanti,diagonale-sinistra in avanti,diagonale-destra indietro,diagonale-destra indietro).
Quindi posso ad esempio spostare una pedina, che ha un massimo di 3 movimenti consentiti, 2 caselle a destra e una in avanti, ecc.
Però non devono essere presenti altre pedine nel mezzo di questo percorso, quindi le pedine nel muoversi non possono "saltare" altre pedine.
Ora io devo realizzare una funzione, in c++, che mi permetta di stabilire se un dato movimento è consentito oppure no, passando come parametri il numero della casella di partenza e di quella di arrivo.
Infatti, ogni casella ha un numero , la prima ha è la numero uno.
Spero di essere stato chiaro. Vi chiedo se mi potreste aiutare facendomi , almeno, una sorta di schema, che mi indichi come sviluppare questo algoritmo.

1 Risposte

  • Re: [c++] Algoritmo per una scacchiera

    Crei una matrice booleana l x h mettendo TRUE (o 1) sul valore di un posto occupato da una pedina. Es:
    bool mScacchiera[8][8]; // X x Y // Variabile globale
    
    int i;
    for (i = 0; i < 8; i++) {
        mScacchiera[0][i] = true; // La prima riga è occupata da 8 pedine (completa)
    }
    Così crei una funzione per vedere se una casella è raggiungibile e se nella posizione iniziale è presente una pedina.
    struct XYPOS {
        int x, y;
    };
    
    bool SpostaPedina(XYPOS PosizioneIniziale, XYPOS PosizioneFinale) {
        if (mScacchiera[PosizioneIniziale.x][PosizioneIniziale.y]) {
            // ecc...
        } else return false;
    }
    Poi continui tu.
Devi accedere o registrarti per scrivere nel forum
1 risposte