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.