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;
85 static const size_t n_frames = 17;
86 const size_t frame_apple_disappear = 7;
87 const char* explosion_sound_file =
"assets/explode.mp3";
88 raylib::Sound explosion_sound;
89 const char* frames[n_frames] = {
90 "assets/explosion/0.png",
91 "assets/explosion/1.png",
92 "assets/explosion/2.png",
93 "assets/explosion/3.png",
94 "assets/explosion/4.png",
95 "assets/explosion/5.png",
96 "assets/explosion/6.png",
97 "assets/explosion/7.png",
98 "assets/explosion/8.png",
99 "assets/explosion/9.png",
100 "assets/explosion/10.png",
101 "assets/explosion/11.png",
102 "assets/explosion/12.png",
103 "assets/explosion/13.png",
104 "assets/explosion/14.png",
105 "assets/explosion/15.png",
106 "assets/explosion/16.png",
109 raylib::Texture2D explosion_animation[n_frames];
111 double time_per_frame;
113 size_t current_frame = 0;
137 const Color text_color = WHITE;
139 const char* heart_texture_file =
"assets/heart.png";
140 raylib::Texture2D heart_texture;
197 void draw_question(raylib::Vector2 pos, raylib::Font* game_font, Color color);
201 optional<Food>
check_collision(raylib::Vector2 head_location,
float head_radius);
210 const uint probability_addsubtr_easy = 30;
211 const uint probability_addsubtr_hard = 30;
212 const uint probability_multdiv_easy = 10;
213 const uint probability_multdiv_hard = 10;
215 const uint probability_powerssqrt_easy = 15;
216 const uint probability_powerssqrt_hard = 5;
218 const Color food_color = WHITE;
219 raylib::Font* game_font;
229 void init(raylib::Font* game_font);
249 const raylib::Vector2 lives_pos = {0, 10};
250 const raylib::Vector2 pts_pos = {330, 3};
251 const raylib::Vector2 question_pos = {815, 3};
252 const raylib::Vector2 snake_length_pos = {1400, 3};
253 const raylib::Vector2 answer_food_tex_pos = {1000, -2};
255 const char* apple_texture_file =
"assets/apple.png";
256 const char* bad_apple_texture_file =
"assets/apple_bad.png";
257 const char* pie_texture_file =
"assets/pie.png";
258 const char* golden_pie_texture_file =
"assets/golden_pie.png";
260 raylib::Texture2D apple_texture;
261 raylib::Texture2D bad_apple_texture;
262 raylib::Texture2D pie_texture;
263 raylib::Texture2D golden_pie_texture;
265 const Color math_question_color = ORANGE;
266 const Color math_feedback_color_correct = GREEN;
267 const Color math_feedback_color_wrong = ORANGE;
271 const float min_statusbar_pos_y = -80;
275 const int pos_y = -5;
279 const char* texture_file =
"assets/statusbar.png";
280 raylib::Texture2D texture;
282 bool is_falling =
false;
288 raylib::Font* game_font;
297 raylib::Vector2
pos = {0, 0};
332 const Color snake_color = Color { .r = 87, .g = 141, .b = 237, .a = 255 };
333 const Color snake_color_pattern = Color { .r = 255, .g = 237, .b = 165, .a = 255 };
335 const char* turn_sound_file =
"assets/turn.mp3";
336 raylib::Sound turn_sound;
337 raylib::Sound* lose_sound;
341 vector<Vector2> points;
354 optional<Direction> turn_queue;
357 const char* texture_snake_head_u =
"assets/snake_head_u.png";
358 const char* texture_snake_head_d =
"assets/snake_head_d.png";
359 const char* texture_snake_head_l =
"assets/snake_head_l.png";
360 const char* texture_snake_head_r =
"assets/snake_head_r.png";
361 raylib::Texture2D snake_head_u;
362 raylib::Texture2D snake_head_d;
363 raylib::Texture2D snake_head_l;
364 raylib::Texture2D snake_head_r;
369 bool check_collision_self();
374 bool check_collision_corners();
378 void check_collision_food();
390 bool try_check_collision =
false;
411 void init(raylib::Sound* lose_sound,
bool* play_bgmusic);
436 const char* dead_crash_wall_file =
"assets/dead_crash_wall.png";
437 const char* dead_crash_self_file =
"assets/dead_crash_self.png";
438 const char* dead_bad_food_file =
"assets/dead_bad_food.png";
439 const char* ground_texture_file =
"assets/ground.png";
440 const char* ground_texture_apple_file =
"assets/interlude_animation/37.png";
442 const char* bad_apple_sound_file =
"assets/wrong.mp3";
443 const char* correct_apple_sound_file =
"assets/crunch.mp3";
444 const char* heavenly_choir_sound_file =
"assets/heavenly-choir.mp3";
445 const char* lose_sound_file =
"assets/lose.mp3";
446 raylib::Sound bad_apple_sound;
447 raylib::Sound correct_apple_sound;
448 raylib::Sound heavenly_choir_sound;
449 raylib::Sound lose_sound;
451 const size_t dead_popup_dimension_y = 587;
452 const size_t dead_popup_dimension_x = 970;
457 raylib::Texture2D dead_crash_wall_texture;
458 raylib::Texture2D dead_crash_self_texture;
459 raylib::Texture2D dead_bad_food_texture;
460 raylib::Texture2D ground_texture;
461 raylib::Texture2D ground_texture_apple;
462 bool is_game_started =
false;
467 raylib::Font* game_font;
480 function<void()> menu_callback;
486 void reset(
bool apple_explode);
Definition scene_game.hpp:81
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:207
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:227
void draw_answers()
Definition scene_game.cpp:418
void generate_new_question()
Definition scene_game.cpp:178
Definition scene_game.hpp:134
void draw_pts(raylib::Vector2 pos)
Definition scene_game.cpp:149
void turn(Direction direction)
long long pts
Definition scene_game.hpp:156
void draw_lives(raylib::Vector2 pos)
Definition scene_game.cpp:137
uint8_t lives
Definition scene_game.hpp:147
void reset()
Definition scene_game.cpp:126
PlayerStats()
Definition scene_game.cpp:122
raylib::Font * game_font
Definition scene_game.hpp:143
uint length
Definition scene_game.hpp:152
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:325
void create_snake()
Definition scene_game.cpp:511
void reset()
Definition scene_game.cpp:505
const float snake_body_radius
Definition scene_game.hpp:399
void init(raylib::Sound *lose_sound, bool *play_bgmusic)
Definition scene_game.cpp:596
raylib::Vector2 head_pos
Definition scene_game.hpp:407
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:397
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:401
Player()
Definition scene_game.cpp:496
Definition scene_game.hpp:246
raylib::Vector2 pos
Definition scene_game.hpp:297
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:293
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:19
@ DOWN
Definition scene_game.hpp:21
@ UP
Definition scene_game.hpp:20
@ LEFT
Definition scene_game.hpp:22
@ RIGHT
Definition scene_game.hpp:23
Difficulty
Definition scene_game.hpp:28
@ ADD_SUB_HARD
Definition scene_game.hpp:30
@ ADD_SUB_EASY
Definition scene_game.hpp:29
@ MULT_DIV_HARD
Definition scene_game.hpp:32
@ POW_SQRT_EASY
Definition scene_game.hpp:33
@ MULT_DIV_EASY
Definition scene_game.hpp:31
@ POW_SQRT_HARD
Definition scene_game.hpp:34
#define TILE_DIMENSION
Definition scene_game.hpp:13
GameOver
Definition scene_game.hpp:48
@ CRASH_WALL
Definition scene_game.hpp:50
@ CRASH_SELF
Definition scene_game.hpp:51
@ FALSE
Definition scene_game.hpp:49
@ BAD_FOOD
Definition scene_game.hpp:52
Food get_food(Difficulty difficulty)
Definition scene_game.cpp:16
Food
Definition scene_game.hpp:39
@ APPLE_PIE
Definition scene_game.hpp:42
@ APPLE
Definition scene_game.hpp:41
@ GOLDEN_APPLE_PIE
Definition scene_game.hpp:43
@ BAD_APPLE
Definition scene_game.hpp:40
long long get_pts(Food food)
Definition scene_game.cpp:38
MathDisplayStatus
Definition scene_game.hpp:241
@ FEEDBACK
Definition scene_game.hpp:243
@ QUESTION
Definition scene_game.hpp:242
#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:166
TileCoord coords[3]
Definition scene_game.hpp:181
string answers_str[3]
Definition scene_game.hpp:189
raylib::Vector2 coords_pixel[3]
Definition scene_game.hpp:185
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:193
long long answers[3]
Definition scene_game.hpp:177
string display
Definition scene_game.hpp:171
Definition scene_game.hpp:65
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:67
raylib::Vector2 to_vector2()
Definition scene_game.cpp:71
int row
Definition scene_game.hpp:66