| Naytto.java |
1 package hirsipuu;
2
3 import java.util.Scanner;
4 import fi.jyu.mit.ohj2.*;
5
6 /**
7 *
8 * @author Anna-Leena Latvala ja Toni Purontaka
9 * @version v0.6, 15.4.2008
10 *
11 * K?ytt?liittym?-luokka, joka k?sittelee k?ytt?liittym?? pelaaja ja hirsipuu parametrin??n.
12 *
13 */
14 public class Naytto {
15 private Pelaaja pelaaja;
16 private Hirsipuu hirsi;
17 private static Scanner lukija = new Scanner(System.in);
18
19 /**
20 * Kostruktori
21 * @param hirsi k?ytett?v? tietorakenne, jossa on pelin pelaamiseen tarvittavat tiedot
22 */
23 public Naytto(Hirsipuu hirsi){
24 this.hirsi = hirsi;
25 pelaaja = alustaPelaaja();
26 }
27
28 /**
29 * Pelin aloitus, jossa kysell??n pelaajan nime? ja salasanaa ja l?ydet??n vastaava
30 * vanha pelaaja tai luodaan uusi
31 * @return pelaaja, jota n?ytt? k?sittelee parametrinaan
32 */
33 private Pelaaja alustaPelaaja() {
34 String salasana;
35 char merkki;
36 Pelaaja pel;
37
38 Tulosta.tervehdys();
39 do{
40 Tulosta.annaTunnus();
41 String nimi = annaSana();
42 pel = hirsi.annaPelaaja(nimi); //pelaaja on jo olemassa, tai null
43 if (pel == null) {
44 pel = new Pelaaja();
45 Tulosta.kysyUusi(nimi); // luodaanko uusi pelaaja?
46 merkki = annaMerkki('k');
47 if (merkki == 'e') continue;
48 Tulosta.kysySalasana(nimi);
49 pel.alustaUusiPelaaja(nimi, annaSana());
50 hirsi.lisaaPelaaja(pel);
51 } else {
52 do {
53 Tulosta.kysySalasana(nimi);
54 salasana = annaSana();
55 } while (!pel.salasanaOikein(salasana));
56 pel.alustaPelaaja();
57 }
58 } while (!pel.alustettu());
59 return pel;
60 }
61
62
63 /**
64 * Odottaa kunnes k?ytt?j? antaa jonkin merkin
65 */
66 public void odotaMikaVaanMerkki() {
67 Syotto.lueRivi();
68 }
69
70 /**
71 * N?ytt?? pelaajan pisteet eri tasoilla.
72 */
73 public void omatPisteet() {
74 Tulosta.omatPisteet(hirsi.annaOmatPisteet(pelaaja.pid()));
75 odotaMikaVaanMerkki();
76 }
77
78 /**
79 * Kaikkien pelaajien parhaiden pisteiden esittely.
80 */
81 public void hiScores() {
82 Tulosta.hiScores(hirsi.annaHiScores(), 5); // tulostetaan top 5
83 odotaMikaVaanMerkki();
84 }
85
86 /**
87 * Admin-valikossa navigointi.
88 * (M)uokkaa sanalistoja
89 * (T)arkastele pelaajia
90 * (L)opetus
91 */
92 public void admin() {
93 Tulosta.adminValikko(); //tulostaa admin-valikon vaihtoehdot
94 boolean jatketaan = true;
95 do {
96 Tulosta.adminPika(); // tulostaa valintojen kirjainrivin
97 switch(annaMerkki('l')) {
98 case 'm': adminMuokkaaListoja(); break;
99 case 't': adminTarkastelePelaajia(); break;
100 default: jatketaan = false; break;
101 }
102 } while (jatketaan);
103
104 }
105 /**
106 * Admin-valikon sanalistojen muokkaustoiminto.
107 */
108 public void adminMuokkaaListoja() {
109 Tulosta.muokkaaListoja();
110
111 }
112
113 /**
114 * Admin-valikon pelaajien tarkastelutoiminto.
115 */
116 public void adminTarkastelePelaajia() {
117 Tulosta.tarkastelePelaajia();
118
119 }
120
121 /**
122 * Navigaatio pelivalikossa.
123 * (?) Ohje
124 * (0) Lopetus
125 * (1) Taso 1
126 * (2) Taso 2
127 * jne.
128 */
129 public void peliValikko() {
130 int vastaus;
131 while(true) {
132 Tulosta.peliValikko(hirsi.tasoTulosteet(pelaaja.taso()));
133 vastaus=Syotto.kysyInt("");
134 if (vastaus>0) pelaa(vastaus);
135 else return;
136 }
137 }
138
139 /**
140 * Hoitaa hirsipuun pelaamisen. P?ivitt?? l?p?issyn tason pisteet pelaajan pisteisiin
141 * ja antaa luvan menn? seuraavalle tasolle, jos pelaaja l?p?isi edellisen tason.
142 * @param taso taso, jolla peli suoritetaan.
143 */
144 public void pelaa(int taso) {
145 if (pelaaja.taso() < taso) {
146 System.out.println("Et ole viel? t?ll? tasolla!");
147 return;
148 }
149
150 int pts = pelaile(taso);
151 hirsi.paivitaPisteet(pelaaja.pid(), taso, pts);
152 if(pts>0) pelaaja.nostaTasoa(); //jos pelaaja l?p?isi tason, niin lupa menn? seur.
153 }
154
155 /**
156 * Peluuttaa varsinaista pelisilmukkaa, mik?li kyseinen taso on olemassa.
157 * @param taso taso, jonka sanoja kysell??n
158 * @return pistem??r?, joka tasolta saatiin
159 */
160 public int pelaile(int taso){
161 Peli peli = new Peli(); // vakiom??reet pelille, kysyt??n 5 sanaa, saa tulla 10 v??r?? merkki?
162 Scanner in=new Scanner(System.in);
163 boolean valmis=false;
164 char c;
165 String s;
166
167 if (hirsi.sana(taso) == null) {
168 System.out.println("Tasoa " + taso + "ei ole olemassa.");
169 return 0;
170 }
171 peli.alustaKierros();
172
173 while(!valmis){
174 System.out.println(""); System.out.println("");
175 System.out.println("Arvaa sana aiheesta: "+hirsi.annaVihje(taso));
176 System.out.println("");
177 peli.setSana(hirsi.sana(taso));
178 boolean sanaValmis=false;
179 while(!sanaValmis){
180 System.out.println(peli.annaTuloste());
181 System.out.println("V??ri? arvauksia :" + peli.annaVaarat() + "\n");
182 s=in.nextLine();
183 if(s.length()==0) continue;
184 else{
185 c=s.charAt(0);
186 if(peli.arvaa(c)){
187 System.out.println("Sana oikein!");
188 sanaValmis=true;
189 }
190 System.out.println("Yhteens? v??ri?: " + peli.annaYhtVaarat());
191 if(peli.liikaaVaaria()){
192 valmis=true;
193 sanaValmis=true;
194 System.out.println("Et onnistunut...");
195 }
196 }
197 }
198 peli.lisaaOikea();
199 if(peli.tarpeeksiArvattuja()) valmis=true;
200 }
201 if(peli.tarpeeksiArvattuja()){
202 System.out.println("Onnittelut! l?p?isit tason!!");
203 System.out.println("Pisteesi: "+ peli.annaPisteet());
204 return peli.annaPisteet();
205 }
206 return 0;
207
208 }
209
210
211
212 /**
213 * Navigaatio p??valikossa:
214 * (P)elaa
215 * (H)iScores
216 * (O)mat pisteet
217 * (A)dmin
218 * (L)opetus
219 */
220 public void paaValikko() {
221 Tulosta.paaValikko(pelaaja); //tulostaa valikon vaihtoehdot, ei kirjainrivi?
222 while(true) {
223 Tulosta.paaValikkoPika(pelaaja); //tulostaa valinnan kirjainrivin
224 switch(annaMerkki('l')) {
225 case 'p': if (pelaaja.taso() == 1) {pelaa(1);} else { peliValikko(); } break;
226 case 'h': hiScores(); break;
227 case 'o': omatPisteet(); break;
228 case 'a': if (pelaaja.pid() == 1) {admin();} break;
229 default: return;
230 }
231 }
232 }
233
234 /**
235 * Lukee k?ytt?j?lt? kokonaisen merkkijonon.
236 * @return merkkijono stringin??
237 */
238 public static String annaSana() {
239 return lukija.nextLine();
240 }
241
242 /**
243 * Lukee k?ytt?j?lt? yhden merkin.
244 * @return merkkijono stringin??
245 */
246 public static char annaMerkki(char def) {
247 String sana = lukija.nextLine();
248 if (sana.length() <= 0) return def;
249 return sana.charAt(0);
250 }
251
252
253 /**
254 * P??ohjelma, jonka ajamalla koko peli l?htee k?yntiin!
255 * @param args
256 */
257 public static void main(String[] args) {
258 Hirsipuu hirsi = new Hirsipuu(); //luodaan hirsipuun taakse tietorakenteet!
259 Naytto skreeni = new Naytto(hirsi);
260 skreeni.paaValikko();
261 hirsi.tallennaTiedot();
262 Tulosta.lopetus();
263 }
264 }
265