## Netpong - A Pong game for the internet era

__Netpong__ is a network-enabled Pong game, written in C++. It enables two players to play against each other, provided an IP address and a port. It also supports a single-player mode.

## How it works

The game has only one runtime dependency: The [raylib](https://www.raylib.com/) graphics library. In order to write idiomatic C++, I chose to use the [raylib-cpp](https://robloach.github.io/raylib-cpp/) wrapper, which provides an object-oriented interface to the Raylib library.

## Building

This application uses [Meson](https://mesonbuild.com/) as a build system. To build the application:
1. Install meson from the link above.
2. Set up the build directory.
	```
	meson setup build
	```
3. Compile the application. Meson should use a system installation of raylib, if it exists. If not, it falls back to a bundled version.
	```
	meson compile -C build
	```
4. You can also create a statically-linked version of the game (with no runtime dependencies) on Linux by running the following commands:

	 ```
	 meson configure -Ddefault_library=static build/
	 meson compile -C build -Ddefault_library=static
	 ```

## Running

- To run in single-player mode:
	- Run the application with no arguments: `build/pong`
	- Left paddle is controlled with `W` and `S` keys, right paddle is controlled with `Up` and `Down` arrow keys.
	
- To run in multi-player mode:
	- One player runs the application in Server mode, specifying their IP address and a port: `build/pong -S <ip_address> <port>`
	- The other player connects to the first player by running in Client mode, specifying the first player's IP address and port: `build/pong -C <ip_address> <port>`.
	- The server controls the left paddle by default (WIP to allow the user to modify this), and the client controls the right paddle.

## TODO

See todo.txt.