summaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2019-03-05 22:40:02 -0500
committerAndrew Opalach <andrew@akon.city> 2019-03-05 22:40:02 -0500
commit374653b4bea2c6296e695f86329d81a1985552ae (patch)
tree6de5614fc592fe270ebea6245f3eaf10f7bf26a4 /frontend
parentb166055bb14f54dc1169891956d998e2248713ce (diff)
downloadcetris-374653b4bea2c6296e695f86329d81a1985552ae.tar.gz
cetris-374653b4bea2c6296e695f86329d81a1985552ae.tar.bz2
cetris-374653b4bea2c6296e695f86329d81a1985552ae.zip
add sdl_ui
Diffstat (limited to 'frontend')
-rw-r--r--frontend/sdl/block.bmpbin0 -> 49206 bytes
-rw-r--r--frontend/sdl/sdl_ui.c96
2 files changed, 96 insertions, 0 deletions
diff --git a/frontend/sdl/block.bmp b/frontend/sdl/block.bmp
new file mode 100644
index 0000000..48f351c
--- /dev/null
+++ b/frontend/sdl/block.bmp
Binary files differ
diff --git a/frontend/sdl/sdl_ui.c b/frontend/sdl/sdl_ui.c
new file mode 100644
index 0000000..012255a
--- /dev/null
+++ b/frontend/sdl/sdl_ui.c
@@ -0,0 +1,96 @@
+#include <SDL2/SDL.h>
+
+#include "cetris.h"
+
+#define W 360
+#define H 640
+
+struct cetris_game g;
+
+SDL_Renderer* render;
+SDL_Texture* block;
+SDL_Event e;
+
+typedef struct {
+ int r;
+ int g;
+ int b;
+} sdl_color;
+
+sdl_color colors[8] = {
+ {0, 0, 0}, // Black
+ {127,219,255}, // Aqua
+ {61,153,112}, // Olive
+ {177,13,201}, // Purple
+ {240,18,190}, // Fuchsia
+ {255,133,27}, // Orange
+ {0,31,63}, // Navy
+ {255,220,0} // Yellow
+};
+
+void setup() {
+ SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO);
+ SDL_Window* win = SDL_CreateWindow("Cetris", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, W, H, SDL_WINDOW_SHOWN);
+ render = SDL_CreateRenderer(win, -1, SDL_RENDERER_PRESENTVSYNC);
+ if (!render) exit(fprintf(stderr, "[Error] Could not create SDL renderer\n"));
+ SDL_Surface* s = SDL_LoadBMP("block.bmp");
+ block = SDL_CreateTextureFromSurface(render, s);
+ SDL_FreeSurface(s);
+}
+
+void draw_stuff() {
+ SDL_RenderClear(render);
+
+ SDL_SetRenderDrawColor(render, 255, 255, 255, 124);
+ for (int x = 0; x < BOARD_X + 1; x++) {
+ SDL_RenderDrawLine(render, 1 + (x * 25), 1, 1 + (x * 25), 500);
+ }
+ for (int y = 0; y < BOARD_Y - BOARD_VISABLE + 1; y++) {
+ SDL_RenderDrawLine(render, 1, 1 + (y * 25), 250, 1 + (y * 25));
+ }
+ SDL_SetRenderDrawColor(render, 0, 0, 0, 255);
+
+ sdl_color c;
+ SDL_Rect r = {0, 0, 25, 25};
+ for (int x = 0; x < BOARD_X; x++) {
+ for (int y = BOARD_VISABLE; y < BOARD_Y; y++) {
+ if (g.board[x][y].occupied) {
+ c = colors[g.board[x][y].c];
+ SDL_SetTextureColorMod(block, c.r, c.g, c.b);
+ r.x = x * 25;
+ r.y = (y - BOARD_VISABLE) * 25;
+ SDL_RenderCopy(render, block, NULL, &r);
+ }
+ }
+ }
+ SDL_RenderPresent(render);
+}
+
+int main(void) {
+ init_game(&g);
+ setup();
+ for(;;) {
+ while(SDL_PollEvent(&e)) {
+ switch (e.type) {
+ case SDL_QUIT:
+ exit(0);
+ case SDL_KEYDOWN:
+ switch (e.key.keysym.sym) {
+ case SDLK_LEFT:
+ move_left(&g); break;
+ case SDLK_RIGHT:
+ move_right(&g); break;
+ case SDLK_DOWN:
+ move_down(&g); break;
+ case SDLK_SPACE:
+ move_hard_drop(&g); break;
+ case SDLK_UP:
+ rotate_clockwise(&g); break;
+ }
+ }
+ }
+ update_game_tick(&g);
+ draw_stuff();
+ SDL_Delay(1000 / CETRIS_HZ);
+ }
+}