Информация об изменениях

Сообщение Игра "Сапер" от 04.12.2021 18:29

Изменено 04.12.2021 18:29 avovana

Re: Игра "Сапер"
3 этапа:
1. Создать поле. Расставить бомбы
2. Расставить цифры, которые говорят, сколько бомб вокруг
3. Кликнуть по полю, получить результат:
а) Пустое место. Открываются все пустые рядом и пустые рядом с ними и т.д.
б) Цифра
в) Бомба

Сделал 2 этапа:
int x, y, bombs;

//======================

vector<vector<int>> table;
table.resize(x);

for(auto & col: table)
    col.resize(y);

// 9 == bomba
// 0 == empty

for (int i = 0; i < bombs; ++i) {
    int row = srand(time_now()) % x;
    int col = srand(time_now()) % y;

    if(table[col][row] == 9) {
        --i;
        continue;
            }
    
    table[col][row] = 9;
}

//======================

for(int col = 0; col < x; ++col) {
    for(int row = 0; row < y; ++row) {
        
        if(table[col][row] == 9)
            continue;

        /*        
            col - 1, row
        col + 1, row
        col    , row - 1
        col    , row + 1
        col    , row
        col - 1, row - 1
        col + 1, row - 1
        col - 1, row + 1
        col + 1, row + 1            
        */
    
        int bombs_around = 0;    
        
        int cols[] = [col - 1, col, col + 1];
        int rows[] = [row - 1, row, row + 1];
                
        for(int l = 0; l < 3; ++l) {
            for(int k = 0; k < 3; ++k) {
                if(cols[l] < 0 || cols[l] > x - 1 || rows[k] < 0 || rows[k] > y - 1)
                    continue;
                    
                if(table[cols[l]][rows[k]] == 9)
                    bombs_around++;
            }
        }
        
        table[col][row] = bombs_around;
}
Игра "Сапер"
3 этапа:
1. Создать поле. Расставить бомбы
2. Расставить цифры, которые говорят, сколько бомб вокруг
3. Кликнуть по полю, получить результат:
а) Пустое место. Открываются все пустые рядом и пустые рядом с ними и т.д.
б) Цифра
в) Бомба

Сделал 2 этапа:
int x, y, bombs;

//======================

vector<vector<int>> table;
table.resize(x);

for(auto & col: table)
    col.resize(y);

// 9 == bomba
// 0 == empty

for (int i = 0; i < bombs; ++i) {
    int row = srand(time_now()) % x;
    int col = srand(time_now()) % y;

    if(table[col][row] == 9) {
        --i;
        continue;
            }
    
    table[col][row] = 9;
}

//======================

for(int col = 0; col < x; ++col) {
    for(int row = 0; row < y; ++row) {
        
        if(table[col][row] == 9)
            continue;

        /*        
            col - 1, row
        col + 1, row
        col    , row - 1
        col    , row + 1
        col    , row
        col - 1, row - 1
        col + 1, row - 1
        col - 1, row + 1
        col + 1, row + 1            
        */
    
        int bombs_around = 0;    
        
        int cols[] = [col - 1, col, col + 1];
        int rows[] = [row - 1, row, row + 1];
                
        for(int l = 0; l < 3; ++l) {
            for(int k = 0; k < 3; ++k) {
                if(cols[l] < 0 || cols[l] > x - 1 || rows[k] < 0 || rows[k] > y - 1)
                    continue;
                    
                if(table[cols[l]][rows[k]] == 9)
                    bombs_around++;
            }
        }
        
        table[col][row] = bombs_around;
}