Dunque ho completato il mio problema, ma ho questa situazione:
quando compilo e mando in esecuzione, mi esce per un secondo la schermata vuota del DOS e poi si chiude....il getch l'ho messo e nn è qui il problema ma mi sono accorto che il tutto deriva dal fatto che ripeto otto volte la procedura regina().
Si perchè provando ad eseguirla sei volte, funziona, ho l'esecuzione e il tutto va correttamente (quindi mi posiziona le sei regine correttamente) ma se ripeto sette o + volte nn va.....
Perchè???
posto il programma completo, dove in grassetto ho messo il codice che sicuramente funziona e nn influisce sul mio problema:
codice:
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.c>
//dichiaro la matrice 8X8 per la scacchiera
const int n=8;
int sc[n][n];
int i, j, rip;
void generazione_scacchiera(void);
void regina(void);
int criga(int);
int ccolonna(int);
int cdp(int,int);
int cds(int,int);
void visualizzazione(void);
int main(){
//genero la scacchiera
generazione_scacchiera();
//ripeto per otto volte regina() per posizionare otto regine
for(rip=0;rip<=8;rip++)
regina();
//visualizzo la scacchiera
visualizzazione();
getch();
return 0;
}
void generazione_scacchiera(void){
for(i=0;i<=n-1;i++)
for(j=0;j<=n-1;j++)
if((i%2)==0){
if((j%2)==0)
sc[i][j]=0;
else
sc[i][j]=1;
}
else{
if((j%2)==0)
sc[i][j]=1;
else
sc[i][j]=0;
}
}
void regina(void){
i=(rand()%8);
j=(rand()%8);
if( (criga(i)==1) && (ccolonna(j)==1) && (cdp(i,j)==1) && (cds(i,j)==1) )
sc[i][j]=10;
else
regina();
}
int criga(int x){
int k, occupato=0;
for(k=0;k<=n-1;k++){
if(sc[x][k]==10)
occupato=1;
}
if(occupato==1)
return 2;
else
return 1;
}
int ccolonna(int x){
int k, occupato=0;
for(k=0;k<=n-1;k++){
if(sc[k][x]==10)
occupato=1;
}
if(occupato==1)
return 2;
else
return 1;
}
int cdp(int x, int y){
int k, m, occupato=0;
if(x>y){
for( k=x-y, m=0 ; (k<=n-1)&&(m<=n-1) ; k++,m++ )
if(sc[k][m]==10)
occupato=1;
}
else{
for(k=0, m=y-x ; (k<=n-1)&&(m<=n-1) ; k++,m++)
if(sc[k][m]==10)
occupato=1;
}
if(occupato==1)
return 2;
else
return 1;
}
int cds(int x,int y){
int k, m, occupato=0;
if(x+y < 8){
for(k=0, m=x+y; (k<=n-1)&&(m>=0); k++, m--)
if(sc[k][m]==10)
occupato=1;
}
else{
for(k=x+y-7, m=7; (k<=n-1)&&(m>=0); k++, m--)
if(sc[k][m]==10)
occupato=1;
}
if(occupato==1)
return 2;
else
return 1;
}
void visualizzazione (void){
for(i=0;i<=7;i++){
gotoxy(17,1+(i*3));
cout<<"_______________________________________________";
gotoxy(16,2+(i*3));
cout<<"| | | | | | | | |";
gotoxy(16,3+(i*3));
cout<<"| | | | | | | | |";
gotoxy(17,4+(i*3));
cout<<"-----------------------------------------------";
}
for(i=0;i<=n-1;i++){
for(j=0;j<=n-1;j++){
gotoxy(19+(j*6),3+(i*3));
if(sc[i][j]==10)
cout<<"R ";
if(sc[i][j]==1)
cout<<"N ";
if(sc[i][j]==0)
cout<<"- ";
}
}
}
Aiutatemi