/***************************************************************************************/
//
// THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE.
//
/***************************************************************************************/

#include <stdio.h>
#include <conio.h>
#include <stdlig.h>
#include <math.h>
#include <graphics.h>

void DrawSierpinski(void);

void main(void)
{
	int gd=VGA;
	int gm=VGAHI;
	initgraph(&gd, &gm, "\\tc\\bgi");

	DrawSierpinski();
	getch();
}

void DrawSierpinski(void)
{
	char Direct;
	int iterate;
	unsigned int x1, y1, x2, y2;

	x1 = x2 = 320;
	y1 = y2 = 0;

	for(iterate = 0; iterate < 10000; iterate++)
	{
		Direct = random(3);
		
		if(Direct == 0)
		{
			x1 = (x2 + 320) / 2;
			y1 = (y2 + 0) / 2;	
		}
		else if(Direct == 1)
		{
			x1 = (x2 + 0) / 2;
			y1 = (y2 + 480) / 2;
		}
		else if(Direct == 2)
		{
			x1 = (x2 + 640) / 2;	
			y1 = (y2 + 480) / 2;
		}
		putpixel(x1, y1, WHITE);

		x2 = x1;
		y2 = y1;
	}
}
