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++ 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
- 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
- Create and enter the build directory:
$ mkdir build && cd build
- Compile the program with cmake
$ cmake ..
- Build the executable
$ make
- Run the program and play the game! 🎉
$ ./2048
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. -
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 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. - 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.
[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.