jump to navigation

putting a system together August 7, 2008

Posted by crystalchangdin in coding.
trackback

main

public class control {

 public static void main(String[] args) {
   TUI tui = new TUI();
  tui.start();
 }

}

TUI

import java.util.*;

public class TUI {
 private static final int NO_CHOICE = 0;
 private static final int PLAY_GAME = 1;
 private static final int EXIT = 2;

 private Player player1;
 private Player player2;
 private Game game;
 private Scanner in;

 public TUI()
 {
  this.player1 = new Player(“Player1″);
  this.player2 = new Player(“Player2″);
  this.game = null;
  this.in  = new Scanner(System.in);
 }
 
 public void start()
 {
  int choice = NO_CHOICE;
  while(choice != EXIT)
  {
   displayMainMenu();
   choice = readIntWithPrompt(“Enter choice”);
   executeChoice(choice);
  }
 }
 private void playGame(int numberOfSticks)
 {
  game = new Game(player1,player2,numberOfSticks);
  String s = game.toString();
  System.out.println(s);
  while(!game.gameOver())
  {
   game.play();
   reportPlay(game.previousPlayer());
  }
  reportWinner(game.winner());
 }
 private void displayMainMenu()
 {
  System.out.println();
  System.out.println(“Enter the number denoting the action to perform”);
  System.out.println(“Run game……” + PLAY_GAME);
  System.out.println(“EXIT……” + EXIT);
 }
 private void executeChoice(int choice)
 {
  System.out.println();
  if(choice == PLAY_GAME)
  {
   int numberOfSticks = readNumberOfSticks();
   playGame(numberOfSticks);
  }
  else if(choice == EXIT)
   System.out.println(“Good-Bye”);
  else
   System.out.println(choice + “is not valid.”);
 }
 private int readNumberOfSticks()
 {
  int number = -1;
  while(number <=0)
  {
   number = readIntWithPrompt(“Enter number of sticks (a positive integer):”);
  }
  return number;
 }
 private void reportWinner(Player player)
 {
  System.out.println();
  System.out.println(“Player: ” + player.name() + ” wins.”);
  System.out.println();
 }
 private int readIntWithPrompt(String prompt)
 {
  System.out.println(prompt); System.out.flush();
  while(!in.hasNextInt())
  {
   in.nextLine();
   System.out.println(prompt);System.out.flush();
  }
  int input = in.nextInt();
  in.nextLine();
  return input;
 }
 private void reportPlay(Player player)
 {
  System.out.println(“Player ” + player.name()+” takes “+player.numOfStick()+” stick(s),leaving ” + game.sticksLeft()+”.”);
 }
}

Game

public class Game {
 private static final int MAX_ON_A_TURN = 3;
 private Player player1;
 private Player player2;
 private Player nextPlayer;
 private Player previousPlayer;
 private Pile pile;
 
 public Game(Player player1,Player player2,int sticks)
 {
  assert sticks > 0 : “precondition: initial sticks > 0″;
  this.player1 = player1;
  this.player2 = player2;
  this.nextPlayer = player1;
  this.previousPlayer = null;
  this.pile = new Pile(sticks);
 }
 public int sticksLeft()
 {
  return pile.howManyLeft();
 }
 public Player nextPlayer()
 {
  return nextPlayer;
 }
 public Player previousPlayer()
 {
  return previousPlayer;
 }
 public boolean gameOver()
 {
  return pile.howManyLeft()==0;
 }
 public Player winner()
 {
  if(gameOver())
   return otherPlayer(previousPlayer);
  else
   return null;
 }
 public void play()
 {
  if(!gameOver())
  {
   nextPlayer.takeTurn(pile,MAX_ON_A_TURN);
   previousPlayer  = nextPlayer;
   nextPlayer = otherPlayer(nextPlayer);
  }
 }
 public String toString()
 {
  return “Game with players:” + player1.name() + ” and ” + player2.name();
 }

 private Player otherPlayer (Player player)
 {
  if(player == player1)
   return player2;
  else
   return player1;
 }
}

Player

import java.util.*;

public class Player {
 private String name;
 private int numberOfTakenSticks;
 private Scanner in = new Scanner(System.in);
 
 //Constructor
 public Player(String name){
  this.name = name;
  this.numberOfTakenSticks = 0;
 }
 
 //Queries
 public String name(){
  return this.name;
 }
 
 public int numOfStick(){
  return numberOfTakenSticks;
 }
 
 //Commands
 public void reachToPile(Pile pile){
  pile.remove(1);
  System.out.println(pile.howManyLeft()+”sticks left!”);
 }
 
 public void takeTurn(Pile pile,int maxOnATurn)
 {
  System.out.println(“You can take at most ” + maxOnATurn + ” sticks”);
  System.out.flush();
  
  while(!in.hasNextInt())
  {
   in.nextLine();
   System.out.println(“You can take at most ” + maxOnATurn + “sticks”);
   System.out.flush();
  }
  
  numberOfTakenSticks = in.nextInt();
  pile.remove(numberOfTakenSticks);
  
 }
}

Pile
public class Pile {
 private int numberOfLeftStick;
 
 //Constructor
 public Pile(){
  numberOfLeftStick = 10;
 }
 
 //User set up original number of sticks
 public Pile(int num){
  this.numberOfLeftStick = num;
 }
 
 //Queries
 public int howManyLeft(){
  return numberOfLeftStick;
 }
 
 //Commands
 public void remove(int num){
  assert num <= numberOfLeftStick: “precondition: take too many sticks”;
  numberOfLeftStick -= num;
 }
}

Comments»

No comments yet — be the first.