diff options
Diffstat (limited to 'share/hackvr/examples/dungen')
-rw-r--r-- | share/hackvr/examples/dungen/Makefile | 1 | ||||
-rwxr-xr-x | share/hackvr/examples/dungen/dungen | bin | 0 -> 17176 bytes | |||
-rw-r--r-- | share/hackvr/examples/dungen/dungen.c | 82 |
3 files changed, 83 insertions, 0 deletions
diff --git a/share/hackvr/examples/dungen/Makefile b/share/hackvr/examples/dungen/Makefile new file mode 100644 index 0000000..4420649 --- /dev/null +++ b/share/hackvr/examples/dungen/Makefile @@ -0,0 +1 @@ +dungen: dungen.c diff --git a/share/hackvr/examples/dungen/dungen b/share/hackvr/examples/dungen/dungen Binary files differnew file mode 100755 index 0000000..1fc1c76 --- /dev/null +++ b/share/hackvr/examples/dungen/dungen diff --git a/share/hackvr/examples/dungen/dungen.c b/share/hackvr/examples/dungen/dungen.c new file mode 100644 index 0000000..0ea4906 --- /dev/null +++ b/share/hackvr/examples/dungen/dungen.c @@ -0,0 +1,82 @@ +#include <stdio.h> + +#define ITERATIONS 16 + +//nsew +char *a[16]; + +char field[256]; +char nfield[256]; + +void print_field() { + int i; + printf("\x1b[H"); + for(i=0;i<(16*strlen(a[field[0]]))+1;i++) printf("#"); + for(i=0;i<256;i++) { + if(i%16 == 0) printf("#\n#"); + printf("%s",a[field[i]]); + } + printf("#\n"); + for(i=0;i<(16*strlen(a[field[0]]))+2;i++) printf("#"); + printf("\n"); +} + +void prune() {//remove paths into wall + int i; + memcpy(nfield,field,256);//make a copy just for comparison + for(i=0;i<256;i++) { + if(i%16 == 0) field[i] &= ~0x1;//remove all left exits at left of map + else if((field[i]&0x1) && !(nfield[i-1]&0x2)) field[i] &= ~0x1; + if(i%16 == 15) field[i] &= ~0x2;//remove all right exits at right of map. + else if((field[i]&0x2) && !(nfield[i+1]&0x1)) field[i] &= ~0x2; + if(i > 240) field[i] &= ~0x4; + else if((field[i]&0x4) && !(nfield[i+16]&0x8)) field[i] &= ~0x4; + if(i < 16) field[i] &= ~0x8; + else if((field[i]&0x8) && !(nfield[i-16]&0x4)) field[i] &= ~0x8; + } +} + +void grow() { + int i=0; + memcpy(nfield,field,256); + for(i=0;i<256;i++) { + if(random() % 2 == 0) { + if((field[i]&0x1) && !nfield[i-1] && i%16 != 0) nfield[i-1]=random()%16 | 0x2; + if((field[i]&0x2) && !nfield[i+1] && i%16 != 15) nfield[i+1]=random()%16 | 0x1; + if((field[i]&0x4) && !nfield[i+16] && i<240) nfield[i+16]=random()%16 | 0x8; + if((field[i]&0x8) && !nfield[i-16] && i>16) nfield[i-16]=random()%16 | 0x4; + } + } + memcpy(field,nfield,256); +} + +int main(int argc,char *argv[]) { + int i; + printf("\x1b[H\x1b[2J"); + srandom(time(0) * getpid()); + a[0x0]=" "; + a[0x1]="- "; + a[0x2]=" -"; + a[0x3]="---"; + a[0x4]=" . "; + a[0x5]="-. "; + a[0x6]=" .-"; + a[0x7]="-.-"; + a[0x8]=" ' "; + a[0x9]="-' "; + a[0xa]=" '-"; + a[0xb]="-'-"; + a[0xc]=" | "; + a[0xd]="-| "; + a[0xe]=" |-"; + a[0xf]="-|-"; + + field[7+16] = 0x4;//center top + for(i=0;i<ITERATIONS;i++) { + print_field(); + sleep(1); + grow(); + } + prune(); + print_field(); +} |