1   package hirsipuu;
2   /**
3    * Pelaajaluokka, jossa on kaikki tarvittavat attribuutit. Luokka tiet???? pelaajan nimen, salasanan, 
4    * nykytason, pelaaja-ID:n, pisteet sek?? pelaajan edellisen pelikerran.
5    * 
6    * @author Anna-Leena Latvala ja Toni Purontaka
7    * @version v0.6, 15.4.2008
8    */
9   
10  
11  public class Pelaaja {
12      private boolean _alustettu = false;                     //onko pelaaja alustettu 
13      private String _nimi, _peliPaiva, _salaSana;
14      private int _taso, _pid, _pisteet;
15      private static int suurinKaytettyId = 1;
16      
17      /**
18       * Parametrit?n konstruktori "tyhj?n pelaajan" luontiin. Pelaaja parsii my?hemmin tiedot
19       * Pelaajat-oliolta saamastaan rivist? tai, jos se on uusi pelaaja, se alustetaan.
20       *
21       */
22      public Pelaaja() {
23          // jaa, mit?h?n t?llainen tekisi
24      }
25           
26       /**
27        * Funktio id:n luomista varten.
28        * @return ensimm??isen ei k??yt??ss?? olevan id-numeron
29        */
30       public int luoUusiId(){
31           return (++suurinKaytettyId);
32       }
33       
34       /**
35        * Yksinkertain funktio, joka palauttaa koodatun salasanan annetusta salasanasta.
36        * @param passu k??ytt??j??n antama salasana
37        * @return koodatun salananan
38        * 
39        * @example
40        * <pre name="test">
41        * Pelaaja pel = new Pelaaja();
42        * String kissa = "kissa";
43        * pel.salaa(kissa) === "ljttb";
44        * </pre>
45        */
46       public String salaa(String passu){
47           StringBuffer sb = new StringBuffer();
48           int c;
49           for(int i=0; i<passu.length(); i++){       //T??m?? korvataan jollain hienommalla algoritmilla
50               c = passu.charAt(i);
51               sb.append((char)(c+1));        //antaa seuraavan merkin joka merkin kohdalla
52           }
53           
54           return sb.toString();
55       }
56       
57       /**
58        * Palauttaa true, mik??li annettu salasana vastaa (aiemmin) annettua nime??.
59        * @param salasana annettu salasana
60        * @return true, mik??li salasana on oikein
61        * 
62        * @example
63        * <pre name="test">
64        * Pelaaja pel = new Pelaaja();
65        * pel.alustaUusiPelaaja("katriina", "kukkulat");
66        * pel.salasanaOikein("kukkulat") === true;
67        * </pre>
68        */
69       public boolean salasanaOikein(String salasana) {
70           String koodattuSana=salaa(salasana);
71           return (koodattuSana.equals(_salaSana));
72       }
73       
74       /**
75        * Ihan uuden pelaajaolion  alustaja, kun salasana on annettu
76        *
77        */
78       public boolean alustaUusiPelaaja(String nimi, String salasana){
79          _nimi = nimi;
80          _salaSana = salaa(salasana);
81          _peliPaiva = "20080105"; //TODO t??h??n t??m??n p??iv??n haku
82          _pid = luoUusiId();
83          _pisteet = 0;
84          _taso = 1;
85          _alustettu = true;
86          return true;
87          }
88       
89       /**
90        * Jo olemassa olevan pelaajan tietojen p?ivitys, kun aletaan pelata
91        *
92        */
93       public boolean alustaPelaaja(){
94          _peliPaiva = "20080105"; //TODO t??h??n t??m??n p??iv??n haku
95          _alustettu = true;
96          return true;
97          }
98       
99       /**
100       * Antaa pelaajan tiedot merkkijonona. 
101       * @return pelaajan tiedot merkkijonona.
102       */
103      public String tiedotToString(){
104          return (_pid+"|"+_nimi+"|"+_salaSana+"|"+_peliPaiva+"|"+_taso+"|"+_pisteet+"|");
105      }
106      
107      /**
108       * Kaivaa esiin pelaajan tiedot oletetun muotoisesta merkkijonosta.
109       * @param jono tiedostosta luettu merkkijono, josta pelaajan tiedot kaivetaan esiin
110       */
111      public void parse(String jono){
112          StringBuffer sb =new StringBuffer(jono);
113          _pid=Jono.annaId(sb);
114          _nimi=Jono.annaMjono(sb);
115          _salaSana=Jono.annaMjono(sb);
116          _peliPaiva=Jono.annaMjono(sb);
117          _taso=Jono.annaId(sb);
118          _pisteet=Jono.annaId(sb);
119          
120          if (_pid > suurinKaytettyId) suurinKaytettyId = _pid; 
121      }
122      
123      /**
124       * Lis?? t?m?nhetkiseen pistem??r??n voitetut uudet pisteet ja palauttaa uuden pistem??r?n.
125       * @param lisays lis?tt?v? pistem??r?.
126       * @return kokonaispistem??r? nyt
127       * 
128       * <pre name="test">
129       * Pelaaja pel = new Pelaaja();
130       * pel.alustaUusiPelaaja("kissa", "Pirkkomaaria");
131       * pel.paivitaPisteet(120) === 120;
132       * pel.paivitaPisteet(12) === 132;
133       * </pre>
134       */
135      public int paivitaPisteet(int lisays) {
136          _pisteet += lisays;
137          return _pisteet;
138      }
139      
140      /**
141       * Nostaa pelaajan tasoa.
142       *
143       */
144      public void nostaTasoa(){
145          _taso++;
146      }
147      
148     /**
149      * Palauttimet privaattimuuttujille.
150      * @return privaattimuuttujan arvo
151      */
152     public boolean alustettu() {return _alustettu;}
153     
154     public String nimi() {return _nimi;}
155     
156     public String peliPaiva() {return _peliPaiva;}
157     
158     public int pid() {return _pid;}
159     
160     public int pisteet() {return _pisteet;}
161     
162     public int taso() {return _taso;}
163 
164 
165     
166 }
167