diff options
| author | epoch <epoch@hacking.allowed.org> | 2019-06-10 02:24:22 -0500 | 
|---|---|---|
| committer | epoch <epoch@hacking.allowed.org> | 2019-06-10 02:24:22 -0500 | 
| commit | ad8968436862baaa452f8da2b779aae694b1971e (patch) | |
| tree | 47f7a908e14e034632076f613bcfa345b00f7bfe /share | |
| parent | ac8746f57ca9ef5baa953c7a2ff4e4128f649f9a (diff) | |
| download | hackvr-ad8968436862baaa452f8da2b779aae694b1971e.tar.gz hackvr-ad8968436862baaa452f8da2b779aae694b1971e.zip | |
added a simple dungeon generator that might be used for something eventually
Diffstat (limited to 'share')
| -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/dungenBinary files differ new 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(); +} | 
