From 746c615dab6aba655c2d5309e7f901c304c762f0 Mon Sep 17 00:00:00 2001 From: vashishtpurani Date: Sun, 28 Sep 2025 20:04:22 +0530 Subject: [PATCH 1/4] Food spawn bug fixed --- snake.h | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/snake.h b/snake.h index ebe1192..d808c40 100644 --- a/snake.h +++ b/snake.h @@ -75,27 +75,32 @@ void game_play(){ deque> snake; snake.push_back(make_pair(0,0)); - pair food = make_pair(rand() % 10, rand() % 10); + // ensure food doesn't spawn inside snake + auto generate_food = [&](deque> &snake) { + pair f; + do { + f = make_pair(rand() % 10, rand() % 10); + } while (find(snake.begin(), snake.end(), f) != snake.end()); + return f; + }; + + pair food = generate_food(snake); + for(pair head=make_pair(0,1);; head = get_next_head(head, direction)){ - // send the cursor to the top cout << "\033[H"; - // check self collision if (find(snake.begin(), snake.end(), head) != snake.end()) { system("clear"); cout << "Game Over" << endl; exit(0); - }else if (head.first == food.first && head.second == food.second) { - // grow snake - food = make_pair(rand() % 10, rand() % 10); + }else if (head == food) { + food = generate_food(snake); // safe food generation snake.push_back(head); }else{ - // move snake snake.push_back(head); snake.pop_front(); } render_game(10, snake, food); cout << "length of snake: " << snake.size() << endl; - sleep_for(500ms); } } From c3aca9b19d7fa28f2f55e30b00e5c405bd07358e Mon Sep 17 00:00:00 2001 From: vashishtpurani Date: Sun, 28 Sep 2025 18:54:11 +0300 Subject: [PATCH 2/4] Added a difficuty menu | added dynamic difficulty as the game progresses --- main.cpp | 10 ++++-- snake | Bin 0 -> 81032 bytes snake.h | 101 ++++++++++++++++++++++++++++++++++--------------------- 3 files changed, 69 insertions(+), 42 deletions(-) create mode 100755 snake diff --git a/main.cpp b/main.cpp index ef65093..cbff756 100644 --- a/main.cpp +++ b/main.cpp @@ -1,9 +1,13 @@ #include "snake.h" -int main(int argc, char *argv[]) { +int main() { + select_difficulty(); + thread input_thread(input_handler); - thread game_thread(game_play); + thread game_thread(game_play); + input_thread.join(); game_thread.join(); -return 0; + + return 0; } \ No newline at end of file diff --git a/snake b/snake new file mode 100755 index 0000000000000000000000000000000000000000..c50897e7b52afa336bacb103e6cad8d226633cf9 GIT binary patch literal 81032 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 hO{xD+|5W%8=dt*U> &snake, pair food){ - for(size_t i=0;i> &snake, pair food) { + for (size_t i = 0; i < size; i++) { + for (size_t j = 0; j < size; j++) { + if (i == food.first && j == food.second) { cout << "🍎"; - }else if (find(snake.begin(), snake.end(), make_pair(int(i), int(j))) != snake.end()) { + } else if (find(snake.begin(), snake.end(), make_pair(int(i), int(j))) != snake.end()) { cout << "🐍"; - }else{ + } else { cout << "⬜"; } + } + cout << endl; } - cout << endl; -} } -pair get_next_head(pair current, char direction){ - pair next; - if(direction =='r'){ - next = make_pair(current.first,(current.second+1) % 10); - }else if (direction=='l') - { - next = make_pair(current.first, current.second==0?9:current.second-1); - }else if(direction =='d'){ - next = make_pair((current.first+1)%10,current.second); - }else if (direction=='u'){ - next = make_pair(current.first==0?9:current.first-1, current.second); - } +// --- Snake Movement --- +pair get_next_head(pair current, char direction) { + pair next; + if (direction == 'r') { + next = make_pair(current.first, (current.second + 1) % 10); + } else if (direction == 'l') { + next = make_pair(current.first, current.second == 0 ? 9 : current.second - 1); + } else if (direction == 'd') { + next = make_pair((current.first + 1) % 10, current.second); + } else if (direction == 'u') { + next = make_pair(current.first == 0 ? 9 : current.first - 1, current.second); + } return next; - } - - -void game_play(){ +// --- Game Play --- +// --- Game Play --- +void game_play() { system("clear"); deque> snake; - snake.push_back(make_pair(0,0)); + snake.push_back(make_pair(0, 0)); - // ensure food doesn't spawn inside snake - auto generate_food = [&](deque> &snake) { + auto generate_food = [&](deque> &snake) { pair f; do { f = make_pair(rand() % 10, rand() % 10); @@ -86,21 +84,46 @@ void game_play(){ pair food = generate_food(snake); - for(pair head=make_pair(0,1);; head = get_next_head(head, direction)){ + for (pair head = make_pair(0, 1);; head = get_next_head(head, direction)) { cout << "\033[H"; if (find(snake.begin(), snake.end(), head) != snake.end()) { system("clear"); cout << "Game Over" << endl; exit(0); - }else if (head == food) { - food = generate_food(snake); // safe food generation - snake.push_back(head); - }else{ + } else if (head == food) { + food = generate_food(snake); + snake.push_back(head); + + if (game_speed > 80) { + game_speed -= 20; // each food makes it 20ms faster + } + + } else { snake.push_back(head); snake.pop_front(); } + render_game(10, snake, food); cout << "length of snake: " << snake.size() << endl; - sleep_for(500ms); + cout << "current speed: " << game_speed << "ms" << endl; + sleep_for(chrono::milliseconds(game_speed)); } } + +// --- Difficulty Selection --- +void select_difficulty() { + cout << "Choose Difficulty:\n"; + cout << "1. Easy (500ms)\n"; + cout << "2. Medium (300ms)\n"; + cout << "3. Hard (150ms)\n"; + cout << "Enter choice: "; + int choice; + cin >> choice; + + switch (choice) { + case 1: game_speed = 500; break; + case 2: game_speed = 300; break; + case 3: game_speed = 150; break; + default: game_speed = 500; break; + } +} \ No newline at end of file From e84aaf109439ed6d531f73ef552f0dcba4eaf274 Mon Sep 17 00:00:00 2001 From: vashishtpurani Date: Sun, 28 Sep 2025 18:57:28 +0300 Subject: [PATCH 3/4] Added a Score Board --- snake | Bin 81032 -> 81120 bytes snake.h | 22 ++++++++++++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/snake b/snake index c50897e7b52afa336bacb103e6cad8d226633cf9..2d3f5488466957fb3a2558f37a96b82f37da4db8 100755 GIT binary patch delta 16826 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 delta 16431 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 diff --git a/snake.h b/snake.h index 885661c..161b16e 100644 --- a/snake.h +++ b/snake.h @@ -14,16 +14,16 @@ using namespace std::this_thread; char direction = 'r'; int game_speed = 500; // default in ms (easy) +int score = 0; // NEW: score tracker // --- Input Handler --- void input_handler() { - // change terminal settings struct termios oldt, newt; tcgetattr(STDIN_FILENO, &oldt); newt = oldt; - // turn off canonical mode and echo newt.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newt); + map keymap = {{'d', 'r'}, {'a', 'l'}, {'w', 'u'}, {'s', 'd'}, {'q', 'q'}}; while (true) { char input = getchar(); @@ -67,7 +67,6 @@ pair get_next_head(pair current, char direction) { return next; } -// --- Game Play --- // --- Game Play --- void game_play() { system("clear"); @@ -85,27 +84,30 @@ void game_play() { pair food = generate_food(snake); for (pair head = make_pair(0, 1);; head = get_next_head(head, direction)) { - cout << "\033[H"; + cout << "\033[H"; // move cursor to top if (find(snake.begin(), snake.end(), head) != snake.end()) { system("clear"); - cout << "Game Over" << endl; + cout << "Game Over!" << endl; + cout << "Final Score: " << score << endl; // show final score exit(0); } else if (head == food) { food = generate_food(snake); snake.push_back(head); + score += 10; // 🎯 +10 per food eaten + if (game_speed > 80) { - game_speed -= 20; // each food makes it 20ms faster + game_speed -= 20; // speed up } - } else { snake.push_back(head); snake.pop_front(); } render_game(10, snake, food); - cout << "length of snake: " << snake.size() << endl; - cout << "current speed: " << game_speed << "ms" << endl; + cout << "Score: " << score << endl; // display score + cout << "Length: " << snake.size() << endl; // display snake length + cout << "Speed: " << game_speed << "ms" << endl; // display current speed sleep_for(chrono::milliseconds(game_speed)); } } @@ -126,4 +128,4 @@ void select_difficulty() { case 3: game_speed = 150; break; default: game_speed = 500; break; } -} \ No newline at end of file +} From 322251a0165de8475244e56f5dae39778a6f591a Mon Sep 17 00:00:00 2001 From: vashishtpurani Date: Sun, 28 Sep 2025 19:03:06 +0300 Subject: [PATCH 4/4] Added poisonous food --- main.cpp | 4 +++- snake | Bin 81120 -> 81192 bytes snake.h | 59 +++++++++++++++++++++++++++++++++---------------------- 3 files changed, 38 insertions(+), 25 deletions(-) diff --git a/main.cpp b/main.cpp index cbff756..5601a52 100644 --- a/main.cpp +++ b/main.cpp @@ -1,6 +1,8 @@ #include "snake.h" int main() { + srand(time(0)); // seed random generator + select_difficulty(); thread input_thread(input_handler); @@ -10,4 +12,4 @@ int main() { game_thread.join(); return 0; -} \ No newline at end of file +} diff --git a/snake b/snake index 2d3f5488466957fb3a2558f37a96b82f37da4db8..8c6e67501570f902df5ed41a0912353aafcee512 100755 GIT binary patch delta 19650 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 C;R0j; delta 18976 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 diff --git a/snake.h b/snake.h index 161b16e..e3242e1 100644 --- a/snake.h +++ b/snake.h @@ -9,12 +9,11 @@ #include #include using namespace std; -using std::chrono::system_clock; using namespace std::this_thread; char direction = 'r'; int game_speed = 500; // default in ms (easy) -int score = 0; // NEW: score tracker +int score = 0; // score tracker // --- Input Handler --- void input_handler() { @@ -37,11 +36,13 @@ void input_handler() { } // --- Render Function --- -void render_game(int size, deque> &snake, pair food) { +void render_game(int size, deque> &snake, pair food, pair poison) { for (size_t i = 0; i < size; i++) { for (size_t j = 0; j < size; j++) { if (i == food.first && j == food.second) { - cout << "🍎"; + cout << "🍎"; // normal food + } else if (i == poison.first && j == poison.second) { + cout << "🍄"; // poisonous food } else if (find(snake.begin(), snake.end(), make_pair(int(i), int(j))) != snake.end()) { cout << "🐍"; } else { @@ -67,47 +68,57 @@ pair get_next_head(pair current, char direction) { return next; } +// --- Food Generator --- +pair generate_item(deque> &snake, pair other = {-1, -1}) { + pair f; + do { + f = make_pair(rand() % 10, rand() % 10); + } while (find(snake.begin(), snake.end(), f) != snake.end() || f == other); + return f; +} + // --- Game Play --- void game_play() { system("clear"); deque> snake; snake.push_back(make_pair(0, 0)); - auto generate_food = [&](deque> &snake) { - pair f; - do { - f = make_pair(rand() % 10, rand() % 10); - } while (find(snake.begin(), snake.end(), f) != snake.end()); - return f; - }; - - pair food = generate_food(snake); + pair food = generate_item(snake); + pair poison = generate_item(snake, food); for (pair head = make_pair(0, 1);; head = get_next_head(head, direction)) { cout << "\033[H"; // move cursor to top if (find(snake.begin(), snake.end(), head) != snake.end()) { system("clear"); - cout << "Game Over!" << endl; - cout << "Final Score: " << score << endl; // show final score + cout << "Game Over! You hit yourself!\n"; + cout << "Final Score: " << score << endl; exit(0); } else if (head == food) { - food = generate_food(snake); + // Eat normal food snake.push_back(head); + score += 10; + if (game_speed > 80) game_speed -= 20; - score += 10; // 🎯 +10 per food eaten + // generate both food and poison again, ensuring they never overlap + food = generate_item(snake); + poison = generate_item(snake, food); - if (game_speed > 80) { - game_speed -= 20; // speed up - } + } else if (head == poison) { + // Eat poisonous food → game ends + system("clear"); + cout << "☠️ Game Over! You ate poisonous food!\n"; + cout << "Final Score: " << score << endl; + exit(0); } else { + // Normal move snake.push_back(head); snake.pop_front(); } - render_game(10, snake, food); - cout << "Score: " << score << endl; // display score - cout << "Length: " << snake.size() << endl; // display snake length - cout << "Speed: " << game_speed << "ms" << endl; // display current speed + render_game(10, snake, food, poison); + cout << "Score: " << score << endl; + cout << "Length: " << snake.size() << endl; + cout << "Speed: " << game_speed << "ms" << endl; sleep_for(chrono::milliseconds(game_speed)); } }