Skip to content

Instantly share code, notes, and snippets.

@morganwilde
Created June 6, 2015 10:59
Show Gist options
  • Save morganwilde/40b363b94fb8b54ec783 to your computer and use it in GitHub Desktop.
Save morganwilde/40b363b94fb8b54ec783 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
typedef struct Grid {
char *grid;
int width;
int height;
} Grid;
Grid *createGrid(int length)
{
Grid *grid = malloc(sizeof(Grid));
grid->width = length + 1;
grid->height = length;
grid->grid = malloc((grid->width * grid->height + 1) * sizeof(char));
int v;
int h;
for (v = 0; v < grid->height; v++) {
for (h = 0; h < (grid->width - 1); h++) {
grid->grid[v * grid->width + h] = ' ';
}
grid->grid[(v + 1) * grid->width - 1] = '\n';
}
grid->grid[grid->height * grid->width] = '\0';
return grid;
}
void printGrid(Grid *grid)
{
printf("%s", grid->grid);
}
void drawPoint(Grid *grid, int x, int y)
{
grid->grid[y * (grid->width) + x] = '*';
}
void drawLine(Grid *grid, int x1, int y1, int x2, int y2)
{
int deltaX = x2 - x1;
int deltaY = y2 - y1;
int i;
if (deltaX != 0) {
if (deltaX > 0) {
for (i = x1; i <= x2; i++) {
drawPoint(grid, i, y1);
}
} else {
for (i = x1; i >= x2; i--) {
drawPoint(grid, i, y1);
}
}
} else {
if (deltaY > 0) {
for (i = y1; i <= y2; i++) {
drawPoint(grid, x1, i);
}
} else {
for (i = y1; i >= y2; i--) {
drawPoint(grid, x1, i);
}
}
}
}
typedef enum Direction {
UP,
RIGHT,
DOWN,
LEFT
} Direction;
void drawSpiral(Grid *grid, int length)
{
int i;
int x1 = 0;
int y1 = 0;
int x2;
int y2;
Direction direction = RIGHT;
for (i = length - 1; i > 0; i--) {
if (direction == RIGHT) {
x2 = x1 + i;
y2 = y1;
} else if (direction == DOWN) {
x2 = x1;
y2 = y1 + i;
} else if (direction == LEFT) {
x2 = x1 - i;
y2 = y1;
} else if (direction == UP) {
x2 = x1;
y2 = y1 - i;
}
drawLine(grid, x1, y1, x2, y2);
x1 = x2;
y1 = y2;
direction = (direction + 1) % 4;
}
}
int main()
{
Grid *grid = createGrid(32);
//printGrid(grid);
//drawSpiral(grid, 12);
/*
drawPoint(grid, 0, 0);
drawPoint(grid, grid->width - 2, 0);
drawPoint(grid, 0, grid->height - 1);
drawPoint(grid, grid->width - 2, grid->height - 1);
*/
/*
drawLine(grid, 0, 0, 3, 0);
drawLine(grid, 3, 3, 0, 3);
drawLine(grid, 0, 0, 0, 3);
drawLine(grid, 3, 0, 3, 3);
*/
drawSpiral(grid, 32);
printGrid(grid);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment