×
Samples Blogs Make Payment About Us Reviews 4.9/5 Order Now

Create A Game Search Problem in Java Assignment Solution

July 01, 2024
Ellie Icely
Ellie Icely
🇬🇧 United Kingdom
Java
PhD in Computer Science from the University of Hertfordshire, with 8 years of experience in Java assignments. Expert in delivering high-quality, efficient solutions for complex programming problems. Passionate about teaching and mentoring students.
Key Topics
  • Instructions
    • Objective
  • Requirements and Specifications
Tip of the day
Use Python libraries effectively by importing only what you need. For example, if you're working with data, using libraries like pandas and numpy can save time and simplify complex tasks like data manipulation and analysis.
News
In 2024, the Biden-Harris Administration has expanded high-dosage tutoring and extended learning programs to boost academic achievement, helping programming students and others recover from pandemic-related setbacks. These initiatives are funded by federal resources aimed at improving math and literacy skills​

Instructions

Objective

Write a java assignment program to solve a game search problem in a java programming language. This assignment challenges you to implement a solution that tackles a game search problem using Java. Your task is to create a program that can navigate through a game space, searching for a specific goal. Through this assignment, you will not only enhance your Java programming skills but also gain experience in problem-solving and algorithmic thinking within the context of game search.

Requirements and Specifications

program-to-solve-a-game-search-problem-in-java
program-to-solve-a-game-search-problem-in-java 1
program-to-solve-a-game-search-problem-in-java 2
program-to-solve-a-game-search-problem-in-java 3
program-to-solve-a-game-search-problem-in-java 4

Source Code

BOARD

import java.util.ArrayList; import java.util.Collection; import java.util.Objects; public class Board { public static final int SIZE = 6; private static final int[][] DIRS = {{-1,-1}, {-1,0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}}; private static final int O = 1; private static final int X = 2; private static final int COVERED = 3; private final int[][] grid = new int[SIZE][SIZE]; public Board makeMove(Location location, boolean firstPlayerToMove) { if (grid[location.row][location.col] != 0) { return null; } Board copy = new Board(); for (int i = 0; i for (int j = 0; j copy.grid[i][j] = grid[i][j]; } } copy.grid[location.row][location.col] = firstPlayerToMove ? O : X; for (int[] d : DIRS ) { if (location.row + d[0] < SIZE && location.row + d[0] >= 0 && location.col + d[1] < SIZE && location.col + d[1] >= 0) { if (copy.grid[location.row + d[0]][location.col + d[1]] == 0) { copy.grid[location.row + d[0]][location.col + d[1]] = COVERED; } } } return copy; } public int evaluate(boolean firstPlayerToMove) { if (getPossibleMoves().isEmpty()) { return firstPlayerToMove ? Integer.MIN_VALUE : Integer.MAX_VALUE; } return 0; } public Collection getPossibleMoves() { Collection result = new ArrayList<>(); for (int i = 0; i for (int j = 0; j if (grid[i][j] == 0) { result.add(new Location(i, j)); } } } return result; } public static class Location { int row; int col; Location(int row, int col) { this.row = row; this.col = col; } @Override public String toString() { return "(" + row + "," + col + ")"; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } Location location = (Location) o; return row == location.row && col == location.col; } @Override public int hashCode() { return Objects.hash(row, col); } } public boolean isOver() { return getPossibleMoves().isEmpty(); } @Override public String toString() { StringBuilder builder = new StringBuilder(); for (int i = 0; i for(int j = 0; j builder.append("["); switch (grid[i][j]) { case 0: builder.append(" "); break; case 1: builder.append("O"); break; case 2: builder.append("X"); break; case 3: builder.append("/"); break; default: throw new IllegalStateException(); } builder.append("]"); } builder.append(System.lineSeparator()); } return builder.toString(); } }

SOLVER

