if (SDL_Init(SDL_INIT_VIDEO) < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
\"Failed to init %s\",
SDL_GetError());
" (error "failed to SDL_Init(video)") "
}
if (SDL_CreateWindowAndRenderer(640,480,SDL_WINDOW_RESIZABLE,
&window, &renderer)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
\"Failed to create w & r%s\",
SDL_GetError());
" (error "failed to create window and renderer") "
}
quitted = 0;
for (;;) {"
"
while(SDL_PollEvent(&e))
if (e.type == SDL_QUIT) quitted = 1;
else if (e.type == SDL_KEYDOWN)
switch (e.key.keysym.sym) {
case SDLK_q:
quitted = 1;
break;
}
if (quitted) break;
(defun draw-lines-from (fun rgb) "
Calls SDL_SetRenderDrawColor and
SDL_RenderDrawLine
with rgb and on a list from fun.
"
(lambda ()
(loop
for (x1 y1 x2 y2) = (funcall fun)
for (r g b) = rgb
while x1
do (ffi:c-inline (r g b 255) (:int :int :int :int) nil
"SDL_SetRenderDrawColor(renderer, #0, #1, #2, #3)"
:one-liner t)
do (ffi:c-inline (x1 y1 x2 y2)
(:int :int :int :int) nil
"SDL_RenderDrawLine(renderer, #0, #1, #2, #3)"
:one-liner t))))
(defun xs&+s () "
I was thinking of naughts and crosses, but ultimately
I'm just drawing a grid.
"
(let* ((horiz-lines
(draw-lines-from
(coord-liner 1 5 50 1 4 50 :transpose nil)
'(255 0 0)))
(verti-lines
(draw-lines-from
(coord-liner 1 5 50 1 4 50 :transpose t)
'(255 255 0)))
(funs (list horiz-lines verti-lines)))
(game () () funs)))