This is the capstone project of the Udacity C++ Nanodegree Program. It is based on the Snake Game example code and has been extended to a multiplayer game via Sockets. Both snakes cannot intersect with each other and the goal is to eat as many food as possible.
The build folder is only included for convenience (built for Apple Silicon). To build the project, please use the commands as described.
- cmake >= 3.7
- All OSes: click here for installation instructions
- make >= 4.1 (Linux, Mac), 3.81 (Windows)
- Linux: make is installed by default on most Linux distros
- Mac: install Xcode command line tools to get make
- Windows: Click here for installation instructions
- SDL2 >= 2.0
- All installation instructions can be found here
Note that for Linux, an
apt
orapt-get
installation is preferred to building from source. - gcc/g++ >= 5.4
- Linux: gcc / g++ is installed by default on most Linux distros
- Mac: same deal as make - install Xcode command line tools
- Windows: recommend using MinGW
- Clone this repo
- Make a build directory in the top level directory:
mkdir build && cd build
- Compile:
cmake .. && make
- Run it as host:
./SnakeGame
- Run it as client:
./SnakeGame IP_ADDRESS_OF_HOST
- Competing snake's position out of sync: This is because the game is not running on a server but on different machines. Each player only sends the input to the other player, and their machine is responsible for the game rendering. This is not a problem for the game itself but can confuse the player.
- The project demonstrates an understanding of C++ functions and control structures.
- The project accepts user input and processes the input. (command line arguments)
- The project uses Object Oriented Programming techniques.
- The project uses destructors appropriately.
- Classes use appropriate access specifiers for class members.
- Class constructors utilize member initialization lists.
- Classes encapsulate behavior.
- The project makes use of references in function declarations.
- The project uses multithreading. (see
Game::SetupSocket
)
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.