public class Solver { private static final int DEPTH = 4; public static Board.Location findMove(Board board, boolean firstPlayerToMove, boolean pruning) { NodeResult result = minimax(board, 0, Integer.MIN_VALUE, Integer.MAX_VALUE, firstPlayerToMove, pruning); // System.out.println(pruning ? "AB Pruning Algorithm:" : "Minimax Algorithm:"); // System.out.println("Board Size - (" + Board.SIZE + "x" + Board.SIZE + ")"); // System.out.println("Nodes Expanded - " + result.nodesExpanded); // System.out.println("Depth - " + DEPTH); return result.move; } private static NodeResult minimax(Board board, int depth, int alpha, int beta, boolean firstPlayerMove, boolean pruning) { if (board.isOver() || depth == DEPTH) { return new NodeResult(board, null, board.evaluate(firstPlayerMove), 1, 0); } if (firstPlayerMove) { int maxDepth = 0; int nodesExpanded = 1; NodeResult best = null; for (Board.Location loc : board.getPossibleMoves()) { NodeResult res = minimax(board.makeMove(loc, firstPlayerMove), depth+1, alpha, beta, false, pruning); nodesExpanded += res.nodesExpanded; maxDepth = Math.max(maxDepth, 1 + res.depthLevel); if (best == null || res.value > best.value) { best = new NodeResult(board, loc, res.value); } // updating search statistics best.nodesExpanded = nodesExpanded; best.depthLevel = maxDepth; // making pruning if necessary if (pruning) { if (best.value >= beta) { break; } alpha = Math.max(alpha, best.value); } } return best; } else { int maxDepth = 0; int nodesExpanded = 1; NodeResult best = null; for (Board.Location loc : board.getPossibleMoves()) { NodeResult res = minimax(board.makeMove(loc, firstPlayerMove), depth+1, alpha, beta, true, pruning); nodesExpanded += res.nodesExpanded; maxDepth = Math.max(maxDepth, 1 + res.depthLevel); if (best == null || res.value < best.value) { best = new NodeResult(board, loc, res.value); } // updating search statistics best.nodesExpanded = nodesExpanded; best.depthLevel = maxDepth; // making pruning if necessary if (pruning) { if (best.value <= alpha) { break; } beta = Math.min(beta, best.value); } } return best; } } private static class NodeResult { Board board; Board.Location move; int value; int nodesExpanded; int depthLevel; public NodeResult(Board board, Board.Location move, int value, int nodesExpanded, int depthLevel) { this.board = board; this.move = move; this.value = value; this.nodesExpanded = nodesExpanded; this.depthLevel = depthLevel; } public NodeResult(Board board, Board.Location move, int value) { this(board, move, value, 0, 0); } } }

TESTER

import java.io.IOException; import java.io.PrintWriter; import java.util.Scanner; public class Tester { enum SearchType { MM, AB; } private static final String OUTPUT_FILENAME = "Readme.txt"; public static void main(String[] args) { try(Scanner scanner = new Scanner(System.in)) { String[] parts = scanner.nextLine().split("\\s+"); int aiPlayer = Integer.parseInt(parts[0]); SearchType st = SearchType.valueOf(parts[1]); Board board = new Board(); int currPlayer = 1; while(!board.isOver()) { System.out.println(board); if (currPlayer == aiPlayer) { Board.Location chosen = Solver.findMove(board, currPlayer == 1, st == SearchType.AB); System.out.println("Move " + chosen + " is chosen"); board = board.makeMove(chosen, currPlayer == 1); } else { Board.Location chosen = null; while(chosen == null) { try { System.out.println("Input your move: "); String[] locs = scanner.nextLine().split("\\s+"); if (locs.length != 2) { throw new IllegalArgumentException(); } int r = Integer.parseInt(locs[0]); int c = Integer.parseInt(locs[1]); Board.Location loc = new Board.Location(r, c); if (board.getPossibleMoves().contains(loc)) { chosen = loc; } else { throw new IllegalArgumentException(); } } catch (Exception e) { System.out.println("Invalid input"); } } System.out.println("Move " + chosen + " is chosen"); board = board.makeMove(chosen, currPlayer == 1); } currPlayer = 3 - currPlayer; } System.out.println(board); System.out.println("Player " + currPlayer + " lost"); } } }

Similar Samples

Visit ProgrammingHomeworkHelp.com to view our extensive collection of sample assignments. Our examples showcase expertise across a range of programming languages and topics, illustrating our commitment to delivering high-quality solutions. Explore these samples to experience how we can assist you in achieving academic success with your programming projects.