Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

This assignment involves coding the game 2048 using 2-D arrays. I really just need help with the fourth and fifth methods. I need help with

This assignment involves coding the game 2048 using 2-D arrays. I really just need help with the fourth and fifth methods. image text in transcribed
image text in transcribed
image text in transcribed
I need help with the mergeLeft and transpose. Here is the template code 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
String 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;
}
}
verview of files provided Ie 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 iderstanding 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 emply 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 free to use this driver to test all of your methods. Feol 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 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. Additionaily, for makeMove, moves are represented by using the WASD keys like arrow keys (w is up, a is left, s 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 oquivalent to TextDriver and functions in the same way - you are free to use this driver to test all of your methods. Feel free to edit this class, as it is provided only to help you tost, 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 solecting the number that appears for each option. " To test individual methods, solect an input file name from the list. Then, solect a method to lest by typing in the number that appears for each method in the list. You will then see the board stored in the input fille. For all methods besides makeMove, press any hey to tost your method. Press any key again to exit teating that method. - For makeMove, moves are represented by using the WASD Keys like arrow keys ( w is up, a, is left, s is down, and dis right). Type in the letter corresponding to the move you want to test when you see the board stored in the input filie. Once you type that letter, the move you want to fest wif be made. Press any key afterward to exit testing that method. Playing the full game makes use of the WASD keys like arrow keys (w is up, a is ieft, 5 is down, and dis right). Pross "q" to quat. - Stdin and StdOut: labraries to handle input and output. Do not edit these classes. - Stapandom: Provides methode for generating random numbers. Don't edit or submit to Autolab. - Collage, Picture, StdDraw: Heper libraries to support AnimatedDriver. Don't edit or submit to Autolab. - Input Files: Preset boards youre able to use to tost your 2048 board in the divers (intputt in, input2 in...). You can use all input fies to test all methods. Each input file contains 4 lines, oach with 4 space separated mumbers. Each number is either of (reprosents an amply space) or a powitr of 2 . (represents a normal tile). Feel tree to make your own input files, as they will not be submitted to Autolab. 4. mergeLeft Morge all identcal nonzero, horizontal pairs in the board. - The lettmost neighbor (ex. The first 2 in 022.20 ) wil double its value, while the rightmost neighbor (ox. The second 2 in 1022.07 will become 0 . The method will turn this row into 0400. - Only pairs will merge. 3-tlo noighbors and 4-the neighbors will not merge to become one tile. For example, "2.2.2.0" becomes "4 020 and 2.222C becomes "4040\%. - Watch this video to learn more about this method. Here is an example of testing this method using input1 in in both drivers. The next two methods (transpose and fliphlows) can be applied in sequence to rotate the board 9o degrees clockwise. This will allow you to reube your existing code for wipetents and meryetetc for any of the four directions. For axample, we can swipe right by rotating the board twice, callng wwipelaft, then rotating the board twice to retum it to its original arientation. The provided method ratatetosses cats tranapose and riipsows in soquence to complele a 90 degree clockwise rotation. - Watch this video to learn more about the intution bohind these mothodo. Interchange the rows and colurnns of the board. In other words, row 1 should become column 1 , row 2 becomes column 2 , and so on. More formally. anenoard 11111 becomes gasencard ]}1 for all 0

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

SQL Server T-SQL Recipes

Authors: David Dye, Jason Brimhall

4th Edition

1484200616, 9781484200612

More Books

Students also viewed these Databases questions

Question

a score of 60 or higher on the test?

Answered: 1 week ago