Answered step by step
Verified Expert Solution
Question
1 Approved Answer
This assignment involves coding the game 2048 using 2-D arrays. I really just need help with the sixth and seventh methods. I need help with
This assignment involves coding the game 2048 using 2-D arrays. I really just need help with the sixth and seventh methods.
I need help with the flipRows and makeMove. Here is the template for Board.java:
package game;
import java.util.ArrayList;
/**
* 2048 Board
* Methods to complete:
* updateOpenSpaces(), addRandomTile(), swipeLeft(), mergeLeft(),
* transpose(), flipRows(), makeMove(char letter)
*
**/
public class Board {
private int[][] gameBoard; // the game board array
private ArrayList openSpaces; // the ArrayList of open spots: board cells without numbers.
/**
* Zero-argument Constructor: initializes a 4x4 game board.
**/
public Board() {
gameBoard = new int[4][4];
openSpaces = new ArrayList();
}
/**
* One-argument Constructor: initializes a game board based on a given array.
*
* @param board the board array with values to be passed through
**/
public Board ( int[][] board ) {
gameBoard = new int[board.length][board[0].length];
for ( int r = 0; r
for ( int c = 0; c
gameBoard[r][c] = board[r][c];
}
}
openSpaces = new ArrayList();
}
/**
* 1. Initializes the instance variable openSpaces (open board spaces) with an empty array.
* 2. Adds open spots to openSpaces (the ArrayList of open BoardSpots).
*
* Note: A spot (i, j) is open when gameBoard[i][j] = 0.
*
* Assume that gameBoard has been initialized.
**/
public void updateOpenSpaces() {
// WRITE YOUR CODE HERE
}
}
/**
* Adds a random tile to an open spot with a 90% chance of a 2 value and a 10% chance of a 4 value.
* Requires separate uses of StdRandom.uniform() to find a random open space and determine probability of a 4 or 2 tile.
*
* 1. Select a tile t by picking a random open space from openSpaces
* 2. Pick a value v by picking a double from 0 to 1 (not inclusive of 1);
* 3. Update the tile t on gameBoard with the value v
*
* Note: On the driver updateOpenStapes() is called before this method to ensure that openSpaces is up to date.
**/
public void addRandomTile() {
// WRITE YOUR CODE HERE
}
/**
* Swipes the entire board left, shifting all nonzero tiles as far left as possible.
* Maintains the same number and order of tiles.
* After swiping left, no zero tiles should be in between nonzero tiles.
* (ex: 0 4 0 4 becomes 4 4 0 0).
**/
public void swipeLeft() {
// WRITE YOUR CODE HERE
}
/**
* Find and merge all identical left pairs in the board. Ex: "2 2 2 2" will become "2 0 2 0".
* The leftmost value takes on double its own value, and the rightmost empties and becomes 0.
**/
public void mergeLeft() {
// WRITE YOUR CODE HERE
}
/**
* Rotates 90 degrees clockwise by taking the transpose of the board and then reversing rows.
* (complete transpose and flipRows).
* Provided method. Do not edit.
**/
public void rotateBoard() {
transpose();
flipRows();
}
/**
* Updates the instance variable gameBoard to be its transpose.
* Transposing flips the board along its main diagonal (top left to bottom right).
*
* To transpose the gameBoard interchange rows and columns.
* Col 1 becomes Row 1, Col 2 becomes Row 2, etc.
*
**/
public void transpose() {
// WRITE YOUR CODE HERE
}
/**
* Updates the instance variable gameBoard to reverse its rows.
*
* Reverses all rows. Columns 1, 2, 3, and 4 become 4, 3, 2, and 1.
*
**/
public void flipRows() {
// WRITE YOUR CODE HERE
}
/**
* Calls previous methods to make right, left, up and down moves.
* Swipe, merge neighbors, and swipe. Rotate to achieve this goal as needed.
*
* @param letter the first letter of the action to take, either 'L' for left, 'U' for up, 'R' for right, or 'D' for down
* NOTE: if "letter" is not one of the above characters, do nothing.
**/
public void makeMove(char letter) {
// WRITE YOUR CODE HERE
}
/**
* Returns true when the game is lost and no empty spaces are available. Ignored
* when testing methods in isolation.
*
* @return the status of the game -- lost or not lost
**/
public boolean isGameLost() {
return openSpaces.size() == 0;
}
/**
* Shows a final score when the game is lost. Do not edit.
**/
public int showScore() {
int score = 0;
for ( int r = 0; r
for ( int c = 0; c
score += gameBoard[r][c];
}
}
return score;
}
/**
* Prints the board as integer values in the text window. Do not edit.
**/
public void print() {
for ( int r = 0; r
for ( int c = 0; c
String g = Integer.toString(gameBoard[r][c]);
StdOut.print((g.equals("0")) ? "-" : g);
for ( int o = 0; o
StdOut.print(" ");
}
}
StdOut.println();
}
}
/**
* Prints the board as integer values in the text window, with open spaces denoted by "**"". Used by TextDriver.
**/
public void printOpenSpaces() {
for ( int r = 0; r
for ( int c = 0; c
verview of files provided le provide two drivers (text and graphic) to help you test the individual methods. We suggest that you start with the text driver but once you have a good nderstanding of the assignment then you may use the graphic driver. - Board: The Board class contains all methods needed to construct a functioning 2048 game. Edit the empty methods with you solution, but DO NOT edit the provided ones or the methods signatures of any method. This is the file you submit. - BoardSpot: An object used to represent a location on the board. It houses a row and a column, along with getters and setters. Don't edit or submit to Autolab. - TextDriver: A tool to test your 2048 board interactively using only text-based boards. This driver is equivalent to AnimatedDriver and functions in the same way - you are tree to use this driver to test all of your methods. Feel free to edit this class, as it is provided only to heip you test. It is not submitted and/or graded. - To use this driver, pick whether you want to test individual methods or play the full game (this option requires all methods to be comploted) by selecting the number that appears for each option. - To test individual methods, first type in the full file name for an input fle. Then, select a method to test by typing in the number that appears for each method in the list. Additionally, for makeMove, moves are represented by using the WASD keys like arrow keys (w is up, a is loft, 5 is down, and d is right). Type in the letter corresponding to the move you want to test. . Playing the full game makes use of the WASD keys like arrow keys ( W is up, A is left, S is down, and D is right,. Press ' O to qut. - AnimatedDriver: A tool to test your 2048 board interactively through rendered images. This driver is equivalent to TextDriver and functions in the same way - you are tree to use this driver to test all of your methods. Feel free to edit this class, as it is provided only to help you test. It is not submitted and/or graded. - To use this driver, pick whether you want to test individual methods or play the full game (this option requires all methods to be completed) by solocting the number that appears for each option. a To test individual methods, select an input file name from the list. Then, select a method to test by typing in the number that appears for each method in the list. You will then see the board stored in the input file. For all methods besides makeMove, press any key to test your method. Press any koy again to exit testing that method. - For makeMove, moves are representod by using the WASD keys like arrow keys (w is up, a is left, 5 is down, and d is right). Type in the letter corresponding to the move you want to test when you see the board stored in the input flete. Once you type that letter, the move you want to teat wir be made. Press any key afterward to exit testing that method. Playing the full game makes use of the WASD keys like arrow koys ( w is up, a is left, s is down, and d is right). Press "q" to quit. - Stdin and StdOut: libraries to handle input and output. Do not edit these classes. - StdAandom: Provides methods for generating random numbers. Don't edit or submit to Autolab. - Collage, Picture, StdDraw: Helper libearies to support AnimatodDriver. Don't edit or submit to Autolab. - Input Files: Preset boards you're able to use to test your 2048 board in the drivers (intputt in, input2 in...) You can use all input files to test all methods. Each input file contains 4 lines, each with 4 space soparated numbers. Each number is euther 0 (represents an ompty spece) or a power of 2 (represonts a normal tile). Feol free to make your own input files, as they will not be submitted to Autolab. 6. flipRows Reverse all rows. - Columns 1,2,3, and 4 (in order) will have a new order of 4,3,2, and 1. For example, the row 20407 would became 20402 . - Repeat this procedure for all 4 rows. - Watch this video to learn more about this method. Here is an example of testing this method using inputt, in in both drivers. Putting everything together by caling previous mothods to construct 2048 moves in all directions. Rotate as necessary to cornplete this mothod using dillerent directions. Swipe ieft, morge neighbors, and swipe left again to re-fill blanik spaces. - The mothod input parameter is a character that indicates which direction to move ( CU==up,A ' = right, D ' = down, ' L ' = left). Assume that you wil only receive these characters, case-sensitive, as arguments in the makoMove method. - Be sure to have tranapose, fiipfiove, -nipeteft, and rerpeteft completed belore doing this method and all provious methods comploted before testing - As stated earlier, call rotateboard to help with non-left directions. This allows for MUCH better codo rouse than redoing your mipiteft and mergetett in 3 new directions. - To test this method, select the "makeMove" option in either driver and enter a character. You can use the W, A, S, and D kigss like arrow keys (w i up. a w left, 5 = down and d= right). Even though you will be using the WASD keys like arrow keys, these keys still map to U, L, D, and R respectively; for instance, pressing W will call makeMove with ' U ' as the letter parameter. - Watch this video to leam more about this method. Hero is the expected output after testing makeMove with inputt in, moving upString g = Integer.toString(gameBoard[r][c]);
for ( BoardSpot bs : getOpenSpaces() ) {
if (r == bs.getRow() && c == bs.getCol()) {
g = "**";
}
}
StdOut.print((g.equals("0")) ? "-" : g);
for ( int o = 0; o
StdOut.print(" ");
}
}
StdOut.println();
}
}
/**
* Seed Constructor: Allows students to set seeds to debug random tile cases.
*
* @param seed the long seed value
**/
public Board(long seed) {
StdRandom.setSeed(seed);
gameBoard = new int[4][4];
}
/**
* Gets the open board spaces.
*
* @return the ArrayList of BoardSpots containing open spaces
**/
public ArrayList getOpenSpaces() {
return openSpaces;
}
/**
* Gets the board 2D array values.
*
* @return the 2D array game board
**/
public int[][] getBoard() {
return gameBoard;
}
}
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