M
ich bin mir jetzt nicht sicher ob es das behoben hat aber
bool pourwater(unsigned char(* wuerfel)[20][20], unsigned char x, unsigned char y, unsigned char z)
{
if (z==18)
{
if(wuerfel[x][y][z+1]==0) // wenn wir in den vorletzten ebene sind und der quader drunter leer, die sache beenden
{return true;}
}
for(unsigned char y2=y; y2<=19; y2++)
{
for (unsigned char x2=x; x2<=19;x2++)
{
if (wuerfel[x2][y2][z]==0)
{
wuerfel[x2][y2][z]=3; // diesen quader als durchsucht merken um zirkel zu vermeiden
if (z<19)
if (wuerfel[x2][y2][z+1]==0)
if (pourwater(wuerfel,x2,y2,z+1))
return true;
if (x2<19)
if (wuerfel[x2+1][y2][z]==0)
if (pourwater(wuerfel,x2+1,y2,z))
return true;
if (y2>0)
if (wuerfel[x2][y2-1][z]==0)
if (pourwater(wuerfel,x2,y2-1,z))
return true;
if (x2>0)
if (wuerfel[x2-1][y2][z]==0)
if (pourwater(wuerfel,x2-1,y2,z))
return true;
if (y2<19)
if (wuerfel[x2][y2+1][z]==0)
if (pourwater(wuerfel,x2,y2+1,z))
return true;
if (z>0)
if (wuerfel[x2][y2][z-1]==0)
if (pourwater(wuerfel,x2,y2,z-1))
return true;
} // end if
if (z!=0) break;
} //end x schleifel
if (z!=0) break;
} //end y schleife
return false;
}
so schauts jetzt aus. die breaks müssten es daran hindern weiterzusuchen wenn es sich nicht in der obersten ebene befindet. findet es einen durchgang kommt es ja gar nicht so weit... ich hab mal einen probelauf mit 70% gemacht und es kamen bei 1000 würfeln 13,6% raus (wasserdurchlässig). aber ich mach mal nen neuen thread in "rund um die programmierung" auf, denn das hier hat absolut nichts mit access violations zu tun.