Her er et lille stykke kode jeg har skrevet, det er naturligvis lang fra færdigt, men jeg har et par spørgsmål til hvordan det kan gøres, har nogle problemer der mangler løsninger osv.
#include <iostream>
#include <vector>
const int SIZE = 256;
struct cell {
bool xy: 1;
bool xz: 1;
bool yz: 1;
bool ac: 1;
};
std::vector<std::vector<std::vector<cell> > >GRID(SIZE,
std::vector<std::vector<cell> >(SIZE,
std::vector<cell>(SIZE)));
bool rand_bit() {
return rand() > (RAND_MAX / 2);
}
void new_grid() {
int x;
int y;
int z;
for (z = 0; z < SIZE; z++) {
for (y = 0; y < SIZE; y++) {
for (x = 0; x < SIZE; x++) {
GRID[x][y][z].xy = rand_bit();
GRID[x][y][z].xz = rand_bit();
GRID[x][y][z].xz = rand_bit();
}
}
}
}
int main() {
new_grid();
std::cout << "done!";
std::cin.get();
}
1)
Jeg har lavet en struct 'cell' med 4 boole variabler der hver fylder én bit, altså 4 bit total pr celle, nu forholder det sig sådan at selvom jeg reelt kun har brug for en halv byte pr celle, bruger den 1 byte. Om den bruger 8 eller 16 MB for en sådan 256^3 struktur, gør ikke den helt store forskel, men jeg kunne godt tænkte mig at få løst problemet alligevel hvis det kan lade sig gøre.
2)
I 'new_grid()' tildeler den værdier (0 eller 1) til til alle xy/xz/yz variablerne i cellerne. disse xy/xz/yz skal forstås som vægge i en 3d_labyrint; hvis værdien er 0 er der ingen væg og er den 1 er der en væg.
Det første problem er naturligvis at jeg har brug for en 'ikke pseudo' rand_bit(), men der er et lille problem, her på test stadiet fungerer denne fint nok.
Nu kommr den lumske del
Hver celle har 6 vægge. 3 af disse vægge er defineret i cellen, og de resterende vægge er defineret af de omkring liggende celler.
dvs.
celle xyz har væggene:
GRID[x][y][z].xy
GRID[x][y][z].xz
GRID[x][y][z].yz
GRID[x][y][z-1].xy
GRID[x][y-1][z].xz
GRID[x-1][y][z].yz
strukturen er uendelig/endelig hvilket vil sige hvis man skulle være så uheldig at befinde sig i 257,257,257, befinder man sig i hvirkeligheden i 1,1,1.
det er lidt kringle, men det virker.
Problemet består i at disse celler skal opfylde nogle krav:
De må ikke være lukkede, dvs. der skal være mindst én manglende væg pr celle.
Det skal være muligt at bevæge sig fra en given celle til en anden, uanset placering.
Dette er noget jeg grubler over.
3)
Jeg ønsker at høre en masse gpde idéer til forbedringer o.lign.
Jeg ønsker at høre om fejl og mangler.
Jeg ønsker en interessant diskution om hvorledes man kan/bør løse dette problem, det stykke kode jeg har postet er kun et oplæg, det kan meget vel gøres smartere.
4)
Jeg kan forestille mig at der måske er nogle der grubler over hvad meningen med galskaben er og det er jo naturligvis meningen at der skal skrives et grafisk interface med tiden og derefter kan jeg se adskillige muligheder for hvad det kan bruges til.
5)
I skal vide at jeg er nubegynder og faktisk ikke har været i gang i meget over en uge, jeg har dog lavet en del php scripts osv. men altså stadig en c++ n00b ;-)
Jeg er klar over at meget af dette ville tage sig rigtig godt ud i classes, men jeg har aldrig brug dem før og selv om jeg er igang med at læse på sagen, bliver jeg blot mere og mere forviret...
[Redigeret d. 08/02-06 17:12:02 af Felix Nielsen]