Re: 4° Esercizio in c++: Giro a cavallo. Dove è il bug?
Inviato: venerdì 28 agosto 2009, 9:36
Ciao daemon_nio,
cavallo::cavallo(){
// Variabili di prova
dbg01 = 0; <- Non serve a nulla, tutte le variabili, funzioni che iniziano con dbgX hanno lo scopo di fare da debug e vedere risultati. dbg = debug
In origine sarebbe servita a capire se una casella era già occupata o no, ma non funziona
arrayMosseCasuali = new int [numeroMosse];
int numeroMosse = 64;
// Crea la tabella di 8*8
maxRangeColonna = 8;
maxRangeRiga = 8;
int arraySize = 64; In teoria le mosse dovrebbero essere 64 quindi la dimensione massima pensata per le mosse da fare sono 64
Posiziona il cavallo al centro della scacchiera
posRiga = 4;
posColonna = 3;
// crea lo spazio per la creazione degli array
Sono gli array che permettono al cavallo di spostasi orizzontalmente e verticalmente al interno della scacchiera.
arrayOrizontale = new int [arraySize];
arrayVerticale = new int [arraySize];
// questo tiene traccia di TUTTI gli spostamenti effettuati dal cavallo
arrayMemorizzaScelte = new int [arraySize];
Inizializza a 0 tutti gli array del programma
// azzera il contatore delle mosse già estratte
for ( int i1 = 0; i1 < numeroMosse; i1++)
arrayMosseCasuali[i1] = 0;
// crea arrayBidimensionale
arrayMovimento = new int *[maxRangeColonna];
for (int i1 = 0; i1 < maxRangeColonna; i1++){
arrayMovimento[i1] = new int [maxRangeRiga];
}
//inizializza arrayBidimensionale
for (int i1 = 0; i1 < maxRangeColonna; i1++){
for ( int i2 = 0; i2 < maxRangeRiga; i2++){
arrayMovimento[i1][i2] = 0;
}
}
Attraverso posColonna e posRiga segna che in questa posizione c'è la mossa 0
arrayMovimento[posColonna][posRiga] = 0;
Qui mia colpa DOVEVO documentare meglio eccovi una tabella che chiarirà tutto. Queste sono le posizione possibili che il cavallo può fare con arrayOrizontale[0] e arrayVerticale[0] la lettara K è la posizione dove il cavallo si trova in questo momento
0 0 0 0 0 0 0 0
0 0 2 0 1 0 0 0
0 3 0 0 0 0 0 0
0 0 0 K 0 0 0 0
0 4 0 0 0 7 0 0
0 0 5 0 6 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
// poszioni possibili
arrayOrizontale[0] = 2;
arrayOrizontale[1] = 1;
arrayOrizontale[2] = -1;
arrayOrizontale[3] = -2;
arrayOrizontale[4] = -2;
arrayOrizontale[5] = -1;
arrayOrizontale[6] = 1;
arrayOrizontale[7] = 2;
arrayVerticale[0] = -1;
arrayVerticale[1] = -2;
arrayVerticale[2] = -2;
arrayVerticale[3] = -1;
arrayVerticale[4] = 1;
arrayVerticale[5] = 2;
arrayVerticale[6] = 2;
arrayVerticale[7] = 1;
}
Spero di essere stato chiaro, alla luce di queste nuove informazione cosa NON dovevo mettere all'interno del costruttore?
Ciao
Lele
Sicuramente hai ragione, ma se MAI inizio MAI imparo. La programmazione è l'unica cosa in cui non riesco a imparare facilmente di conseguenza è una questione personale.Secondo me non sei pronto per passare alla programmazione ad oggetti, quindi andiamo per gradi.
Scusami ma è quello che fa, ti elenco passo per passo quello che avrei voluto fare.Un costruttore di un oggetto (in questo caso di un Cavallo) deve unicamente inizializzare delle sue proprietà:
cavallo::cavallo(){
// Variabili di prova
dbg01 = 0; <- Non serve a nulla, tutte le variabili, funzioni che iniziano con dbgX hanno lo scopo di fare da debug e vedere risultati. dbg = debug
In origine sarebbe servita a capire se una casella era già occupata o no, ma non funziona
arrayMosseCasuali = new int [numeroMosse];
int numeroMosse = 64;
// Crea la tabella di 8*8
maxRangeColonna = 8;
maxRangeRiga = 8;
int arraySize = 64; In teoria le mosse dovrebbero essere 64 quindi la dimensione massima pensata per le mosse da fare sono 64
Posiziona il cavallo al centro della scacchiera
posRiga = 4;
posColonna = 3;
// crea lo spazio per la creazione degli array
Sono gli array che permettono al cavallo di spostasi orizzontalmente e verticalmente al interno della scacchiera.
arrayOrizontale = new int [arraySize];
arrayVerticale = new int [arraySize];
// questo tiene traccia di TUTTI gli spostamenti effettuati dal cavallo
arrayMemorizzaScelte = new int [arraySize];
Inizializza a 0 tutti gli array del programma
// azzera il contatore delle mosse già estratte
for ( int i1 = 0; i1 < numeroMosse; i1++)
arrayMosseCasuali[i1] = 0;
// crea arrayBidimensionale
arrayMovimento = new int *[maxRangeColonna];
for (int i1 = 0; i1 < maxRangeColonna; i1++){
arrayMovimento[i1] = new int [maxRangeRiga];
}
//inizializza arrayBidimensionale
for (int i1 = 0; i1 < maxRangeColonna; i1++){
for ( int i2 = 0; i2 < maxRangeRiga; i2++){
arrayMovimento[i1][i2] = 0;
}
}
Attraverso posColonna e posRiga segna che in questa posizione c'è la mossa 0
arrayMovimento[posColonna][posRiga] = 0;
Qui mia colpa DOVEVO documentare meglio eccovi una tabella che chiarirà tutto. Queste sono le posizione possibili che il cavallo può fare con arrayOrizontale[0] e arrayVerticale[0] la lettara K è la posizione dove il cavallo si trova in questo momento
0 0 0 0 0 0 0 0
0 0 2 0 1 0 0 0
0 3 0 0 0 0 0 0
0 0 0 K 0 0 0 0
0 4 0 0 0 7 0 0
0 0 5 0 6 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
// poszioni possibili
arrayOrizontale[0] = 2;
arrayOrizontale[1] = 1;
arrayOrizontale[2] = -1;
arrayOrizontale[3] = -2;
arrayOrizontale[4] = -2;
arrayOrizontale[5] = -1;
arrayOrizontale[6] = 1;
arrayOrizontale[7] = 2;
arrayVerticale[0] = -1;
arrayVerticale[1] = -2;
arrayVerticale[2] = -2;
arrayVerticale[3] = -1;
arrayVerticale[4] = 1;
arrayVerticale[5] = 2;
arrayVerticale[6] = 2;
arrayVerticale[7] = 1;
}
Spero di essere stato chiaro, alla luce di queste nuove informazione cosa NON dovevo mettere all'interno del costruttore?
Ciao
Lele