Ciao a tutti!
Sto' creando un programma con il quale è possibile posizionare e spostare 4 "pezzi" (vogilo poi trasformarlo in un gioco di dama) all'interno di una griglia 8x8.
Ho scritto questo codice:
codice:
#include <iostream>
#include <stdlib.h>
#define coord 8
using namespace std;
void Elaboraschema(int[][coord],bool);
void Stampaschema(int[][coord]);
int main() {
bool uscito=true,prep=true;
int coordinate [coord][coord];//array dei valori contenuti nelle caselle della griglia
int x,y,latitudine,longitudine;
for(x=0;x<coord;x++)//setto tutti i valori della caselle a zero servendomi delle variabili y e x
for(y=0;y<coord;y++)
coordinate[x][y]=0;
Elaboraschema(coordinate,prep);//richiamo la funzione la prima volta
prep=false;
while(uscito==true){
Elaboraschema(coordinate,prep);//richiamo la fuzione all'infinito dopo aver modificato il valore di prep
}
return 0;
}
void Stampaschema(int b[][coord]){//funzione che disegna la griglia con i valori dell'array b
int x,y;
cout<<"0 1 2 3 4 5 6 7 8\n";
for(y=0;y<coord;y++) {//riporto i valori nella griglia
cout<<y+1<<" ";
for(x=0;x<coord;x++) {
cout<<b[x][y]<<" ";
}
cout<<"\n";
}
}
void Elaboraschema(int schema[][coord],bool prep){//funzione che elabora i valori della griglia da stampare
int x,y,elaborati=0,pezzo,ypezzo,xpezzo;
int pezzi[4][2];//array contenente le coordinate(0=y,1=x) di 4 pezzi e gli stessi
for(y=0;y<coord;y++) {//estraggo dallo scema gli eventuali pezzi già presenti e le loro coordinate
for(x=0;x<coord;x++) {
if(schema[y][x]>0) {pezzi[elaborati][0]=y;pezzi[elaborati][1]=x;elaborati++;}
}
}
for(x=0;x<coord;x++)//cancello i pezzi dalla griglia
for(y=0;y<coord;y++)
schema[x][y]=0;
if(prep==true) {for(x=0;x<4;x++)for(y=0;y<2;y++)pezzi[x][y]=0;}//la prima volta che la funzione è richiamata (prep=true) ripulisco l'array contenente i pezzi
cout<<"pezzo?\n";
cin>>pezzo;//richiedo il numero del pezzo da elaborare
cin>>ypezzo;//richiedo le nuove coordinate y del pezzo
cin>>xpezzo;//richiedo le nuove coordinate x del pezzo
ypezzo--;
xpezzo--;
if(schema[ypezzo][xpezzo]==0) {//se le nuove coordinate sono vuote posizione vi posiziona il pezzo elaborato ed elabora la nuova griglia
pezzi[pezzo][0]=ypezzo;
pezzi[pezzo][1]=xpezzo;
schema[pezzi[0][0]][pezzi[0][1]]=4;
schema[pezzi[1][0]][pezzi[1][1]]=4;
schema[pezzi[2][0]][pezzi[2][1]]=4;
schema[pezzi[3][0]][pezzi[3][1]]=4;
Stampaschema(schema);//stampa la griglia
}else{
cout<<"Coordinate errate: i pezzi non possono essere sovrapposti!";//restituisce errore se le coordinate sono occupate da un altro pezzo
}
}
Il mio problema stà nelle ultime righe di "Elaboraschema": infatti il controllo fatto dall'ultimo if restitusce sempre true, perchè lo schema è stato precedentemente ripulito. Inoltre non so perchè ma la casella 1-1 restituisce sempre 4(il valore che indica un pezzo).
Premesso ce non sono molto esperto di C++ e che NON so programmare in alcun modo ad oggetti, qualcuno saprebbe spiegarmi come risolvere questi problemi in modo semplice, o spiegarmi come strutturare il codice in modo più semplice (riconosco che è strutturato male e disordinatamente)?
Grazie in anticipo!