#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define WIDTH 100
#define HEIGHT 50
void print(char* arr)
{
int i;
int j;
for(i = 0; i < HEIGHT; i++)
{
for(j = 0; j < WIDTH; j++)
{
printf("%c",arr[i*WIDTH + j]);
}
printf("\n");;
}
}
void tree(int branchpos, int branchlen, int x, int y, char branchtyp, char* arr)
{
int r;
int i;
int dx;
int dy;
char ln;
char rn;
int lxo;
int lyo;
int mxo;
int myo;
int rxo;
int ryo;
char o[] = {'l','m','r'};
char ot;
if(arr[y*WIDTH + x] == ' ')
{
if(branchtyp == '|')
{
dx = 0;
dy = -1;
ln = '\\';
rn = '/';
lxo = -1;
lyo = 0;
mxo = 0;
myo = 0;
rxo = 1;
ryo = 0;
}
else if(branchtyp == '\\')
{
dx = -1;
dy = -1;
ln = '_';
rn = '|';
lxo = -2;
lyo = 0;
mxo = -1;
myo = 0;
rxo = 0;
ryo = 0;
}
else if(branchtyp == '/')
{
dx = 1;
dy = -1;
ln = '|';
rn = '-';
lxo = 0;
lyo = 0;
mxo = 1;
myo = 0;
rxo = 2;
ryo = 0;
}
else if(branchtyp == '_')
{
dx = -1;
dy = 0;
ln = '/';
rn = '\\';
lxo = 0;
lyo = 1;
mxo = -1;
myo = 0;
rxo = 0;
ryo = 0;
}
else if(branchtyp == '-')
{
dx = 1;
dy = 0;
ln = '/';
rn = '\\';
lxo = 0;
lyo = 0;
mxo = 1;
myo = 0;
rxo = 0;
ryo = 1;
}
if(branchpos < branchlen)
{
arr[y*WIDTH + x] = branchtyp;
tree(branchpos + 1, branchlen, x+dx, y+dy, branchtyp, arr);
}
else if(branchlen > 0)
{
for(i = 3; i > 1; i--)
{
r = rand() % 3;
ot = o[i];
o[i] = o[r];
o[r] = ot;
}
for(i = 0; i < 3; i++)
{
if(o[i] == 'l')
{
tree(0, branchlen - 2+ (rand()%3 - 1), x + lxo, y + lyo, ln, arr);
}
else if(o[i] == 'm' )
{
tree(0, branchlen - 1 + (rand()%3 - 1), x + mxo, y + myo, branchtyp, arr);
}
else if(o[i] == 'r')
{
tree(0, branchlen - 2+ (rand()%3 - 1), x + rxo, y + ryo, rn, arr);
}
}
}
else
{
arr[y*WIDTH + x] = branchtyp;
}
}
}
int main(int argc, char* argv[])
{
char arr[WIDTH*HEIGHT];
char*ptr;
int i;
if(argc == 1)
{
srand(time(NULL));
}
else
{
srand((unsigned int)strtol(argv[1],&ptr,10));
}
for(i = 0; i < WIDTH*HEIGHT; i++)
{
arr[i] = ' ';
}
tree(0, 7, WIDTH/2, HEIGHT - 1, '|', arr);
print(arr);
return (0);
}