#arrays #c #function #pointers #multidimensional-array
Вопрос:
Для моей лаборатории скользящих головоломок мне необходимо создать игру с 4х4 плитками под номером 15-1 (0-пустое место).Я начал продвигаться с моим кодом, но я понятия не имею, как создать свою функцию moveTile. Я предполагаю, что он может использовать указатели, но я не уверен, как это закодировать. Мне также нужно использовать другую функцию, чтобы определить, является ли перемещение допустимым. Перемещение будет допустимым только в том случае, если выбранная пользователем плитка находится рядом с пустой плиткой (0). Цель состоит в том, чтобы весь массив располагался в порядке возрастания (1-15). Мы будем очень признательны за любую помощь. Откровенно говоря, мои навыки кодирования все еще немного грубоваты
#include <stdio.h>
const int row = 4; //global variables for row column size of board
const int col = 4;
//function prototypes
void startGame(void);
void endGame(void);
void displayGame(int arr [row][col]);
int is_move_valid(int tile);
int moveTile(int arry[][]);
/*int moveTile() //function to move tiles
{
}
*/
int main(void) {
startGame(); //Prints game initialization message
char a; //char variable for user to start game
printf("Menu: [p]rint , [m]ove , [q]uit: n"); //gives user options to start game, move piece, or quit
scanf(" %c", amp;a);
while (getchar() != 'q') { //loops the game unless user decides to quit
if ( a =='p')
{
int board [][4] = { {0, 15, 14, 13},
{12, 11, 10, 9},
{8, 7, 6, 5},
{4, 3, 2, 1}};
displayGame(board);
}
printf("nMenu: [p]rint , [m]ove , [q]uit:n");
}
endGame();
return 0;
}
void startGame() //game initialization function definition
{
printf("Setting Up The Gamen");
}
void displayGame(int arr [row][col]){ //board display function
int i, j;
for (i=0; i<row; i ) { //creates row elements
printf("n"); //formatting into 4x4
for (j=0; j<col; j ) { //creates column elements
printf("=", arr[i][j]);
}
}
}
int is_move_valid(int tile)
{
}
void endGame(void) //game teardown
{
printf("Ending the gamen");
}
int moveTile(int arry[][]){
int t; // integer variable for tile the user wants to move
printf("Which tile would you like to move? :n ");
scanf("%d", amp;t);
}
Комментарии:
1. Вам нужно найти квадрат, содержащий плитку. Затем вам нужно проверить, находится ли он рядом с плиткой, равной 0, имея в виду, что плитка также может находиться рядом с краем сетки. Если плитка находится рядом с 0, вы устанавливаете для этого другого квадрата значение плитки, а для текущего квадрата-0. Разбейте проблему на более мелкие, очень конкретные проверки.
2. Есть два способа взглянуть на ходы. Один из них заключается в перемещении определенной пронумерованной плитки в определенном направлении, которое указывает на открытое пространство. Использование этого подхода означает, что выбранная плитка должна иметь открытое пространство в правильном смежном положении, при условии, что смежное положение, конечно, находится на доске. Это довольно сложно. Другой способ взглянуть на это таков: движение-это просто перемещение плитки в открытое пространство с определенного направления. Возможно, вы сочтете, что последний подход более полезен с точки зрения пользовательского интерфейса.
3.
int arry[][]
: это неверно, вам необходимо указать второе измерение, напримерint arry[][4]
Ответ №1:
Пока вы думаете о том, как реализовать эти движения , позвольте мне отметить, что ваш дизайн выглядит как бы вывернутым наизнанку; большая вещь будет playGame()
, так что это будет важная функция, вызываемая by main()
.
int main(void) {
printf("Setting Up The Gamen");
playGame();
printf("Thank you for playing!n");
}
Теперь у вас есть начало, середина и конец. И пока не нуждаюсь ни в каких комментариях.
Если для запуска или демонтажа требуется больше, то вы можете поместить эти строки также в функции.
ходы: нулевая плитка может двигаться как ладья в шахматах: от 1 до максимальных квадратов, но не по диагонали; но пользователь, вероятно, не хочет перемещаться по лунке.