Terminal version of the game "2048" written in C++.
🎉 Featured on GitHub's Twitter and Facebook pages! 🎉
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.
- C++11 compiler (e.g.
g++
,clang++
,pgc++
,icpc
, etc.) - Virtually any platform including:
- Linux
- MacOS
- Windows (via Cygwin or Windows Subsystem for Linux)
- CMake or Meson
- Open your terminal in your preferred directory and clone this project:
git clone https://github.com/plibither8/2048.cpp
- Enter the project directory:
cd 2048.cpp
For both CMake and Meson, the default C++ compiler on your system will be used.
If you wish to manually select a C++ compiler, optionally add CXX=clang++ cmake
or CXX=clang++ meson
etc.
- Build the executable and run tests
ctest -S setup.cmake
- Install the program (optional)
cmake --install build
- Run the program and play the game! 🎉
2048 # run `build/2048` if game is not installed
OR
- Generate build configuration
meson build
- Build the executable and run tests
meson test -C build
- Install the program (optional)
meson configure build --prefix=$HOME/.local
meson install -C build
- Run the program and play the game! 🎉
2048 # run `build/2048` if game is not installed
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 implemented, 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. -
In your local repository, run
git update-index --skip-worktree ./data/*.txt
to ensure that changes to the data files are not tracked by git, and thus are not staged.
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,
- added the AppVeyor CI,
- added the Meson build system and, fixed CMake and added install feature.
- 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 replaced the ugly -, + and | with 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 existence 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 maintenance. Implemented
clang-format
. - Cong edited the
Game
class constructor. - Tien Do added the 'exit' option in the main menu, updated the
CMakeLists.txt
file and madeColor
enum to a scoped enum. - ScorrMorr made many methods
const
s. - tangmengqiu fixed an error-causing instruction step in the readme.
[GameBoard].getTile(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
andcolumn
indexing starts at 0.
┌──────┬──────┬──────┬──────┐
│ │ │ │ │
├──────┼──────┼──────┼──────┤
│ │ │ │ │
├──────┼──────┼──────┼──────┤
│ @ │ │ │ │
├──────┼──────┼──────┼──────┤
│ │ │ │ │
└──────┴──────┴──────┴──────┘
- 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)
Copyright (c) Mihir Chaturvedi. All rights reserved.
Licensed under the MIT License.