2016-10-31 2 views
0

Я работаю над игрой тральщика в консоли и хотел бы знать, как я могу изменить значение массива с помощью функции?Как изменить значение массива с помощью функции?

У меня есть глобальный char table[10][10];, но он не может быть глобальным, и мне нужно изменить размер на то, что пользователь хочет при запуске программы. Также мне нужно изменить значение table в этой функции:

int findnearbymines(int row, int col) { 
    int mines = 0; 

    if(table[row - 1][col] == '*') 
     mines++; 
    if(table[row + 1][col] == '*') 
     mines++; 
    if(table[row][col - 1] == '*') 
     mines++; 
    if(table[row][col + 1] == '*') 
     mines++; 

    if(table[row - 1][col + 1] == '*') 
     mines++; 
    if(table[row - 1][col - 1] == '*') 
     mines++; 
    if(table[row + 1][col + 1] == '*') 
     mines++; 
    if(table[row + 1][col - 1] == '*') 
     mines++; 

    return mines; 
} 
+2

Какой у вас вопрос? –

+4

Вы должны быть осторожны с тем, как вы индексируете таблицу. Например, если пользователь нажимает на самый первый квадрат, 'row-1' и' col-1' не существует. –

+0

Вне функции, если бы был параметр, 'table' не имел бы значений. –

ответ

0

Если он не может быть глобальным, то вы должны будете delcare его в main функции после того, как вы определили размер матрицы.

Читайте здесь: C - reading command line parameters, чтобы узнать, как читать параметры из командной строки. Вам нужно будет сделать это, прежде чем объявлять свою матрицу.

Что касается вашей функции вы должны передать вашу матрицу в качестве параметра вашей функции как таковой:

int findnearbymines(int row, int col, char** table, int width, int height) 

Кроме того, необходимо добавить проверки в каждом из ваших if statments, чтобы убедиться, что вы не выходите из границ матрицы, если игрок выбирает плитку на краю сетки.

Надеюсь, это поможет! Просто спросите в комментариях, если вам нужно дополнительное разъяснение или у вас больше вопросов.

+2

Будьте очень осторожны. является ли 'char **' правильным типом для параметра 'table', зависит от того, как он объявлен. Было бы * not * быть правильным типом, чтобы идти с исходным глобальным определением. –

+1

Кроме того, возможность обнаружения некоторых граничных ячеек зависит от знания размеров сетки, и они не передаются с помощью представленной вами функции. –

+1

@JohnBollinger Хорошая точка. Отредактировано – theKunz

Смежные вопросы