8#define SNAKE_INITIAL_LENGTH 50 - 1
9#define SNAKE_UNIT_LENGTH 5
12#define TILE_COLUMNS 32
13#define TILE_DIMENSION 60
15using std::pair, std::optional, std::nullopt;
72 static const size_t n_frames = 17;
73 const size_t frame_apple_disappear = 7;
74 const char* explosion_sound_file =
"assets/explode.mp3";
75 raylib::Sound explosion_sound;
76 const char* frames[n_frames] = {
77 "assets/explosion/0.png",
78 "assets/explosion/1.png",
79 "assets/explosion/2.png",
80 "assets/explosion/3.png",
81 "assets/explosion/4.png",
82 "assets/explosion/5.png",
83 "assets/explosion/6.png",
84 "assets/explosion/7.png",
85 "assets/explosion/8.png",
86 "assets/explosion/9.png",
87 "assets/explosion/10.png",
88 "assets/explosion/11.png",
89 "assets/explosion/12.png",
90 "assets/explosion/13.png",
91 "assets/explosion/14.png",
92 "assets/explosion/15.png",
93 "assets/explosion/16.png",
96 raylib::Texture2D explosion_animation[n_frames];
98 double time_per_frame;
100 size_t current_frame = 0;
120 const Color text_color = WHITE;
122 const char* heart_texture_file =
"assets/heart.png";
123 raylib::Texture2D heart_texture;
171 void draw_question(raylib::Vector2 pos, raylib::Font* game_font, Color color);
174 optional<Food>
check_collision(raylib::Vector2 head_location,
float head_radius);
183 const uint probability_addsubtr_easy = 30;
184 const uint probability_addsubtr_hard = 30;
185 const uint probability_multdiv_easy = 10;
186 const uint probability_multdiv_hard = 10;
188 const uint probability_powerssqrt_easy = 15;
189 const uint probability_powerssqrt_hard = 5;
191 const Color food_color = WHITE;
192 raylib::Font* game_font;
201 void init(raylib::Font* game_font);
219 const raylib::Vector2 lives_pos = {0, 10};
220 const raylib::Vector2 pts_pos = {330, 3};
221 const raylib::Vector2 question_pos = {815, 3};
222 const raylib::Vector2 snake_length_pos = {1400, 3};
223 const raylib::Vector2 answer_food_tex_pos = {1000, -2};
225 const char* apple_texture_file =
"assets/apple.png";
226 const char* bad_apple_texture_file =
"assets/apple_bad.png";
227 const char* pie_texture_file =
"assets/pie.png";
228 const char* golden_pie_texture_file =
"assets/golden_pie.png";
230 raylib::Texture2D apple_texture;
231 raylib::Texture2D bad_apple_texture;
232 raylib::Texture2D pie_texture;
233 raylib::Texture2D golden_pie_texture;
235 const Color math_question_color = ORANGE;
236 const Color math_feedback_color_correct = GREEN;
237 const Color math_feedback_color_wrong = ORANGE;
240 const float min_statusbar_pos_y = -80;
243 const int pos_y = -5;
247 const char* texture_file =
"assets/statusbar.png";
248 raylib::Texture2D texture;
250 bool is_falling =
false;
255 raylib::Font* game_font;
262 raylib::Vector2
pos = {0, 0};
292 const Color snake_color = Color { .r = 87, .g = 141, .b = 237, .a = 255 };
293 const Color snake_color_pattern = Color { .r = 255, .g = 237, .b = 165, .a = 255 };
295 const char* turn_sound_file =
"assets/turn.mp3";
296 raylib::Sound turn_sound;
297 raylib::Sound* lose_sound;
300 vector<Vector2> points;
307 optional<Direction> turn_queue;
310 const char* texture_snake_head_u =
"assets/snake_head_u.png";
311 const char* texture_snake_head_d =
"assets/snake_head_d.png";
312 const char* texture_snake_head_l =
"assets/snake_head_l.png";
313 const char* texture_snake_head_r =
"assets/snake_head_r.png";
314 raylib::Texture2D snake_head_u;
315 raylib::Texture2D snake_head_d;
316 raylib::Texture2D snake_head_l;
317 raylib::Texture2D snake_head_r;
321 bool check_collision_self();
325 bool check_collision_corners();
328 void check_collision_food();
338 bool try_check_collision =
false;
358 void init(raylib::Sound* lose_sound,
bool* play_bgmusic);
370 const char* dead_crash_wall_file =
"assets/dead_crash_wall.png";
371 const char* dead_crash_self_file =
"assets/dead_crash_self.png";
372 const char* dead_bad_food_file =
"assets/dead_bad_food.png";
373 const char* ground_texture_file =
"assets/ground.png";
374 const char* ground_texture_apple_file =
"assets/interlude_animation/37.png";
376 const char* bad_apple_sound_file =
"assets/wrong.mp3";
377 const char* correct_apple_sound_file =
"assets/crunch.mp3";
378 const char* heavenly_choir_sound_file =
"assets/heavenly-choir.mp3";
379 const char* lose_sound_file =
"assets/lose.mp3";
380 raylib::Sound bad_apple_sound;
381 raylib::Sound correct_apple_sound;
382 raylib::Sound heavenly_choir_sound;
383 raylib::Sound lose_sound;
385 const size_t dead_popup_dimension_y = 587;
386 const size_t dead_popup_dimension_x = 970;
391 raylib::Texture2D dead_crash_wall_texture;
392 raylib::Texture2D dead_crash_self_texture;
393 raylib::Texture2D dead_bad_food_texture;
394 raylib::Texture2D ground_texture;
395 raylib::Texture2D ground_texture_apple;
396 bool is_game_started =
false;
401 raylib::Font* game_font;
411 function<void()> menu_callback;
417 void reset(
bool apple_explode);
Definition scene_game.hpp:68
bool ended()
Definition scene_game.cpp:105
AppleExplosion()
Definition scene_game.cpp:83
void update()
Definition scene_game.cpp:113
void draw()
Definition scene_game.cpp:100
void explode_sound()
Definition scene_game.cpp:109
void reset()
Definition scene_game.cpp:92
bool show_apple()
Definition scene_game.cpp:96
Definition components.hpp:146
Definition components.hpp:42
void food_check()
Definition scene_game.cpp:715
void reset(bool apple_explode)
Definition scene_game.cpp:690
void update()
Definition scene_game.cpp:750
GameScene()
Definition scene_game.cpp:676
void draw()
Definition scene_game.cpp:783
void init(raylib::Font *game_font, GameComponents::GameStateManager *game_state_manager, function< void()> menu_callback, bool *play_bgmusic)
Definition scene_game.cpp:704
Definition scene_game.hpp:180
void reset()
Definition scene_game.cpp:173
void init(raylib::Font *game_font)
Definition scene_game.cpp:168
MathQuestionDisplay()
Definition scene_game.cpp:165
MathQuestion q_now
Definition scene_game.hpp:199
void draw_answers()
Definition scene_game.cpp:418
void generate_new_question()
Definition scene_game.cpp:178
Definition scene_game.hpp:117
void draw_pts(raylib::Vector2 pos)
Definition scene_game.cpp:149
void turn(Direction direction)
long long pts
Definition scene_game.hpp:137
void draw_lives(raylib::Vector2 pos)
Definition scene_game.cpp:137
uint8_t lives
Definition scene_game.hpp:129
void reset()
Definition scene_game.cpp:126
PlayerStats()
Definition scene_game.cpp:122
raylib::Font * game_font
Definition scene_game.hpp:126
uint length
Definition scene_game.hpp:134
void draw_length(raylib::Vector2 pos)
Definition scene_game.cpp:145
void init(raylib::Font *game_font)
Definition scene_game.cpp:132
Definition scene_game.hpp:285
void create_snake()
Definition scene_game.cpp:511
void reset()
Definition scene_game.cpp:505
const float snake_body_radius
Definition scene_game.hpp:347
void init(raylib::Sound *lose_sound, bool *play_bgmusic)
Definition scene_game.cpp:596
raylib::Vector2 head_pos
Definition scene_game.hpp:354
void add_length()
Definition scene_game.cpp:528
void check_collision(bool *play_bgmusic)
Definition scene_game.cpp:581
GameOver game_over
Definition scene_game.hpp:345
void update()
Definition scene_game.cpp:613
void unqueue_turn()
Definition scene_game.cpp:601
void draw()
Definition scene_game.cpp:648
raylib::Vector2 get_head_pos_center()
Definition scene_game.cpp:563
bool controllable
Definition scene_game.hpp:349
Player()
Definition scene_game.cpp:496
Definition scene_game.hpp:216
raylib::Vector2 pos
Definition scene_game.hpp:262
void draw()
Definition scene_game.cpp:448
StatusBar()
Definition scene_game.cpp:424
void draw_stats()
Definition scene_game.cpp:452
void draw_feedback(Food food)
Definition scene_game.cpp:462
void reset()
Definition scene_game.cpp:432
void draw_question()
Definition scene_game.cpp:458
PlayerStats * player_stats
Definition scene_game.hpp:259
void update()
Definition scene_game.cpp:489
void fall()
Definition scene_game.cpp:436
void init(raylib::Font *game_font, MathQuestion *math_question, PlayerStats *player_stats)
Definition scene_game.cpp:441
#define SNAKE_INITIAL_LENGTH
Definition scene_game.hpp:8
Direction
Definition scene_game.hpp:18
@ DOWN
Definition scene_game.hpp:20
@ UP
Definition scene_game.hpp:19
@ LEFT
Definition scene_game.hpp:21
@ RIGHT
Definition scene_game.hpp:22
Difficulty
Definition scene_game.hpp:26
@ ADD_SUB_HARD
Definition scene_game.hpp:28
@ ADD_SUB_EASY
Definition scene_game.hpp:27
@ MULT_DIV_HARD
Definition scene_game.hpp:30
@ POW_SQRT_EASY
Definition scene_game.hpp:31
@ MULT_DIV_EASY
Definition scene_game.hpp:29
@ POW_SQRT_HARD
Definition scene_game.hpp:32
#define TILE_DIMENSION
Definition scene_game.hpp:13
GameOver
Definition scene_game.hpp:42
@ CRASH_WALL
Definition scene_game.hpp:44
@ CRASH_SELF
Definition scene_game.hpp:45
@ FALSE
Definition scene_game.hpp:43
@ BAD_FOOD
Definition scene_game.hpp:46
Food get_food(Difficulty difficulty)
Definition scene_game.cpp:16
Food
Definition scene_game.hpp:35
@ APPLE_PIE
Definition scene_game.hpp:38
@ APPLE
Definition scene_game.hpp:37
@ GOLDEN_APPLE_PIE
Definition scene_game.hpp:39
@ BAD_APPLE
Definition scene_game.hpp:36
long long get_pts(Food food)
Definition scene_game.cpp:38
MathDisplayStatus
Definition scene_game.hpp:211
@ FEEDBACK
Definition scene_game.hpp:213
@ QUESTION
Definition scene_game.hpp:212
#define LIVES
Definition scene_game.hpp:7
#define TILE_COLUMNS
Definition scene_game.hpp:12
#define SNAKE_UNIT_LENGTH
Definition scene_game.hpp:9
Definition components.hpp:160
Definition scene_game.hpp:147
TileCoord coords[3]
Definition scene_game.hpp:159
string answers_str[3]
Definition scene_game.hpp:165
raylib::Vector2 coords_pixel[3]
Definition scene_game.hpp:162
void draw_question(raylib::Vector2 pos, raylib::Font *game_font, Color color)
Definition scene_game.cpp:153
optional< Food > check_collision(raylib::Vector2 head_location, float head_radius)
Definition scene_game.cpp:157
Difficulty difficulty
Definition scene_game.hpp:168
long long answers[3]
Definition scene_game.hpp:156
string display
Definition scene_game.hpp:151
Definition scene_game.hpp:55
GameComponents::Coordinate to_coord()
Definition scene_game.cpp:63
raylib::Vector2 to_vector2_center()
Definition scene_game.cpp:75
GameComponents::Coordinate to_coord_center()
Definition scene_game.cpp:67
int col
Definition scene_game.hpp:57
raylib::Vector2 to_vector2()
Definition scene_game.cpp:71
int row
Definition scene_game.hpp:56