Monday, October 19, 2009

HW5 example

// 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");
 
}
 
}
}

No comments: