mineur/main.c

158 lines
4.7 KiB
C
Raw Normal View History

2024-03-11 12:43:20 +01:00
#include "raylib.h"
2024-03-11 17:01:03 +01:00
char game[6][6] = {"001X10",
"111110",
"X20111",
"X201X1",
"110111",
"000000",
};
2024-03-11 12:43:20 +01:00
static inline int min(int a, int b) {
return a < b ? a : b;
}
2024-03-11 16:43:17 +01:00
static inline int max(int a, int b) {
return a > b ? a : b;
}
2024-03-11 12:43:20 +01:00
int screen_width = 500;
int screen_height = 550;
Rectangle menu;
int grid_len = 0;
int nb_cell = 16;
Rectangle grid = {0};
2024-03-11 16:43:17 +01:00
Image tile_image_orig = {0};
Texture tile_texture = {0};
Image tile_hover_image_orig = {0};
Texture tile_hover_texture = {0};
2024-03-11 12:43:20 +01:00
Image mine_image_orig = {0};
Texture mine_texture = {0};
void screen_resize_handle(void) {
screen_width = GetScreenWidth();
screen_height = GetScreenHeight();
menu.width = screen_width;
grid_len = min(screen_width, screen_height - menu.height);
2024-03-11 16:43:17 +01:00
grid = (Rectangle){
(screen_width - grid_len) / 2,
screen_height - grid_len,
grid_len, grid_len
};
Image tile_copy = ImageCopy(tile_image_orig);
ImageResize(&tile_copy, grid.width/nb_cell, grid.height/nb_cell);
tile_texture = LoadTextureFromImage(tile_copy);
Image tile_hover_copy = ImageCopy(tile_hover_image_orig);
ImageResize(&tile_hover_copy, grid.width/nb_cell, grid.height/nb_cell);
tile_hover_texture = LoadTextureFromImage(tile_hover_copy);
2024-03-11 12:43:20 +01:00
Image mine_copy = ImageCopy(mine_image_orig);
ImageResize(&mine_copy, grid.width/nb_cell, grid.height/nb_cell);
mine_texture = LoadTextureFromImage(mine_copy);
}
int main(void) {
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
menu = (Rectangle){0, 0, screen_width, screen_height - screen_width};
2024-03-11 16:43:17 +01:00
tile_image_orig = LoadImage("ressources/tile.png");
tile_hover_image_orig = LoadImage("ressources/tile_hover.png");
2024-03-11 12:43:20 +01:00
mine_image_orig = LoadImage("ressources/mine.png");
InitWindow(screen_width, screen_height, "mineur");
2024-03-11 16:43:17 +01:00
SetTargetFPS(60);
2024-03-11 12:43:20 +01:00
screen_resize_handle();
while (!WindowShouldClose()) {
if (IsWindowResized())
screen_resize_handle();
BeginDrawing();
{
2024-03-11 16:43:17 +01:00
ClearBackground(BLACK);
2024-03-11 12:43:20 +01:00
DrawRectangleRec(menu, RED);
2024-03-11 16:43:17 +01:00
DrawRectangleRec(grid, (Color) {
.r = 0xFF, .g = 0xDA, .b = 0x2E, .a = 255
});
2024-03-11 12:43:20 +01:00
2024-03-11 17:01:03 +01:00
#if 0
2024-03-11 12:43:20 +01:00
for (int x=0; x<nb_cell; x++) {
for (int y=0; y<nb_cell; y++) {
2024-03-11 16:43:17 +01:00
DrawTexture(
tile_texture,
grid.x + grid.width/nb_cell * x,
grid.y + grid.height/nb_cell * y,
WHITE
);
2024-03-11 12:43:20 +01:00
}
}
2024-03-11 17:01:03 +01:00
#else
for (int x=0; x<6; x++) {
for (int y=0; y<6; y++) {
switch (game[x][y]) {
default:
case '0':
DrawTexture(
tile_texture,
grid.x + grid.width/nb_cell * x,
grid.y + grid.height/nb_cell * y,
WHITE
);
break;
case '1':
case '2':
DrawTexture(
tile_hover_texture,
grid.x + grid.width/nb_cell * x,
grid.y + grid.height/nb_cell * y,
WHITE
);
break;
case 'X':
DrawTexture(
mine_texture,
grid.x + grid.width/nb_cell * x,
grid.y + grid.height/nb_cell * y,
WHITE
);
break;
}
}
}
#endif
2024-03-11 16:43:17 +01:00
int mouse_x = GetMouseX();
int mouse_y = GetMouseY();
int grid_x = (int) grid.x;
int grid_y = (int) grid.y;
2024-03-11 17:01:03 +01:00
// boundary
2024-03-11 16:43:17 +01:00
mouse_x = max(mouse_x, grid_x);
2024-03-11 17:01:03 +01:00
mouse_x = min(mouse_x, grid_x + grid.width - (grid_len/nb_cell));
2024-03-11 16:43:17 +01:00
mouse_y = max(mouse_y, grid_y);
2024-03-11 17:01:03 +01:00
mouse_y = min(mouse_y, grid_y + grid.height - (grid_len/nb_cell));
2024-03-11 16:43:17 +01:00
2024-03-11 17:01:03 +01:00
// remove extra
mouse_x -= (mouse_x - grid_x) % (grid_len/nb_cell);
mouse_y -= (mouse_y - grid_y) % (grid_len/nb_cell);
2024-03-11 16:43:17 +01:00
if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) {
DrawTexture(mine_texture, mouse_x, mouse_y, WHITE);
} else {
DrawTexture(tile_hover_texture, mouse_x, mouse_y, WHITE);
}
2024-03-11 12:43:20 +01:00
}
EndDrawing();
}
CloseWindow();
return 0;
}