Я пытаюсь написать код для функции, чтобы показать плитки в сапере
Эй, я пытаюсь написать код для функции, чтобы показать плитки без бомб вокруг них вокруг выбранного кода. я написал код, который может выявить бомбы вокруг одной плитки с диапазоном 1, и я могу использовать эту точную функцию для всех плиток вокруг выбранной снова, но это слишком много работы и не делает весь код переносимым.
Что я уже пробовал:
итак, то, что я сделал, это создал два массива, один из них-это минное поле, которое пользователь не может внести никаких изменений в "hidden_board", а другой - "my_board", который все изменения применяются к этому массиву, и вот функции, которые я написал:
void reveal_tiles_without_bombs_prime(int x, int y, int my_board[][9], int hidden_board[][9]){ --x; --y; if(x>=0 && x<9 && y>=0 && y<9){ if (my_board[x][y]==10){ if (number_of_bombs_around(x,y,hidden_board)==0){ if (y+1<9){ if (number_of_bombs_around(x+1, y+1+1, hidden_board)==0) my_board[x][y+1]= 0; } if (y-1>=0){ if (number_of_bombs_around(x+1, y-1+1, hidden_board)==0) my_board[x][y-1]= 0; } if (x-1>=0){ if (number_of_bombs_around(x-1+1, y+1, hidden_board)==0) my_board[x-1][y]= 0; } if (x+1<9){ if (number_of_bombs_around(x+1+1, y+1, hidden_board)==0) my_board[x+1][y]= 0; } if ((y-1>=0) && (x-1>=0)){ if (number_of_bombs_around(x-1+1, y-1+1, hidden_board)==0) my_board[x-1][y-1]= 0; } if ((y+1<9) && (x-1>=0)){ if (number_of_bombs_around(x-1+1, y+1+1, hidden_board)==0) my_board[x-1][y+1]= 0; } if ((y-1>=0) && (x+1<9)){ if (number_of_bombs_around(x+1+1, y-1+1, hidden_board)==0) my_board[x+1][y-1]= 0; } if ((y+1<9) && (x+1<9)){ if (number_of_bombs_around(x+1+1, y+1+1, hidden_board)==0) my_board[x+1][y+1]= 0; } } } } }int массив my_board я использую 10 для нераскрытой плитки, которая не является бомбой, и числа от 0 до 8 для количества бомб вокруг раскрытой плитки и 11 для нераскрытой бомбы, а number_of_bombs_around-это еще одна функция, которая возвращает количество бомб вокруг данной плитки. таким образом, эта функция на самом деле вызывается только один раз в части else:
if (number_of_bombs_around(x,y, hidden_board)!=0){ my_board[x-1][y-1]= number_of_bombs_around(x,y,my_board); draw_mine_field(my_board); } else{ reveal_tiles_without_bombs_prime(x,y,my_board, hidden_board); my_board[x-1][y-1]= 0;
и после использования основной версии я должен использовать функцию ниже, чтобы показать все плитки без бомб вокруг них вокруг плитки, которая дана:
void reveal_tiles_without_bombs(int x, int y, int my_board[][9], int hidden_board[][9]){ --x; --y; if(x>=0 && x<9 && y>=0 && y<9){ if (my_board[x][y]==0){ if (y+1<9){ if (number_of_bombs_around(x+1, y+1+1, hidden_board)==0) my_board[x][y+1]= 0; } if (y-1>=0){ if (number_of_bombs_around(x+1, y-1+1, hidden_board)==0) my_board[x][y-1]= 0; } if (x-1>=0){ if (number_of_bombs_around(x-1+1, y+1, hidden_board)==0) my_board[x-1][y]= 0; } if (x+1<9){ if (number_of_bombs_around(x+1+1, y+1, hidden_board)==0) my_board[x+1][y]= 0; } if ((y-1>=0) && (x-1>=0)){ if (number_of_bombs_around(x-1+1, y-1+1, hidden_board)==0) my_board[x-1][y-1]= 0; } if ((y+1<9) && (x-1>=0)){ if (number_of_bombs_around(x-1+1, y+1+1, hidden_board)==0) my_board[x-1][y+1]= 0; } if ((y-1>=0) && (x+1<9)){ if (number_of_bombs_around(x+1+1, y-1+1, hidden_board)==0) my_board[x+1][y-1]= 0; } if ((y+1<9) && (x+1<9)){ if (number_of_bombs_around(x+1+1, y+1+1, hidden_board)==0) my_board[x+1][y+1]= 0; } } } }Итак, мой вопрос заключается в том, Могу ли я использовать функцию для вызова reveal_tiles_without_bombs для всех плиток вокруг выбранной, пока их больше не будет ? извините за длинные коды :)