import java.util.*; public class Tower implements Cloneable{ private int maxSize; // 塔のサイズ private Stack piles; // Pile の最大枚数を指定して、Tower を生成する // このときに initStackFlag が true ならば、Pile をスタックに積む public Tower(int maxSize, boolean initStackFlag){ this.maxSize = maxSize; piles = new Stack(); if(initStackFlag){ for(int i = maxSize ; i > 0 ; i--){ piles.push(new Pile(i, maxSize)); } } } // Pile のスタックを指定して、Tower を生成する protected Tower(Stack piles, int maxSize){ this.maxSize = maxSize; this.piles = (Stack)piles.clone(); } // スタックの先頭の Pile を削除し、その Pile を戻り値として返す public Pile popPile(){ return (Pile)piles.pop(); } // スタックの先頭にある Pile を取り出す // このとき Pile はスタックから削除されない public Pile peekPile(){ return (Pile)piles.peek(); } // スタックの先頭に Pile を入れる public void pushPile(Pile pile){ piles.push(pile); } // パイルの枚数を返す public int getNumber(){ return piles.size(); } // パイルがあるかどうかを返す public boolean isEmpty(){ return piles.empty(); } // 複製を生成する public Object clone(){ return new Tower(piles, maxSize); } public void print(){ for(int i = 0 ; i < maxSize-1 ; i++){ System.out.print(" "); } System.out.print("|"); for(int i = 0 ; i < maxSize-1 ; i++){ System.out.print(" "); } } }