1   package hirsipuu;
2   
3   import fi.jyu.mit.ohj2.Mjonot;
4   
5   /**
6    * TIEP111 Ohjelmointi 2 - harjoitusty?
7    * 
8    * T?m? luokka sis?lt?? kaiken peliss? tarvittavan tulostuksen.
9    * 
10   * @author Anna-Leena Latvala ja Toni Purontaka
11   * @version v0.4, 15.4.2008
12   */
13  
14  
15  public class Tulosta {
16  
17      
18      /**
19       * Tulostaa tekstin alleviivattuna.
20       * @param teksti tulostettava teksti
21       */
22      private static void alleviivaa(String teksti) {
23          System.out.println(teksti);
24          System.out.println("---------------------------------------");
25      }
26      
27      /**
28       * Tulostaa halutun m??r?n tyhji? rivej?.
29       * @param rivia montako tyhj?? rivi? tulostetaan
30       */
31      private static void tyhja(int rivia) {
32          for(int i=0; i<rivia ;i++) System.out.println();
33      }
34      
35      /**
36       * Tulostaa yhden tyhj?n rivin.
37       */
38      private static void tyhja() {
39          tyhja(1);
40      }
41      
42      /**
43       * Tyhjent?? koko konsoliruudun
44       */
45      private static void tyhjaa(){
46          tyhja(31);
47      }
48      
49      /**
50       * Tulostaa tervetulotekstin.
51       */
52      public static void tervehdys(){
53          System.out.println("<<<<<<<<<<<<<<<<<<<<<<<");
54          System.out.println(">   H I R S I P U U   <");
55          System.out.println(">   v e r s i o n 0.1 <");
56          System.out.println("<<<<<<<<<<<<<<<<<<<<<<<");
57          tyhja();
58          System.out.println("Tervetuloa pelaamaan Hirsipuuta!");
59          tyhja();
60      }
61      
62      /**
63       * Tulostaa pelaajan tunnuksen kyselyn.
64       */
65      public static void annaTunnus(){
66          System.out.print("Anna tunnuksesi >");
67      }
68      
69      /**
70       * Tulostaa pelaajan salasanan kyselyn.
71       * @param nimi pelaajan nimi
72       */
73      public static void kysySalasana(String nimi){
74          System.out.print("Anna salsana pelaajalle " + nimi + " >");
75      }
76      
77      /**
78       * Tulostaa uuden pelaajan luomiskyselyn.
79       * @param nimi pelaajan nimi
80       */
81      public static void kysyUusi(String nimi){
82          System.out.println("Tunnusta " + nimi + " ei l?ydy!");
83          System.out.print("Tehd??nk? uusi pelaaja " + nimi + " (K/e) :");
84      }
85      
86      /**
87       * Tulostaa pelin p??valikon pelaajalle r??t?l?ityn?.
88       * @param p pelaaja
89       */
90      public static void paaValikko(Pelaaja p){
91          tyhja();
92          System.out.println("Tervetuloa, "+ p.nimi() +"! Olet t?ll? hetkell? tasolla "+ p.taso() +"\n");
93          System.out.println("(P)elaa hirsipuuta");
94          System.out.println("(H)i-Scores");
95          System.out.println("(O)mat pisteet");
96          // pid == 1 vastaa admin-pelaajaa
97          if(p.pid() == 1) {
98              System.out.println("(A)dmin");
99              System.out.println("(L)opetus");
100         }else{
101             System.out.println("(L)opetus");
102         }
103     }
104     
105     /**
106      * Tulostaa p??valikon pikavalintarivin pelaajalle r??t?l?ityn?.
107      * @param p pelaaja
108      */
109     public static void paaValikkoPika(Pelaaja p) {
110         tyhja();
111         if (p.pid() == 1) {
112             System.out.print("Mit? tehd??n (p/h/o/a/L): ");
113         } else {
114             System.out.print("Mit? tehd??n (p/h/o/L): ");
115         }
116     }
117     
118     /**
119      * Tulostaa valikon, josta pelaaja voi valita haluamansa tason
120      * @param taso pelaajan nykyinen taso
121      */
122     public static void peliValikko(String tuloste){
123         tyhja();
124         System.out.println("Valitse taso, jolla haluat pelata");
125 
126         //tulostetaan ohje ja lopetus vaihtoehdot
127         System.out.println("(?) Ohjeet");
128         System.out.println("(0) Lopetus");
129         
130         System.out.print(tuloste);
131         
132         System.out.print("Valintasi: ");
133     }
134     
135     //FIXME: t?t? ei viel? kutsuta mist??n ja ei v?ltt?m?tt? toimi taso-olion kanssa?
136     /**
137      * tulostaa pelin sana arvoituksen, tason nimen ja v????r??t arvaukset (hirsipuun kanssa)
138      */
139     public static void peli(int taso, String arvoitus, String vaarat){
140         /**
141          * @param taso tason numero
142          * @param arvoitus on generoitu merkkijono, jossa _ merkit kirjainten kohdalla, joita ei ole arvattu
143          * @param vaarat v????r??t arvatut merkit
144          */
145         int i;
146         //Tulostetaan pelitilanne
147         //TODO rakenna ja tulosta hirsipuu merkeill??
148     //  System.out.printf(Hirsipuu.tasonNimi(taso)+": "+arvoitus+" "+vaarat.length()+" v??r?? arvausta:");
149         for(i=0;i<vaarat.length();i++) System.out.printf(" "+vaarat.charAt(i));
150         System.out.printf(")");
151     }
152     
153     /**
154      * Tulostaa hi-scores taulukon n parhaasta pelaajasta.
155      * @param taulukko taulukko, jossa on pelaajien nimet ja kokonaispisteet
156      * @param n montako pelaajaa tulostetaan (jos pelaajia on alle n, tulostetaan kaikki)
157      */
158     public static void hiScores(String[][] taulukko, int n){
159         tyhja();
160         int montako = n; //tulostetaan top n
161         if (taulukko[0].length < montako) montako = taulukko[0].length;
162         
163         System.out.println("Hi-Scores: top " + montako);
164         
165         for (int i = 0; i < montako; i++) {
166             System.out.println(Mjonot.fmt(i+1, 3) + ": " + Mjonot.fmt(taulukko[0][i], 20) + Mjonot.fmt(taulukko[1][i], 6));
167         }
168     }
169     
170     /**
171      * Tulostaa yhden pelaajan pisteet olemassaolevilta tasoilta. 
172      * @param taulukko taulukko, jossa on tason numero ja sit? vastaava pistem??r?
173      */
174     public static void omatPisteet(int[][] taulukko){
175         int yht = 0;
176         tyhja();
177         for (int i = 0; i < taulukko[0].length; i++) {
178             System.out.println("Taso " + Mjonot.fmt(taulukko[0][i], 2) + ": " + Mjonot.fmt(taulukko[1][i], 3));
179             yht += taulukko[1][i];
180         }
181         System.out.println("Yhteens? " + yht + " pistett?.");
182     }
183     
184     /**
185      * Tulostaa adminin koko valikon.
186      */
187     public static void adminValikko(){
188         tyhja();
189         System.out.println("(M)uokkaa sanalistoja");
190         System.out.println("(T)arkastele pelaajia");
191         System.out.println("(L)opetus");
192     }
193     
194     /**
195      * Tulostaa adminin pikavalintarivin.
196      */
197     public static void adminPika() {
198         tyhja();
199         System.out.print("Mit? tehd??n (m/t/L): ");
200     }
201     
202     /**
203      * Tulostaa sanalistojen muokkausvalikon.
204      */
205     public static void muokkaaListoja(){
206         System.out.println("ei toimi");
207         //TODO koko valikko - toteutetaanko ollenkaan?
208     }
209     
210     /**
211      * Tulostaa adminin pelaajien tarkasteluvalikon.
212      */
213     public static void tarkastelePelaajia(){
214         /*
215          * Pelaajat: 
216     nimi    viimeksi pelannut   pisteet
217     ---------------------------------------
218     Saku    20071227        740
219     Mimmu   20080105        0
220     admin   20080107        942
221     ---------------------------------------
222     Poista ep??aktiivinen pelaaja? (k/E) :
223          */
224         tyhjaa();
225         System.out.println("Pelaajat:");
226         tyhja();
227         //TODO Siisti t??t?? taulukkoa
228         alleviivaa("Nimi:   pelannut viimeksi:  Pisteet:");
229         //TODO tulosta pelaajat tiedostosta while-silmukan avulla
230     }
231     
232     /**
233      * Tulostaa lopputekstit
234      */
235     public static void lopetus(){
236         tyhja();
237         System.out.println("Tule pelaamaan uudestaan!");
238         System.out.printf("Pisteet tallennettu tiedostoon.");
239     }
240 }
241