Skip to content

Instantly share code, notes, and snippets.

@sangohan
Forked from munificent/generate.c
Created March 3, 2019 03:59
Show Gist options
  • Select an option

  • Save sangohan/bb2a0e9819241cbde06dbfcee2417c42 to your computer and use it in GitHub Desktop.

Select an option

Save sangohan/bb2a0e9819241cbde06dbfcee2417c42 to your computer and use it in GitHub Desktop.

Revisions

  1. @munificent munificent revised this gist Mar 2, 2019. 1 changed file with 8 additions and 8 deletions.
    16 changes: 8 additions & 8 deletions generate.c
    Original file line number Diff line number Diff line change
    @@ -5,14 +5,14 @@
    #define l(a, b, c, d) for (i y=a;y\
    <b; y++) for (int x = c; x < d; x++)
    typedef int i;const i H=40;const i W
    =80;i m[H][W];i g(i x) {r rand()%x;}
    void cave(i s){i w=g(10)+5;i h=g(6)+
    3;i t=g(W-w-2)+1;i u=g(H-h-2)+1;l(u-
    1,u+h+2,t-1, t+w+2)if(m[y
    ][x]=='.') r;i d=0;
    i e,f; if(!s){l(u -1,u+h
    +2,t-1 ,t+w+2){i s=x<t|| x>t+
    w; i t=y<u|| y> u+h;
    =80;i m[40][80];i g(i x){r rand()%x;
    }void cave(i s){i w=g(10)+5;i h=g(6)
    +3;i t=g(W-w-2)+1;i u=g(H-h-2)+1;l(u
    -1,u+h+2,t-1 ,t+w+2)if(m[
    y][x]=='.' )r;i d=0
    ;i e,f ;if(!s){l( u-1,u+
    h+2,t- 1,t+w+2){i s=x<t ||x>t
    +w;i t=y<u|| y> u+h;
    if(s ^t&& m[ y]
    [x ]=='#' ){d++; if(g (d
    ) ==0) e=x,f=y; }}if (d
  2. @munificent munificent created this gist Mar 2, 2019.
    33 changes: 33 additions & 0 deletions generate.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    #include <time.h> // Robert Nystrom
    #include <stdio.h> // @munificentbob
    #include <stdlib.h> // for Ginny
    #define r return // 2008-2019
    #define l(a, b, c, d) for (i y=a;y\
    <b; y++) for (int x = c; x < d; x++)
    typedef int i;const i H=40;const i W
    =80;i m[H][W];i g(i x) {r rand()%x;}
    void cave(i s){i w=g(10)+5;i h=g(6)+
    3;i t=g(W-w-2)+1;i u=g(H-h-2)+1;l(u-
    1,u+h+2,t-1, t+w+2)if(m[y
    ][x]=='.') r;i d=0;
    i e,f; if(!s){l(u -1,u+h
    +2,t-1 ,t+w+2){i s=x<t|| x>t+
    w; i t=y<u|| y> u+h;
    if(s ^t&& m[ y]
    [x ]=='#' ){d++; if(g (d
    ) ==0) e=x,f=y; }}if (d
    == 0)r; }l(u-1,u +h+2 ,t
    -1 ,t+w +2){i s= x< t ||
    x> t+w; i t= y<u ||y> u+
    h; m[y] [x]= s &&t? '!'
    :s^t ?'#' :'.'
    ;}if (d>0)m [f][
    e]=g(2 )?'\'':'+';for(i j=0;j<(s?
    1:g(6) +1);j++)m[g(h)+u][g(w)
    +t]=s?'@' :g(4) ==0?
    '$':65+g(62) ;}i main(i
    argc, const char* argv[]) {srand((i)
    time(NULL));l(0, H, 0,W)m[y][x]=' ';
    for(i j=0;j<1000;j++)cave(j==0);l(0,
    H,0,W) {i c=m[y][x]; putchar(c=='!'?
    '#':c);if(x==W-1)printf("\n");}r 0;}