16

Teapong – A two-player game for fans of Pong and the Utah teapot

 4 years ago
source link: https://github.com/diegomacario/Teapong/blob/master/README.md
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

qIJvMbE.png!web

Teapong

A two-player game for fans of Pong and the Utah teapot !

iUN3UvN.png!webClick on the image above to see a two minute demo of Teapong!

Technical details

This is the first game that I ever make! :blush:

It was written using C++ and OpenGL, and it is currently supported on macOS and Windows.

The external libraries it uses and their purposes are the following:

  • GLFW is used to interact with the windowing system and to receive inputs.
  • GLAD is used to load pointers to OpenGL functions.
  • GLM is used to perform 3D math.
  • Assimp is used to load 3D models.
  • stb_image is used to load textures.
  • irrKlang is used to play sounds.

The sources of the assets it uses are the following:

  • The 3D models were created using 3ds Max .
  • The textures were created procedurally using 3ds Max and the Open Shading Language .
  • The sound effects can be found here .
  • The background music is Filaments by Podington Bear, and it can be found here .

For a more detailed description of this project's code, see this presentation.

Rules and controls

The rules are simple: the first player to score three points wins!

The controls are as follows:

  • Press Esc to close the game.
  • Press F to toggle between the full screen and the windowed modes. When in the windowed mode, you can manually resize the window using the mouse.
  • Press 1 , 2 , 4 or 8 to set the number of samples used for anti-aliasing. By default, the game starts with 1 sample. The higher the number of samples, the better the game looks.
  • When in the menu, press Space to start a game.
  • When ready to play, press Space to launch a teapot.
  • The left paddle is controled with G and B , while the right paddle is controlled with Up and Down .
  • Press P to pause the game.
  • Press C to toggle between the fixed and free camera modes. When the camera is free, you can position it using W , A , S , D and the mouse. You can also zoom in and out using the scroll wheel.
  • Press R to reset the camera to its original position.

Running the game without building it

macOS

To run Teapong on macOS, you must follow these steps:

  • Download or clone this repository and open a Terminal window in its root.
  • Execute the following command to install GLFW, GLM and Assimp:
$ brew install cmake assimp glm glfw
  • Execute the following commands to install GLAD:
$ cp dependencies/mac/inc/glad/glad.h /usr/local/include/
$ cp dependencies/mac/inc/KHR/khrplatform.h /usr/local/include/
  • Execute the following commands to install irrKlang:
$ cp -r dependencies/mac/inc/irrklang /usr/local/include/
$ cp -R dependencies/mac/lib/ /usr/local/lib/
  • Download Teapong_macOS.zip from release 1.0.0 , open a Terminal in its root directory and execute the following command to launch the game:
$ ./Teapong

Windows

To run Teapong on Windows, simply download Teapong_Windows.zip from release 1.0.0 and double click Teapong.exe .

Building the game

macOS

To build Teapong on macOS, you must follow the same steps listed in the " Running the game without building it " section, except for the last one, which you must replace with the following:

  • Execute the following command to build the game:
$ make Teapong

Thanks to Daniel Macario for writing the Makefile!

Windows

To build Teapong on Windows, simply download or clone this repository and use the Visual Studio 2019 solution file that is stored in the VS2019_solution directory.

Learning resources

The following sources of information are the ones that helped me the most while working on this game:

  • The external libraries I used are presented with excellent clarity in this page.
  • The design pattern I used for game state management was inspired by this article.
  • The classes I wrote for resource management were inspired by this code.

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK