/2048.cpp

๐ŸŽƒ Hacktoberfest is here! โ€” ๐ŸŽฎ Fully featured terminal version of the game "2048" written in C++

Primary LanguageC++MIT LicenseMIT

2048.cpp

Build Status Build status Codacy Badge Language grade: C/C++ Made with Love in India

Terminal version of the game "2048" written in C++.

๐ŸŽ‰ Featured on GitHub's Twitter and Facebook pages! ๐ŸŽ‰

Demo of usage

Setup

The game and code is made to run natively on the GNU/Linux and macOS platforms, but cross-platform compatibility for Windows has been added too.

Requirements

  • C++ compiler (e.g. g++, clang++, etc.)
  • Linux, macOS OR Windows with a working terminal (Cygwin, Windows Subsystem for Linux or Git bash is recommended for Windows)
  • CMake

Installation

  1. Open your terminal in your preferred directory and clone this project:
$ git clone https://github.com/plibither8/2048.cpp
  1. Enter the project directory:
$ cd 2048.cpp
  1. Create and enter the build directory:
$ mkdir build && cd build
  1. Compile the program with cmake
$ cmake ..
  1. Build the executable
$ make
  1. Run the program and play the game! ๐ŸŽ‰
$ ./2048

Contributing

First of all, thank you for contributing ๐Ÿ˜„! A few things to note:

  • If you have found a bug, or have a feature that you'd like implemeted, raise an issue.

  • If you have proposed a pull request, make sure that you run clang-format on the source code (both, .cpp and .hpp) files if you've made changes there.

Thanks

I deeply appreciate the help of the following people:

  • Michael Hirsch cleaned up the code, organised the header files in a better way for a more efficient build and added the AppVeyor CI.
  • Aiman Ismail added support for Vim keybinding.
  • Patrik Huber fixed a typo in the Readme.
  • zestze changed cstdlib rand to C++ random int generator.
  • Pascal J. Bourguignon added support for ANSI arrow keys.
  • Jean-Michaรซl Celerier added CMakeLists.txt file.
  • comwrg made the duration in the statistics and highscores human-readable, wrapping seconds to minutes and hours.
  • Christian Bundy changed the ugly -, + and | to box-drawing characters.
  • Tor E Hagemann fixed issue #10, causing unwanted character 1 to be printed.
  • farazxameer implemented feature to save a game state and continue from a saved game state, refined game logic.
  • drodil implemented checks to ascertain existance of data files, fixed issue #12
  • Aviskar KC added arrow keys to game instructions.
  • Peter Squicciarini fixed readme instructions.
  • Mark Fischer, Jr. fixed a typo.
  • Hugo Brandรฃo completely reorganised the existing project structure and updated the build method to enfore CMake.
  • Alton Alvarez fixed a typo.
  • cawvyoct made the source code much, much easier to read: removed most magic numbers, replacing them with variables to ease maintanence. Implemented clang-format.
  • Cong edited the Game class constructor.

Notes

  • Game board array is defined as board[y][x]
  • Game board will follow the following structure:
'x' => x-axis OR the horizontal line OR columns
'y' => y-axis OR the vertical line OR rows

Example

board[2][0] refers to the 0th tile (or column) in 2nd row as in this case, x = 0 and y = 2. The specific tile is denoted the by '@' symbol in the following gameboard:

Note: row and column indexing starts at 0.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚      โ”‚      โ”‚      โ”‚      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚      โ”‚      โ”‚      โ”‚      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚   @  โ”‚      โ”‚      โ”‚      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚      โ”‚      โ”‚      โ”‚      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”˜

To-Do

  • Add start menu [19/04/2018]
  • Save highscore / score [21/04/2018]
  • Save a game state and play from a saved game state
  • AI (Abandoned indefinitely)

License

Copyright (c) Mihir Chaturvedi. All rights reserved.

Licensed under the MIT License.