// FifteenPuzzle.java public class FifteenPuzzle { private int[][] board; private int blank_x; private int blank_y; public FifteenPuzzle() { this.board = new int[4][4]; int num = 1; for (int i=0; i<4; ++i) for (int j=0; j<4; ++j) { this.board[i][j] = num++; } this.blank_x = 3; this.blank_y = 3; } public String toString() { String strBoard=""; for (int i=0; i<4; ++i) { for (int j=0; j<4; ++j) { if (this.board[i][j]==16) strBoard += " "; else strBoard += String.format("%3d",this.board[i][j]); } strBoard += "\n"; } return strBoard; } public boolean moveUp() { if (this.blank_x>0) { int temp = this.board[blank_x][blank_y]; this.board[blank_x][blank_y]=this.board[blank_x-1][blank_y]; this.board[blank_x-1][blank_y]=temp; this.blank_x--; return true; } return false; } public boolean moveDown() { if (this.blank_x<3) { int temp = this.board[blank_x][blank_y]; this.board[blank_x][blank_y]=this.board[blank_x+1][blank_y]; this.board[blank_x+1][blank_y]=temp; this.blank_x++; return true; } return false; } public boolean moveLeft() { if (this.blank_y>0) { int temp = this.board[blank_x][blank_y]; this.board[blank_x][blank_y]=this.board[blank_x][blank_y-1]; this.board[blank_x][blank_y-1]=temp; this.blank_y--; return true; } return false; } public boolean moveRight() { if (this.blank_y<3) { int temp = this.board[blank_x][blank_y]; this.board[blank_x][blank_y]=this.board[blank_x][blank_y+1]; this.board[blank_x][blank_y+1]=temp; this.blank_y++; return true; } return false; } public boolean isWinner() { int num = 1; for (int i=0; i<4; ++i) for (int j=0; j<4; ++j) { if (this.board[i][j] != num++) return false; } return true; } } // Demo.java // report bugs to xusun09@gmail.com import java.util.Scanner; public class Demo { public static void main(String[] args) { Scanner reader = new Scanner(System.in); FifteenPuzzle fp = new FifteenPuzzle(); System.out.println(fp.toString()); System.out.println("Enter command or 'done' to finish"); while(true) { System.out.print("Enter command (u,d,l,r):"); String command = reader.nextLine().toLowerCase(); if (command.equals("u")) fp.moveUp(); else if (command.equals("d")) fp.moveDown(); else if (command.equals("l")) fp.moveLeft(); else if (command.equals("r")) fp.moveRight(); else if (command.equals("done")) break; System.out.println(fp.toString()); if (fp.isWinner()) System.out.println("WINNING BOARD!!\n"); } } }
Monday, October 19, 2009
HW5 example
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment