![Bonnie in a plate](https://user-images.githubusercontent.com/101518532/232920360-1a51d988-3b3f-4f54-b361-1b8a80a572a7.jpg)
This is Bonnie. She is my sister's little rabbit and the inspiration for this project. How adorable is she? 😍
To compile the mandatory part, simply go into the cloned repository and use the make
command. Then, you can execute the program like this: ./so_long maps/
and add the map you want to try after the '/'. I suggest using the laby.ber map or creating your own, but first go check out the map requirements!
Example:
./so_long maps/laby.ber
As for the bonus part, you can write make bonus
into the terminal to compile and then execute as showed below. Note that you will need a map that contains an enemy, or you will get an error message.
Example:
./so_long_bonus maps/bonus_maps/bonus_emptier.ber
The goal of this game is to collect all the collectibles, which are carrots in our case. Once you've collected all the carrots, you need to go and find your bunny friend to share the loot.
In the bonus part, there is a fox looking out for you though. Watch out!
Key | Action |
---|---|
W, ↑ | Move up |
S, ↓ | Move down |
A, ← | Move to the left |
D, → | Move to the right |
ESC, ⎋ |
Close the game |
This project is a very small 2D game. Its purpose is to make you work with textures, sprites, and some other very basic gameplay elements.
This project had to be done using a simple graphic library called the MLX, which was provided with the subject. I have included the library here with my code but you can find more info on here: https://harm-smits.github.io/42docs/libs/minilibx.
- The map can only be composed of these characters:
Description | Character |
---|---|
Empty space | 0 |
Wall | 1 |
Player | P |
Exit | E |
Collectible | C |
Enemy | F |
- The map must be rectangular and surrounded by walls.
- The map has to be a .ber file. Not a folder. A file!
- The map must contain exactly one player and one exit, and at least one collectible. For the bonus map, you will also need an enemy.
- There has to be a valid path in the map. If the exit or one of the collectibles is blocked by walls, the map is invalid. The player cannot go through walls!
This project was written in accordance to the Norm, as set of rules every 42 students need to follow for the C-projects. You can find it here: https://github.com/42School/norminette.
For the bonus part, it was up to our imagination to add some features. Here were some of the suggested additions:
- Make the player lose when they touch an enemy patrol.
- Add some sprite animation.
- Display the movement count directly on screen instead of writing it in the shell.
I also decided to create a GAME OVER screen as well as making it possible to restart the game.
Shout out to DALL-E for the fox sprites!
- How to use a simple graphic interface (MLX).
- How to handle events (hook functions).
- How to use the random number generation function from the math library.
- How to better define my variables and error messages to make my code more readable.
- How to create gifs from screen capture recordings.
I also got better at making my own tests, and at asking for help from fellow students.
- Animations: It was quite challenging to get the fox to move in random directions with a speed that made sense. It was mostly alot of trial and error, and in the end I managed to get a respectable result but it is still not as I hoped it would. I might make some changes someday if I have the time, but for now I need to concentrate my efforts on my other projects! :)
- Infinite loop: I ran into some trouble when it came the time to stop the enemy loop. I use the mlx_loop_hook function from the MLX and I could not for the life of me stop the loop after the game was over. Then out of nowhere it hit me: I just needed to define a game status, which could be set to default, OVER or WIN and the loop function would check if the status is set to default and stop if it is not the case.
- Endless MLX warnings: This was mostly annoying more than anything else, but everytime the MLX would compile it would print a multitude of warnings. I had to dig deep to find how to silence them as I was not able to do it with the .SILENT makefile variable or the @.
I would say this is my favorite project so far as I could finally see a real result everytime I added something to my code. It was not as challenging for me as the other projects of this circle (URGHHH pipex!!) but I had alot of fun creating this little game! :)