nsnake
Classic snake game for the terminal
Loading...
Searching...
No Matches
FruitManager.cpp
1#include <Game/FruitManager.hpp>
2#include <Misc/Utils.hpp>
3
5 amount(amount)
6{ }
8{
9 // If any fruit was eaten by #player, we'll
10 // delete it.
11 for (std::vector<Fruit>::iterator it = this->fruit.begin(); it != this->fruit.end();)
12 {
13 if (player->headHit((*it).x, (*it).y))
14 {
15 // Alright, eaten!
16 it = this->fruit.erase(it);
17 return true;
18 }
19 else
20 ++it;
21 }
22 return false;
23}
24void FruitManager::update(Player* player, Board* board)
25{
26 // Creating enough fruits to fill the #amount quota.
27 int diff = (this->amount - this->fruit.size());
28
29 if (diff > 0)
30 for (int i = 0; i < (diff); i++)
31 this->addRandomly(board, player);
32}
34{
35 return (this->amount);
36}
37void FruitManager::add(int x, int y)
38{
39 this->fruit.push_back(Fruit(x, y));
40}
42{
43 int newx = 1;
44 int newy = 1;
45
46 // Creating between the board limits,
47 // making sure it isn't inside player's body.
48 do
49 {
50 newx = Utils::Random::between(1, board->getW() - 2);
51 newy = Utils::Random::between(1, board->getH() - 2);
52
53 } while (player->bodyHit(newx, newy) ||
54 board->isWall(newx, newy));
55
56 this->add(newx, newy);
57}
58void FruitManager::draw(Window* win)
59{
60 for (unsigned int i = 0; i < (this->fruit.size()); i++)
61 win->print("$",
62 this->fruit[i].x,
63 this->fruit[i].y,
64 Colors::pair(COLOR_RED, COLOR_DEFAULT, true));
65}
66
A level where the snake runs and eats fruits.
Definition Board.hpp:33
bool isWall(int x, int y)
Tells if there's a wall at x y.
Definition Board.cpp:36
FruitManager(int amount)
Creates a Fruit container that has at most amount fruits at once on the screen.
void update(Player *player, Board *board)
Updates internal fruits, adding them to the board and making sure it doesn't touch player.
int getAmount()
Returns the maximum size we can store within this manager.
void add(int x, int y)
Creates a fruit, adding it at x, y.
void addRandomly(Board *board, Player *player)
Creates a fruit randomly within boundaries of board, making sure that it's not inside player.
bool eatenFruit(Player *player)
Tells if the player has eaten a fruit this frame.
bool bodyHit(int x, int y, bool isCheckingHead=false)
Tells if something at x and y collides with any part of the snake.
Definition Player.cpp:146
A segment of the terminal screen (2D char matrix).
Definition Window.hpp:17
void print(std::string str, int x, int y, ColorPair pair=0)
Shows text str at x y on the window with color pair.
Definition Window.cpp:94
int between(int min, int max)
Random number between min and max.
Definition Utils.cpp:48
A single fruit.