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: