1   package hirsipuu;
2   
3   /**
4    * Luokka pelaajan pistetiedoille. Tiet???? pelaajan id:n, tason ja tason pisteet.
5    * @author Anna-Leena Latvala, Toni Purontaka
6    * @version v0.6, 15.4.2008
7    *
8    */
9   public class PelaajanPiste {
10      public int pisteet,pid,taso;             //Pelaajan pisteet, id ja taso
11      
12      /**
13       * Luo PelaajanPisteen, default-asetuksilla
14       *
15       */
16      public PelaajanPiste(){
17          pisteet=0;
18          taso=0;
19      }
20      
21      /**
22       * Luo PelaajanPisteen, kun annettuna on pelaajan id
23       * @param id annnettu pelaajan id
24       */
25      public PelaajanPiste(int id){
26          pisteet=0;
27          pid=id;
28          taso=0;
29      }
30      
31      /**
32       * Luo PelaajanPisteen, kun kaikki info on annettuna
33       * @param level Pelaajan taso
34       * @param id Pelaajan id
35       * @param points Pelaajan pisteet
36       */
37      public PelaajanPiste(int id, int level, int points){
38          pisteet=points;
39          pid=id;
40          taso=level;
41      }
42      
43      /**
44       * Parsii tietonsa m????r??muotoisesta merkkijonosta: 
45       * pid | tid | pisteet
46       * 
47       * Mik??li tarjotaan v????r??nlaista syntaksia, palauttaa huomion siit??.
48       * 
49       * @param jono parsittava jono
50       * @return   true, jos parsiminen onnistui
51       *          false, jos jono ei ollut syntaksin mukainen.
52       *          
53       * @example
54       * <pre name="test">
55       * PelaajanPiste pp = new PelaajanPiste();
56       * pp.parse("   2|3|230") === true;
57       * pp.tiedotToString() === "2|3|230";
58       * </pre>
59       */
60      public boolean parse(String jono) {
61          StringBuffer sb = new StringBuffer(jono);
62          pid = Jono.annaId(sb);
63          taso= Jono.annaId(sb);
64          pisteet=Jono.annaId(sb);
65          return (pid!=-1 && taso>-1 && pisteet>=0);
66      }
67      
68      /**
69       * Palauttaa pelaajan pisteominaisuudet merkkijonona, joka on muotoa
70       * pid|taso|pisteet
71       * 
72       * @return taso merkkijonona
73       * 
74       * @example
75       * <pre name="test">
76       * PelaajanPiste pp1= new PelaajanPiste(1,1,100);
77       * PelaajanPiste pp2= new PelaajanPiste(13,5,1050);
78       * pp1.tiedotToString() === "1|1|100";
79       * pp2.tiedotToString() === "13|5|1050";
80       * </pre>
81       */
82      public String tiedotToString() {
83          return pid+"|"+taso+"|"+pisteet;
84      }
85      
86      /**
87       * Asettaa uudet pisteet t?lle tasolle.
88       * @param pisteet uusi pistem??r?
89       */
90      public void setPisteet(int pisteet) {
91          this.pisteet = pisteet;
92      }
93      
94      /**
95       * Palauttaa pistem??r?n, mik?li pyydet??n juurin t?m?n pelaajan t?m?n tason pisteit?. 
96       * Muutoin palautetaan -2, jos pelaaja on v??r?, ja -1 jos pelaaja on oikea mutta tasoa ei ole pisteytetty.
97       * 
98       * @param pelaaja pyydetyn pelaajan pid
99       * @param taso pyydetyn tason tid
100      * @return pisteet, jos pyydettiin t?t? pelaajaa ja tasoa
101      *         -2 jos pelaaja on v??r?
102      *         -1 jos vain taso on v??r?
103      *         
104      * @example
105      * <pre name="test">
106      * PelaajanPiste pp1 = new PelaajanPiste(1,1,100);
107      * pp1.pisteet(1,2) === -1;
108      * pp1.pisteet(1,1) === 100;
109      * pp1.pisteet(3,1) === -2;
110      * </pre>
111      */
112     public int pisteet (int pelaaja, int taso) {
113         if (pelaaja != pid) return -2;
114         if (taso != this.taso) return -1;
115         return pisteet;
116     }
117 }
118