Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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 #include #include #include // constants #define DIM_MIN 3 #define DIM_MAX 9 // board int board[DIM_MAX][DIM_MAX]; // dimensions int d; // prototypes void clear(void); void greet(void); void init(void); void draw(void); bool move(int tile); bool won(void); int main(int argc, string argv[]) { // ensure proper usage if (argc != 2) { printf("Usage: fifteen d "); return 1; } // ensure valid dimensions d = atoi(argv[1]); if (d < DIM_MIN || d > DIM_MAX) { printf("Board must be between %i x %i and %i x %i, inclusive. ", DIM_MIN, DIM_MIN, DIM_MAX, DIM_MAX); return 2; } // open log FILE *file = fopen("log.txt", "w"); if (file == NULL) { return 3; } // greet user with instructions greet(); // initialize the board init(); // accept moves until game is won while (true) { // clear the screen clear(); // draw the current state of the board draw(); // log the current state of the board (for testing) for (int i = 0; i < d; i++) { for (int j = 0; j < d; j++) { fprintf(file, "%i", board[i][j]); if (j < d - 1) { fprintf(file, "|"); } } fprintf(file, " "); } fflush(file); // check for win if (won()) { printf("ftw! "); break; } // prompt for move printf("Tile to move: "); int tile = get_int();

// 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

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Spatial Database Systems Design Implementation And Project Management

Authors: Albert K.W. Yeung, G. Brent Hall

1st Edition

1402053932, 978-1402053931

More Books

Students also viewed these Databases questions

Question

3. How effective is the team?

Answered: 1 week ago