1   package hirsipuu;
2   
3   /**
4    * T?m? luokka huolehtii olioiden keskustelusta kesken??n sek? N?yt?n kanssa. 
5    * N?ytt? kyselee ja Hirsipuu vastaa.
6    * 
7    * @author Anna-Leena Latvala ja Toni Purontaka
8    * @version v0.6, 15.4.2008
9    */
10  
11  //Tuodaan tarpeelliset kirjastot
12  
13  public class Hirsipuu {
14      private Pelaajat pelaajat;
15      private Pisteet pisteet;
16      private Tasot tasot;
17      private Sanalista lista;
18      private Peli peli;
19  
20      
21       /**
22        * Hirsipuu-kokoelmaluokan konstruktori.
23        * Alustaa tietorakenteet. Ne tuovat sis?lt?ns? tiedostoista, jotka itse tuntevat. 
24        *
25        */
26       public Hirsipuu() {
27           pelaajat = new Pelaajat();
28           tasot = new Tasot();
29           int lkm = tasot.koko();
30           
31           lista = new Sanalista();
32           
33           pisteet = new Pisteet(lkm);
34  
35  
36           peli = new Peli();
37       }
38  
39       /**
40        * K?skee tietorakenteita kirjoittamaan tietonsa k?ytt?m??ns? tiedostoon ja tekem??n 
41        * back-upin entisist?.
42        * @return true, jos talletus onnistui
43        */
44       public boolean tallennaTiedot() {
45          return pelaajat.tallennaTiedot() && pisteet.tallennaTiedot(); // && tasot.tallennaTiedot() && lista.tallennaTiedot();
46       }
47       
48       /**
49        * Palauttaa nimeke-nimisen pelaajan viitteen, jos sellainen pelaaja on olemassa. 
50        * Jos ei, palauttaa null. 
51        * @param nimeke annettu nimi
52        * @return pyydetyn pelaajan, jos sellainen on - muuten null
53        */
54      public Pelaaja annaPelaaja(String nimeke) {
55        return pelaajat.annaPelaaja(nimeke);   
56      }
57  
58      /**
59       * Lis?? luodun uuden pelaajan tietorakenteeseen ja luodaan ensimm?isen tason piste-
60       * tiedoiksi nolla pistett?.
61       * @param pelaaja uusi pelaaja
62       */
63      public void lisaaPelaaja(Pelaaja pelaaja) {
64          pelaajat.lisaaUusiPelaaja(pelaaja);
65          paivitaPisteet(pelaaja.pid(), 1, 0); // luodaan pisteolio.
66      }
67      
68      /**
69       * Palauttaa pelaajan pisteet kokonaislukutaulukkona.
70       * @param pelaajanid pyydetyn pelaajan id-numero
71       * @return 2d-kokonaislukutaulu, jossa vierekk?isiss? alkioissa on tason nro ja silt? saadut pisteet
72       *         tai 0 jos tasoa ei ole viel? pelattu.
73       */
74      public int[][] annaOmatPisteet(int pelaajanid) {
75          return pisteet.annaPisteet(pelaajanid);
76      }
77      
78      /**
79       * P?ivitt?? pelaajan tasolta saamat pisteet tietorakenteisiin. Palautetaan, paranivatko pisteet
80       * entisest? tason pistem??r?st?.
81       * @param pelaajanid pyydetty pelaaja
82       * @param taso pelattu taso
83       * @param pisteet tasolta saadut pisteet
84       * @return true, jos uudet pisteet olivat paremmat
85       *         false jos eiv?t
86       */
87      public boolean paivitaPisteet(int pelaajanid, int taso, int pisteet) {
88          if (this.pisteet.paivitaPiste(pelaajanid, taso, pisteet)) {
89              pelaajat.paivitaKokonaispisteet(pelaajanid, pisteet);
90              return true;
91          }
92          return false;
93      }
94      
95      /**
96       * Palauttaa satunnaisen sanan tasolta "taso".
97       * @param taso pyydetyn tason numero
98       * @return satunnainen sana, mik?li t?llaista tasoa vastaavia sanoja on;
99       *         muutoin palauttaa null-viitteen.
100      */
101     public String sana(int taso){
102         return lista.sana(taso);
103     }
104     
105     /**
106      * Palauttaa tasoa vastaaavan vihjesanan / aihealueen, jos taso on olemassa.
107      * Muutoin palauttaa null.
108      * @param taso pyydetyn tason numero
109      * @return tason aihealue merkkijonona
110      */   
111     public String annaVihje(int taso) {
112         return tasot.annaVihje(taso);
113     }
114     
115     /**
116      * Palauttaa pelaajien nimet ja pistem??r?t paremmuusj?rjestyksess?.
117      * @return 2d-merkkijonotaulukko, jossa vierekk?isiss? alkioissa on pelaajan nimi ja h?nen kokonaispistem??r?ns?.
118      */
119     public String[][] annaHiScores() {
120         return pelaajat.hiScores();
121     }
122     
123     /**
124      * Palauttaa merkkijonona n ensimm?isen tason tiedot, tai jos n on suurempi kuin
125      * tasojen m??r?, niin palautetaan kaikki tasot.
126      * @param n tulosteeseen sis?llytett?vien tasojen lkm
127      * @return merkkijono, jossa tasojen tiedot rivitettyn?.
128      * 
129      */
130     public String tasoTulosteet(int n) {
131         return tasot.tulostus(n);
132     }
133 
134 }