From abad63970f31855b1d7b5cb3bfefa64bf556b53b Mon Sep 17 00:00:00 2001 From: KikooDX Date: Wed, 2 Mar 2022 23:32:07 +0100 Subject: [PATCH] draw line --- inc/lzy.h | 34 ++++++++++++++++++++++++++++++++++ src/main.c | 19 +++++++++++++++---- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/inc/lzy.h b/inc/lzy.h index 516c073..57d1ee7 100644 --- a/inc/lzy.h +++ b/inc/lzy.h @@ -51,6 +51,7 @@ void LZY_DrawSetColor(uint8_t r, uint8_t g, uint8_t b); void LZY_DrawSetColorNone(void); int LZY_DrawClear(void); int LZY_DrawPoint(int x, int y); +int LZY_DrawLine(int x0, int y0, int x1, int y1); int LZY_DrawRect(int x, int y, unsigned int w, unsigned int h); int LZY_DrawFillRect(int x, int y, unsigned int w, unsigned int h); int LZY_DrawTile(unsigned int id, int x, int y); @@ -128,6 +129,39 @@ enum LZY_ScanCode { #define LZY_FIRST_CHR ' ' #endif +int LZY_DrawLine(int x0, int y0, int x1, int y1) { + int dx, dy, sx, sy, err, e2; + int rc = 0; + + dx = x1 - x0; + dx = (dx < 0) ? (-dx) : (dx); + dy = y1 - y0; + dy = (dy < 0) ? (dy) : (-dy); + sx = (x0 < x1) ? (1) : (-1); + sy = (y0 < y1) ? (1) : (-1); + err = dx + dy; + + for (;;) { + if (LZY_DrawPoint(x0, y0)) + rc = -1; + + if (x0 == x1 && y0 == y1) + break; + + e2 = 2 * err; + if (e2 >= dy) { + err += dy; + x0 += sx; + } + if (e2 <= dx) { + err += dx; + y0 += sy; + } + } + + return rc; +} + #ifdef FXCG50 #include #include diff --git a/src/main.c b/src/main.c index 452f9d4..4dc6607 100644 --- a/src/main.c +++ b/src/main.c @@ -27,16 +27,18 @@ int main(void) { LZY_MusicPlay(music, 0); do { + const int speed = 2; + /* update */ LZY_CycleEvents(); if (LZY_KeyDown(LZYK_LEFT)) - x--; + x -= speed; if (LZY_KeyDown(LZYK_RIGHT)) - x++; + x += speed; if (LZY_KeyDown(LZYK_UP)) - y--; + y -= speed; if (LZY_KeyDown(LZYK_DOWN)) - y++; + y += speed; /* draw */ LZY_DrawBegin(); @@ -58,6 +60,15 @@ int main(void) { } static void draw_player(int x, int y) { + const int cx = x + 8; + const int cy = y + 8; + if (LZY_DrawTile(14, x, y)) LZY_Log(LZY_GetError()); + + LZY_DrawSetColor(0x00, 0xff, 0xff); + LZY_DrawLine(0, 0, cx - 1, cy - 1); + LZY_DrawLine(395, 0, cx, cy - 1); + LZY_DrawLine(0, 223, cx - 1, cy); + LZY_DrawLine(395, 223, cx, cy); }