From c57a6f97ae0684f3e709535314fd8f3143204ccb Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Wed, 2 Jun 2021 21:15:15 +0200 Subject: [PATCH] SysError --- Plague.g1a | Bin 89792 -> 88716 bytes src/core.h | 5 +++-- src/display_engine.c | 6 +++--- src/epidemic_engine.c | 40 +++++++++++++++++----------------------- src/epidemic_engine.h | 2 +- src/main.c | 6 ++++++ 6 files changed, 30 insertions(+), 29 deletions(-) diff --git a/Plague.g1a b/Plague.g1a index fefbe92927ad26935dde88007c50e1e2a14256e5..8fd3ccbdd441a91c7f9699cf1a3bc7c442cc36de 100644 GIT binary patch delta 6504 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 diff --git a/src/core.h b/src/core.h index 196644d..66956ed 100644 --- a/src/core.h +++ b/src/core.h @@ -14,8 +14,9 @@ // Number of planes on screen #define NB_PLANES 5 -struct grid { - +struct grid +{ + // 64, 128 int height, width; // Use grid.data[i + j * grid.width] instead of grid.data[i][j] diff --git a/src/display_engine.c b/src/display_engine.c index b511339..e58d63f 100644 --- a/src/display_engine.c +++ b/src/display_engine.c @@ -8,7 +8,7 @@ void display_background(const int background) { extern const bopti_image_t img_bground; - dsubimage(0, 0, &img_bground, 0, 65 * (background - 1), 128, 64, DIMAGE_NONE); + if (background != 6) dsubimage(0, 0, &img_bground, 0, 65 * (background - 1), 128, 64, DIMAGE_NONE); } @@ -29,7 +29,7 @@ void display_foreground(const int background, const struct game *current_game) { for (int j = 0; j < current_game->grid.height; j ++) { - if (current_game->grid.data[i + j * current_game->grid.width] != 0 && world[i][j] != 0) dpixel(i, j, C_BLACK); + if (current_game->grid.data[i + j * current_game->grid.width] == 1 && world[i][j] != 0) dpixel(i, j, C_BLACK); } } @@ -47,7 +47,7 @@ void display_foreground(const int background, const struct game *current_game) { for (int j = 0; j < 50; j ++) { - if (current_game->grid.data[i + j * current_game->grid.width] != 0 && world[i][j] != 0) dpixel(i, j, C_BLACK); + if (current_game->grid.data[i + j * current_game->grid.width] == 1 && world[i][j] != 0) dpixel(i, j, C_BLACK); } } diff --git a/src/epidemic_engine.c b/src/epidemic_engine.c index 93c8790..d15b50b 100644 --- a/src/epidemic_engine.c +++ b/src/epidemic_engine.c @@ -2,14 +2,10 @@ #include "epidemic_engine.h" -#include -#include - - int grid_get(const struct grid epidemic_grid, const int i, const int j) { - if (i < 0 || j < 0 || i >= epidemic_grid.width || j >= epidemic_grid.height) return epidemic_grid.data[i + j * epidemic_grid.width]; - return 0; + if (i < 0 || j < 0 || i >= epidemic_grid.width || j >= epidemic_grid.height) return 0; + else return epidemic_grid.data[i + j * epidemic_grid.width]; } @@ -18,43 +14,41 @@ bool can_become_infected(const struct grid epidemic_grid, const int mutations_se extern const unsigned int world[64][128]; // In case of water, low or high temperature - if (world[j][i] == 0 && mutations_selected[2] != 3) return false; + /*if (world[j][i] == 0 && mutations_selected[2] != 3) return false; if (world[j][i] == 1 && mutations_selected[1] != 0 && mutations_selected[1] != 4) return false; - if (world[j][i] == 3 && mutations_selected[1] != 1 && mutations_selected[1] != 4) return false; + if (world[j][i] == 3 && mutations_selected[1] != 1 && mutations_selected[1] != 4) return false;*/ // Test cases around return grid_get(epidemic_grid, i - 1, j) == 1 || grid_get(epidemic_grid, i + 1, j) == 1 || grid_get(epidemic_grid, i, j - 1) == 1 || grid_get(epidemic_grid, i, j + 1) == 1; } -bool bernoulli(const float p) +bool bernoulli(const int p) { - return (rand() / 2147483647) <= p; + return (rand() % 101) <= p; } void epidemic_simulation(struct game *current_game) { srand(15510); - double contagion_rate = current_game->contagion / 100; - double lethality_rate = current_game->lethality / 100; - double healed_rate = current_game->research / current_game->limit; - dclear(C_WHITE); - dprint(5, 5, C_BLACK, "HR:%lf", healed_rate); - dupdate(); - getkey(); + int healed_rate = 100 * (current_game->research / current_game->limit); for (int i = 0; i < current_game->grid.width; i ++) { for (int j = 0; j < current_game->grid.height; j ++) { + current_game->grid.data[i + j * current_game->grid.width] = 1; + + /* switch (current_game->grid.data[i + j * current_game->grid.width]) { // Healthy - case 0: - if (can_become_infected(current_game->grid, current_game->mutations_selected, i, j) - && bernoulli(contagion_rate)) + case 0: + + // Become infected + if (can_become_infected(current_game->grid, current_game->mutations_selected, i, j) && bernoulli(current_game->contagion)) { current_game->grid.data[i + j * current_game->grid.width] = 1; current_game->humans[0] --; @@ -74,15 +68,15 @@ void epidemic_simulation(struct game *current_game) } // Become dead - else if (bernoulli(lethality_rate)) + else if (bernoulli(current_game->lethality)) { current_game->grid.data[i + j * current_game->grid.width] = 3; current_game->humans[1] --; current_game->humans[3] ++; } break; - } + }*/ } } -} \ No newline at end of file +} diff --git a/src/epidemic_engine.h b/src/epidemic_engine.h index b217ff5..a2cdd80 100644 --- a/src/epidemic_engine.h +++ b/src/epidemic_engine.h @@ -10,7 +10,7 @@ bool can_become_infected(const struct grid epidemic_grid, const int mutations_selected[3], const int i, const int j); // bernoulli : simulate a random event -bool bernoulli(const float p); +bool bernoulli(const int p); // epidemic_simulation : simulate the propagation of the virus void epidemic_simulation(struct game *current_game); diff --git a/src/main.c b/src/main.c index a59da4b..bbc5f77 100644 --- a/src/main.c +++ b/src/main.c @@ -67,6 +67,12 @@ int main(void) /* allocate memory */ current_game.grid.data = calloc(current_game.grid.width * current_game.grid.height, sizeof(uint8_t)); + if (current_game.grid.data == NULL) + { + const char *msg[5] = {"CALLOC", "FAILED", "", "", ""}; + message(msg); + } + current_game.grid.data[95 + 20 * current_game.grid.width] = 1; current_game.humans[0] = (current_game.grid.width * current_game.grid.height) - 1;