Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <iostream>
- #include <cstdlib>
- #include <conio.h>
- #include <string>
- #include <ctime>
- using namespace std;
- const int length = 4;
- int arr[length][length] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
- bool lose = false;
- int setwidth = 1;
- void print_game(){
- system("cls");
- for (int i = 0; i < (5 + setwidth); i++)
- cout << "###";
- cout << "\n";
- for (int i = 0; i < length; i++){
- cout << "#";
- for (int j = 0; j < length; j++){
- for (int k = 0; k < setwidth - std::to_string(arr[i][j]).length(); k++)
- cout << " ";
- cout << " " << arr[i][j] << " ";
- }
- cout << "#";
- for (int j = 0; j < setwidth + 1; j++)
- cout << "\n";
- }
- for (int i = 0; i < (5 + setwidth); i++)
- cout << "###";
- }
- void spawn_numbers(){
- int a, b;
- bool flag = false;
- for (int i = 0; i < length; i++){
- for (int j = 0; j < length; j++)
- if (!arr[i][j]){
- flag = true;
- break;
- }
- if (flag)
- break;
- }
- if (flag)
- while (true){
- a = rand() % length;
- b = rand() % length;
- if (!arr[a][b]){
- arr[a][b] = 1;
- break;
- }
- }
- }
- void move_numbers(){
- char mov = _getch();
- if (mov == 'w'){
- for (int i = 1; i < length; i++)
- for (int j = 0; j < length; j++)
- if (arr[i][j] != 0)
- for (int k = 0; k < length - 1; k++)
- if (i - 1 - k == -1)
- break;
- else if (arr[i - 1 - k][j] == 0)
- {
- arr[i - 1 - k][j] = arr[i - k][j];
- arr[i - k][j] = 0;
- } else if (arr[i - 1 - k][j] == arr[i - k][j])
- {
- arr[i - 1 - k][j] = arr[i - k][j] * 2;
- arr[i - k][j] = 0;
- }
- }
- else if (mov == 'd'){
- for (int i = 0; i < length; i++)
- for (int j = length - 2; j >-1; j--)
- if (arr[i][j] != 0)
- for (int k = 0; k < length - 1; k++)
- if (j + 1 + k == length)
- break;
- else if (arr[i][j + 1 + k] == 0)
- {
- arr[i][j + 1 + k] = arr[i][j + k];
- arr[i][j + k] = 0;
- } else if (arr[i][j + 1 + k] == arr[i][j + k])
- {
- arr[i][j + 1 + k] = arr[i][j + k] * 2;
- arr[i][j + k] = 0;
- }
- }
- else if (mov == 's'){
- for (int i = length - 2; i > -1; i--)
- for (int j = 0; j < length; j++)
- if (arr[i][j] != 0)
- for (int k = 0; k < length - 1; k++)
- if (i + 1 + k == length)
- break;
- else if (arr[i + 1 + k][j] == 0)
- {
- arr[i + 1 + k][j] = arr[i + k][j];
- arr[i + k][j] = 0;
- } else if (arr[i + 1 + k][j] == arr[i + k][j]){
- arr[i + 1 + k][j] = arr[i + k][j] * 2;
- arr[i + k][j] = 0;
- }
- }
- else if (mov == 'a'){
- for (int i = 0; i < length; i++)
- for (int j = 1; j < length; j++)
- if (arr[i][j] != 0)
- for (int k = 0; k < length - 1; k++)
- if (j - 1 - k == -1)
- break;
- else if (arr[i][j - 1 - k] == 0)
- {
- arr[i][j - 1 - k] = arr[i][j - k];
- arr[i][j - k] = 0;
- } else if (arr[i][j - 1 - k] == arr[i][j - k]){
- arr[i][j - 1 - k] = arr[i][j - k] * 2;
- arr[i][j - k] = 0;
- }
- }
- }
- void find_max(){
- int max = -1;
- for (int i = 0; i < length; i++)
- for (int j = 0; j < length; j++)
- if (arr[i][j] > max)
- max = arr[i][j];
- setwidth = std::to_string(max).length();
- }
- void check_game(){
- for (int i = 0; i < length; i++)
- for (int j = 0; j < length; j++)
- if (arr[i][j] == arr[i + 1][j] || arr[i][j] == arr[i][j + 1])
- return;
- lose = true;
- }
- void main(){
- srand(time(0));
- while (!lose){
- spawn_numbers();
- print_game();
- move_numbers();
- find_max();
- check_game();
- }
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement