// 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