In: Computer Science
Intro to Java Question. Please Provide code and pseudocode for understanding. Not receiving correct results currently.
Problem 5: Player Move Dungeon (10 points) (Game Development)
You're the lead programmer at a AAA studio making a sequel to the big hit game, Zeldar 2. You've been challenged to implement player movement in dungeons. The game is top-down, with dungeons modeled as a 2d grid with walls at the edges. The player's location is tracked by x,y values correlating to its row and column positions. Given the current position of the player and a sequence of input commands: w,a,s,d you must determine the new position of the player. The player must not be able to move outside the walls of the dungeon (i.e. grid)
Facts
● the player's position is modeled using two integer values (x, y)
● x represents the column position, left-right axis ● top-left corner is (0,0)
● y represents the row position, up-down axis
● “w” move up by decreasing y by 1
● “a” move left by decreasing x by 1
● “s” move down by increasing y by 1
● “d” move right by increasing x by 1
● if an input attempts to move player off grid, then ignore that move.
Input
The first input is the number of test cases. Each test case contains three lines of inputs. The first line is two positive integers that represent the dungeon's grid size, rows (length) columns (width). The second line is two non-negative integers representing the player's position in the dungeon grid, x,y. The third line represents the sequence of player movements "w", "s", "a", "d".
Output
The program should print the final location of the player in the form of , where “x” and “y” are the coordinates within the dungeon grid.
Sample Input
2
4 4
2 3
s s s w
10 10 9 4
s d w a
Sample Output
2 2 8 4
Java Code:
import java.io.Console;
import java.util.Scanner;
public class Dungeon {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numberOfTestCases;
numberOfTestCases = sc.nextInt();
int[][] resultArray = new int[numberOfTestCases][2];
for (int i = 0; i < numberOfTestCases; i++) {
int rows, columns;
int playerXPos, playerYPos;
String moves;
rows = sc.nextInt();
columns = sc.nextInt();
playerXPos = sc.nextInt();
playerYPos = sc.nextInt();
Console con = System.console();
moves = con.readLine();
for (int j = 0; j < moves.length(); j++) {
switch (moves.charAt(j)) {
case 's':
System.out.println("Move down");
if(playerYPos != columns-1)
{
playerYPos += 1;
}
break;
case 'w':
System.out.println("Move up");
if(playerYPos != 0)
{
playerYPos -= 1;
}
break;
case 'a':
System.out.println("Move Left");
if(playerXPos != 0)
{
playerXPos -= 1;
}
break;
case 'd':
System.out.println("Move Right");
if(playerXPos != rows-1)
{
playerXPos += 1;
}
break;
}
}
int[] answer = new int[]{playerXPos , playerYPos};
resultArray[i] = answer ;
}
for(int i = 0 ; i < resultArray.length ; i++)
{
for(int j = 0 ; j<resultArray[i].length ; j++)
{
System.out.println(resultArray[i][j] + " ");
}
}
}
}
pseudocode:
Pseudocode
function main
{
read howManytestCases
for each test case
{
read totalRows
read totalColumns
read playerXPosition
read playerYPosition
read totalMoves
for each move in totalMoves
{
case 's'
if playerYPosition is not at the wall
move playerYPosition by 1 to downwards by adding 1
playerYPosition <- playerYPosition + 1
case 'w'
if playerYPosition is not at the wall
move playerYPosition by 1 to upwards by subtracting 1
playerYPosition <- playerYPosition - 1
case 'a'
if playerXPosition is not at the wall
move playerXPosition by 1 to left by subtracting 1
playerXPosition <- playerXPosition - 1
case 'd'
if playerXPosition is not at the wall
move playerXPosition by 1 to right by adding 1
playerXPosition <- playerXPosition + 1
}
save the playerXPosition and playerYPosition in 2D array
}
display the playerXPosition and playerYPosition for each test
cases
}
Thank You!