aboutsummaryrefslogtreecommitdiff
path: root/src/game.cpp
blob: 5bd3763926341ab5db765b92bc6bdb44f86233f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "game.hpp"


Game::Game(int s)
{
    size = s;
    grid = new int*[size];
    for (int i = 0; i < size; i++)
        grid[i] = new int[size];
}

Game::~Game()
{
    for (int i = 0; i < size; i++)
        delete []grid[i];
    delete []grid;
}

int Game::getSize()
{
    return size;
}

int Game::at(int x, int y)
{
    return grid[y][x];
}

void Game::move(Direction direction)
{
    switch (direction)
    {
        case DIRECTION_LEFT:
            break;
        case DIRECTION_RIGHT:
            // for (int i = 0; i < size; i++)
            //     for (int j = size - 2; j >= 0; j--)
            //     {
            //         if (grid[i][j + 1] == grid[i][j])
            //         {
            //             grid[i][j + 1] *= 2;
            //             for (int k = j; k >= 0; k--)
            //                 grid[i][k] = grid[i][k - 1];
            //             grid[i][shifts] = 0;
            //             shifts++;
            //         }
            //     }
            break;
        case DIRECTION_DOWN:
            break;
        case DIRECTION_UP:
            // for (int i = size - 2; i >= 0; i--)
            //     for (int j = 0; j < size; j++)
            //     {
            //         if (grid[i + 1][j] == grid[i][j])
            //         {
            //             grid[i + 1][j 1] *= 2;
            //             for (int k = j; k >= 0; k--)
            //                 grid[i][k] = grid[i][k - 1];
            //             grid[i][shifts] = 0;
            //             shifts++;
            //         }
            //     }
            break;
    }
    spawn();
}

void Game::spawn()
{
    int i;
    int j;

    do
    {
        i = rand() % size;
        j = rand() % size;
    }
    while (grid[i][j] != 0);
    grid[i][j] = 2;
}

bool Game::lost()
{
    for (int i = 0; i < size; i++)
        for (int j = 0; j < size; j++)
        {
            if (grid[i][j] == 0)
                return false;
            if (i - 1 >= 0 && grid[i - 1][j] == grid[i][j])
                return false;
            if (i + 1 < size && grid[i + 1][j] == grid[i][j])
                return false;
            if (j - 1 >= 0 && grid[i][j - 1] == grid[i][j])
                return false;
            if (j + 1 < size && grid[i][j + 1] == grid[i][j])
                return false;
        }
    return true;
}