Draw visited cells in a different colour
This commit is contained in:
parent
cc43e870fe
commit
f4aa1bc01c
23
main.c
23
main.c
@ -51,9 +51,12 @@ static Display *dpy;
|
|||||||
static Window window;
|
static Window window;
|
||||||
static GC ctx;
|
static GC ctx;
|
||||||
static cell_t maze[GRID_SIZE][GRID_SIZE];
|
static cell_t maze[GRID_SIZE][GRID_SIZE];
|
||||||
|
static int bg_col, wall_col, visited_col;
|
||||||
|
|
||||||
static void draw_walls(void)
|
static void draw_walls(void)
|
||||||
{
|
{
|
||||||
|
XSetForeground(dpy, ctx, wall_col);
|
||||||
|
|
||||||
XFillRectangle(
|
XFillRectangle(
|
||||||
dpy, window, ctx, PX(MARGIN), PX(MARGIN), PX(GRID_SIZE + 2),
|
dpy, window, ctx, PX(MARGIN), PX(MARGIN), PX(GRID_SIZE + 2),
|
||||||
PX(WALL_THICKNESS));
|
PX(WALL_THICKNESS));
|
||||||
@ -80,7 +83,11 @@ static void draw_maze(void)
|
|||||||
|
|
||||||
for (int x = 0; x < GRID_SIZE; ++x) {
|
for (int x = 0; x < GRID_SIZE; ++x) {
|
||||||
for (int y = 0; y < GRID_SIZE; ++y) {
|
for (int y = 0; y < GRID_SIZE; ++y) {
|
||||||
if (maze[x][y].is_path)
|
if (!maze[x][y].is_path)
|
||||||
|
XSetForeground(dpy, ctx, wall_col);
|
||||||
|
else if (maze[x][y].visited)
|
||||||
|
XSetForeground(dpy, ctx, visited_col);
|
||||||
|
else
|
||||||
continue;
|
continue;
|
||||||
const int left = margin_px + PX(x);
|
const int left = margin_px + PX(x);
|
||||||
const int top = margin_px + PX(y);
|
const int top = margin_px + PX(y);
|
||||||
@ -149,15 +156,21 @@ int main(void)
|
|||||||
assert(dpy);
|
assert(dpy);
|
||||||
|
|
||||||
// Create window and configure graphics context
|
// Create window and configure graphics context
|
||||||
const int black = BlackPixel(dpy, DefaultScreen(dpy));
|
wall_col = BlackPixel(dpy, DefaultScreen(dpy));
|
||||||
const int white = WhitePixel(dpy, DefaultScreen(dpy));
|
bg_col = WhitePixel(dpy, DefaultScreen(dpy));
|
||||||
window = XCreateSimpleWindow(
|
window = XCreateSimpleWindow(
|
||||||
dpy, DefaultRootWindow(dpy), 0, 0, PX(WINDOW_SIZE), PX(WINDOW_SIZE),
|
dpy, DefaultRootWindow(dpy), 0, 0, PX(WINDOW_SIZE), PX(WINDOW_SIZE),
|
||||||
0, white, white);
|
0, bg_col, bg_col);
|
||||||
Atom del = XInternAtom(dpy, "WM_DELETE_WINDOW", false);
|
Atom del = XInternAtom(dpy, "WM_DELETE_WINDOW", false);
|
||||||
XSetWMProtocols(dpy, window, &del, 1);
|
XSetWMProtocols(dpy, window, &del, 1);
|
||||||
ctx = DefaultGC(dpy, DefaultScreen(dpy));
|
ctx = DefaultGC(dpy, DefaultScreen(dpy));
|
||||||
XSetForeground(dpy, ctx, black);
|
|
||||||
|
// Create colormap and allocate colour for visited cells
|
||||||
|
Colormap cm = XCreateColormap(
|
||||||
|
dpy, window, DefaultVisual(dpy, DefaultScreen(dpy)), AllocNone);
|
||||||
|
XColor xcol = { .red = 55555, .green = 10000, .blue = 10000 };
|
||||||
|
XAllocColor(dpy, cm, &xcol);
|
||||||
|
visited_col = xcol.pixel;
|
||||||
|
|
||||||
// Map window
|
// Map window
|
||||||
XSelectInput(dpy, window, StructureNotifyMask);
|
XSelectInput(dpy, window, StructureNotifyMask);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user