Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
salve raga vi chiedo un aiutino...conoscerete di sicuro l'enigma della mossa del cavallo,
per chi non lo conoscesse io ho una scacchiera 8x8 nella quale devo far muovere il mio cavallo facendo attenzione che esso si fermi su ognuna delle 64 caselle una ed una sola volta...
questo è quello che ho implementato fino ad ora:
Codice sorgente - presumibilmente C++
#include <iostream>
#include <ctime>
usingnamespace std;
constint N =12;
void stampa(int[][N]);
void istruzioni();
void mossa();
int main()
{
int riga = 4, colonna =3;
int verticale[8]={-1, -2, -2, -1, 1, 2, 2, 1};
int orizzontale[8]={2, 1, -1, -2, -2, -1, 1, 2};
char decisione;
int Board[N][N]={0};
cout<<"\t\t\t***L'enigma della mossa del cavallo***\n\n";
cout<<"vuoi leggere le istruzioni? S/N";
cin>> decisione;
if(decisione =='s'|| decisione =='S')
istruzioni();
else
cout<<"\n\t\t\tOk ora comincia il gioco...\n\n";
mossa();
system("pause");
return0;
}
void stampa(int a[][N])
{
for(int i =2; i < N -2; i++)
{
for(int j =2; j < N -2; j++)
cout<<"|"<< a[i][j]<<"|";
cout<< endl;
}
}
void istruzioni()
{
cout<<"devi cercare di far posizionare il cavallo su tutte le caselle una ed una sola\n"
<<"volta senza farlo fermare mai su una casella su cui e' gia' stato!\n"
<<"in totale il cavallo dovra' fare 64 fermate...\nvediamo se sei capace!!! :)\n\n";
}
void mossa()
{
cout<<"digita uno dei seguenti numeri\n\n";
cout<<"0) destra - su\n"
<<"1) su - destra\n"
<<"2) su - sinistra\n"
<<"3) sinistra - su\n"
<<"4) sinistra - giu'"
<<"5) giu' - sinistra\n"
<<"6) giu' - destra\n"
<<"7) destra - giu'\n\n";
}
il problema sta nel far capire al cavallo che non deve andare fuori dai bordi...io avevo pensato che creando una scacchiera di 12x12 invece che 8x8 e mettendo a 1 i bordi e la scacchiera interna (8x8) azzerata...potevo semplicemente dire al cavallo :
Crei una scacchiera 8x8 e dai al cavallo delle coordinate d'inizio, per esempio (1,1). Ogni volta che lo muovi le coordinate cambiano a seconda della mossa che hai fatto, basta sommare le coordinate di partenza al numero di caselle di cui si muove in ogni direzione.
A questo punto basta inserire un controllo if che si assicura che le nuove coordinate non siano mai minori di 1 o maggiori di 8.
()
Newbie
Messaggi: Iscritto:
Postato alle 19:17
Martedì, 22/12/2009
minori di uno e maggiori di 8 non va bene...perchè già alla riga 2 per esempio se vado a nord sforo...come anche a sud se sono alla riga N - 2 sforo ugualmente...stessa cosa per le colonne....
Non capisco quello che stai dicendo.
Contiamo righe e colone da 1 a 8.
Sei alla riga 2. Ti muovi di -2 verticale. La nuova riga è 0. 0<1 quindi la mossa non è consentita, e non deve esserlo.
Qual'è il problema?
Ultima modifica effettuata da Matthew il 22/12/2009 alle 20:10
()
Newbie
Messaggi: Iscritto:
Postato alle 20:16
Martedì, 22/12/2009
l'array parte da zero e il posto zero quindi è consentito....semmai a -1 non è consentito..8 righe e 8 colonne da 0 a 7...
Ultima modifica effettuata da il 22/12/2009 alle 20:17