Question
I need help getting my code to work. /** * fifteen.c * * Implements Game of Fifteen (generalized to d x d). * * Usage:
I need help getting my code to work.
/** * fifteen.c * * Implements Game of Fifteen (generalized to d x d). * * Usage: fifteen d * * whereby the board's dimensions are to be d x d, * where d must be in [DIM_MIN,DIM_MAX] * * Note that usleep is obsolete, but it offers more granularity than * sleep and is simpler to use than nanosleep; `man usleep` for more. */
#define _XOPEN_SOURCE 500 #include
// quit if user inputs 0 (for testing) if (tile == 0) { break; } // log move (for testing) fprintf(file, "%i ", tile); fflush(file); // move if possible, else report illegality if (!move(tile)) { printf(" Illegal move. "); usleep(500000); } // sleep thread for animation's sake usleep(500000); }
// close log fclose(file); // success return 0; } /** * Clears screen using ANSI escape sequences. */ void clear(void) { printf("\033[2J"); printf("\033[%d;%dH", 0, 0); } /** * Greets player. */ void greet(void) { clear(); printf("WELCOME TO GAME OF FIFTEEN "); usleep(2000000); } /** * Initializes the game's board with tiles numbered 1 through d*d - 1 * (i.e., fills 2D array with values but does not actually print them). */ void init(void) { // Get Total number of spaces int total = d * d;
// Add tiles to board for (int i = 0; i < d; i++) { for (int j = 0; j < d; j++) { // Decrement value by one and assign to array board[i][j] = --total; } }
// Swap 2 and 1 if even number of spaces if ((d * d) % 2 == 0) { board[d - 1][d - 3] = 1; board[d - 1][d - 2] = 2; } /** * Prints the board in its current state. */ void draw(void) { // Loop through board array for (int i = 0; i < d; i++) { for (int j = 0; j < d; j++) { // Print line instead of zero if (board[i][j] == 0) { printf(" _"); } else { printf("%3i", board[i][j]); } }
printf(" "); } } /** * If tile borders empty space, moves tile and returns true, else * returns false. */ bool move(int tile) { // Loop through board array for (int i = 0; i < d; i++) { for (int j = 0; j < d; j++) { // Print line instead of zero if (board[i][j] == 0) { printf(" _"); } else { printf("%3i", board[i][j]); } }
printf(" "); } } }
// Check nearby spaces { if (row - 1 >= 0 && board[row - 1][column] == 0)
board[row - 1][column] = board[row][column]; board[row][column] = 0; return true; } else if (row + 1 < d && board[row + 1][column] == 0) { board[row + 1][column] = board[row][column]; board[row][column] = 0; return true; } else if (column - 1 >= 0 && board[row][column - 1] == 0) { board[row][column - 1] = board[row][column]; board[row][column] = 0; return true; } else if (column + 1 < d && board[row][column + 1] == 0) { board[row][column + 1] = board[row][column]; board[row][column] = 0; return true; }
return false; } /** * Returns true if game is won (i.e., board is in winning configuration), * else false. */ bool won(void) { { // Set counter int counter = 0;
// Check each tile to ensure it's in order for (int i = 0; i < d; i++) { for (int j = 0; j < d; j++) { // Check if last spot and if not correct value if (++counter != (d * d) && board[i][j] != counter) { return false; } } }
return true; }
return true; }
I had to
Implement init.
Implement draw.
Implement move.
Implement won.
please leave everything as is, I just need to know where I went wrong
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started