1   import java.awt.*;
2   import java.applet.*;
3   import javax.swing.*;
4   import java.awt.image.*;
5   import java.awt.geom.*;
6   import java.net.*;
7   import java.io.*;
8   /**
9    * Defines the output of a pml from a Player
10   * 
11   * @see Player
12   * @see People
13   * @see PlayerLoader
14   */
15  public class PlayerSaver
16  {
17      /**
18       * The Player
19       */
20      Player p;
21      /**
22       * True iff Finished, false otherwise
23       */
24      protected boolean fin;
25      /**
26       * The String to create
27       */
28      StringBuffer s;
29  
30      /**
31       * Start creating the pml file based on 
32       * the Player specified.
33       * 
34       * @param p the Player
35       */
36      public PlayerSaver(Player p)
37      {
38          this.p = p;
39          s = new StringBuffer();
40          startWriting();
41      }
42      /**
43       * Gets the pml created from the Player.
44       * 
45       * @return the pml file
46       */
47      public String toString()
48      {
49          return s.toString();
50      }
51      /**
52       * Starting point
53       */
54      private void startWriting()
55      {
56          s.append("<?Player>\n");
57          s.append("\t<name>" + p.getName() + "</name>\n");
58          s.append("\t<money>" + p.getMoney() + "</money>\n");
59          s.append(handleMonsterVector());
60          s.append(handleItemVector());
61          s.append(handleBadgeVector());
62          s.append("</player>");
63      }
64      /**
65       * Handle the MonsterVector
66       * 
67       * @return the pml for the vector
68       */
69      private String handleMonsterVector()
70      {
71          Monster m;
72          StringBuffer sb = new StringBuffer("\t<monsterVector type=home>\n");
73          for(int i = 0; i < p.hmon.size(); i++)
74          {
75              m = (Monster)p.hmon.get(i);
76              sb.append(handleMonster(m));
77          }
78          sb.append("\t</monsterVector>\n");
79          sb.append("\t<monsterVector type=hand>\n");
80          for(int i = 0; i < p.mon.size(); i++)
81          {
82              m = (Monster)p.mon.get(i);
83              sb.append(handleMonster(m));
84          }
85          sb.append("\t</monsterVector>\n");
86          return sb.toString();
87      }
88      /**
89       * Handle the Monster
90       * 
91       * @param m the Monster to handle
92       * @return the pml for the Monster
93       */
94      private String handleMonster(Monster m)
95      {
96          StringBuffer sb = new StringBuffer();
97          sb.append("\t\t<monster>\n");
98          String attacks[] = m.getAttacks();
99          switch(m.getKind())
100         {
101             case Monster.ELECTRIC:
102             {
103                 sb.append("\t\t\t<kind>Electric</kind>\n");
104                 sb.append("\t\t\t<name>" + m.getName() + "</name>\n");
105                 sb.append("\t\t\t<hp>" + m.getHP() + "</hp>\n");
106                 sb.append("\t\t\t<defp>" + m.getDefense() + "</defp>\n");
107                 sb.append("\t\t\t<attp>" + m.getAttack() + "</attp>\n");
108                 sb.append("\t\t\t<exp>" + m.getExperience() + "</exp>\n");
109                 sb.append("\t\t\t<level>" + m.getLevel() + "</level>\n");
110                 for(int i = 0; i < attacks.length && attacks[i] != null; i++)
111                 {
112                     if(attacks[i].equalsIgnoreCase(ElectricMon.A1))
113                     {
114                         sb.append("\t\t\t<attack>A1</attack>\n");
115                     }
116                     else if(attacks[i].equalsIgnoreCase(ElectricMon.A2))
117                     {
118                         sb.append("\t\t\t<attack>A2</attack>\n");
119                     }
120                     else if(attacks[i].equalsIgnoreCase(ElectricMon.A3))
121                     {
122                         sb.append("\t\t\t<attack>A3</attack>\n");
123                     }
124                     else if(attacks[i].equalsIgnoreCase(ElectricMon.A4))
125                     {
126                         sb.append("\t\t\t<attack>A4</attack>\n");
127                     }
128                     else if(attacks[i].equalsIgnoreCase(ElectricMon.A5))
129                     {
130                         sb.append("\t\t\t<attack>A5</attack>\n");
131                     }
132                     else if(attacks[i].equalsIgnoreCase(ElectricMon.A6))
133                     {
134                         sb.append("\t\t\t<attack>A6</attack>\n");
135                     }
136                 }
137                 break;
138             }
139             case Monster.EARTH:
140             {
141                 sb.append("\t\t\t<kind>Earth</kind>\n");
142                 sb.append("\t\t\t<name>" + m.getName() + "</name>\n");
143                 sb.append("\t\t\t<hp>" + m.getHP() + "</hp>\n");
144                 sb.append("\t\t\t<defp>" + m.getDefense() + "</defp>\n");
145                 sb.append("\t\t\t<attp>" + m.getAttack() + "</attp>\n");
146                 sb.append("\t\t\t<exp>" + m.getExperience() + "</exp>\n");
147                 sb.append("\t\t\t<level>" + m.getLevel() + "</level>\n");
148                 for(int i = 0; i < attacks.length && attacks[i] != null; i++)
149                 {
150                     if(attacks[i].equalsIgnoreCase(EarthMon.A1))
151                     {
152                         sb.append("\t\t\t<attack>A1</attack>\n");
153                     }
154                     else if(attacks[i].equalsIgnoreCase(EarthMon.A2))
155                     {
156                         sb.append("\t\t\t<attack>A2</attack>\n");
157                     }
158                     else if(attacks[i].equalsIgnoreCase(EarthMon.A3))
159                     {
160                         sb.append("\t\t\t<attack>A3</attack>\n");
161                     }
162                     else if(attacks[i].equalsIgnoreCase(EarthMon.A4))
163                     {
164                         sb.append("\t\t\t<attack>A4</attack>\n");
165                     }
166                     else if(attacks[i].equalsIgnoreCase(EarthMon.A5))
167                     {
168                         sb.append("\t\t\t<attack>A5</attack>\n");
169                     }
170                     else if(attacks[i].equalsIgnoreCase(EarthMon.A6))
171                     {
172                         sb.append("\t\t\t<attack>A6</attack>\n");
173                     }
174                 }
175                 break;
176             }
177             case Monster.FIRE:
178             {
179                 sb.append("\t\t\t<kind>Fire</kind>\n");
180                 sb.append("\t\t\t<name>" + m.getName() + "</name>\n");
181                 sb.append("\t\t\t<hp>" + m.getHP() + "</hp>\n");
182                 sb.append("\t\t\t<defp>" + m.getDefense() + "</defp>\n");
183                 sb.append("\t\t\t<attp>" + m.getAttack() + "</attp>\n");
184                 sb.append("\t\t\t<exp>" + m.getExperience() + "</exp>\n");
185                 sb.append("\t\t\t<level>" + m.getLevel() + "</level>\n");
186                 for(int i = 0; i < attacks.length && attacks[i] != null; i++)
187                 {
188                     if(attacks[i].equalsIgnoreCase(FireMon.A1))
189                     {
190                         sb.append("\t\t\t<attack>A1</attack>\n");
191                     }
192                     else if(attacks[i].equalsIgnoreCase(FireMon.A2))
193                     {
194                         sb.append("\t\t\t<attack>A2</attack>\n");
195                     }
196                     else if(attacks[i].equalsIgnoreCase(FireMon.A3))
197                     {
198                         sb.append("\t\t\t<attack>A3</attack>\n");
199                     }
200                     else if(attacks[i].equalsIgnoreCase(FireMon.A4))
201                     {
202                         sb.append("\t\t\t<attack>A4</attack>\n");
203                     }
204                     else if(attacks[i].equalsIgnoreCase(FireMon.A5))
205                     {
206                         sb.append("\t\t\t<attack>A5</attack>\n");
207                     }
208                     else if(attacks[i].equalsIgnoreCase(FireMon.A6))
209                     {
210                         sb.append("\t\t\t<attack>A6</attack>\n");
211                     }
212                 }
213                 break;
214             }
215             case Monster.WATER:
216             {
217                 sb.append("\t\t\t<kind>Water</kind>\n");
218                 sb.append("\t\t\t<name>" + m.getName() + "</name>\n");
219                 sb.append("\t\t\t<hp>" + m.getHP() + "</hp>\n");
220                 sb.append("\t\t\t<defp>" + m.getDefense() + "</defp>\n");
221                 sb.append("\t\t\t<attp>" + m.getAttack() + "</attp>\n");
222                 sb.append("\t\t\t<exp>" + m.getExperience() + "</exp>\n");
223                 sb.append("\t\t\t<level>" + m.getLevel() + "</level>\n");
224                 for(int i = 0; i < attacks.length && attacks[i] != null; i++)
225                 {
226                     if(attacks[i].equalsIgnoreCase(WaterMon.A1))
227                     {
228                         sb.append("\t\t\t<attack>A1</attack>\n");
229                     }
230                     else if(attacks[i].equalsIgnoreCase(WaterMon.A2))
231                     {
232                         sb.append("\t\t\t<attack>A2</attack>\n");
233                     }
234                     else if(attacks[i].equalsIgnoreCase(WaterMon.A3))
235                     {
236                         sb.append("\t\t\t<attack>A3</attack>\n");
237                     }
238                     else if(attacks[i].equalsIgnoreCase(WaterMon.A4))
239                     {
240                         sb.append("\t\t\t<attack>A4</attack>\n");
241                     }
242                     else if(attacks[i].equalsIgnoreCase(WaterMon.A5))
243                     {
244                         sb.append("\t\t\t<attack>A5</attack>\n");
245                     }
246                     else if(attacks[i].equalsIgnoreCase(WaterMon.A6))
247                     {
248                         sb.append("\t\t\t<attack>A6</attack>\n");
249                     }
250                 }
251                 break;
252             }
253             case Monster.GAS:
254             {
255                 sb.append("\t\t\t<kind>Gas</kind>\n");
256                 sb.append("\t\t\t<name>" + m.getName() + "</name>\n");
257                 sb.append("\t\t\t<hp>" + m.getHP() + "</hp>\n");
258                 sb.append("\t\t\t<defp>" + m.getDefense() + "</defp>\n");
259                 sb.append("\t\t\t<attp>" + m.getAttack() + "</attp>\n");
260                 sb.append("\t\t\t<exp>" + m.getExperience() + "</exp>\n");
261                 sb.append("\t\t\t<level>" + m.getLevel() + "</level>\n");
262                 for(int i = 0; i < attacks.length && attacks[i] != null; i++)
263                 {
264                     if(attacks[i].equalsIgnoreCase(GasMon.A1))
265                     {
266                         sb.append("\t\t\t<attack>A1</attack>\n");
267                     }
268                     else if(attacks[i].equalsIgnoreCase(GasMon.A2))
269                     {
270                         sb.append("\t\t\t<attack>A2</attack>\n");
271                     }
272                     else if(attacks[i].equalsIgnoreCase(GasMon.A3))
273                     {
274                         sb.append("\t\t\t<attack>A3</attack>\n");
275                     }
276                     else if(attacks[i].equalsIgnoreCase(GasMon.A4))
277                     {
278                         sb.append("\t\t\t<attack>A4</attack>\n");
279                     }
280                     else if(attacks[i].equalsIgnoreCase(GasMon.A5))
281                     {
282                         sb.append("\t\t\t<attack>A5</attack>\n");
283                     }
284                     else if(attacks[i].equalsIgnoreCase(GasMon.A6))
285                     {
286                         sb.append("\t\t\t<attack>A6</attack>\n");
287                     }
288                 }
289                 break;
290             }
291         }
292         sb.append("\t\t</monster>\n");
293         return sb.toString();
294     }
295 
296     /**
297      * Handle the Item Vector
298      * 
299      * @param the pml for the Item Vector
300      */
301     private String handleItemVector()
302     {
303         Item it;
304         StringBuffer sb = new StringBuffer("\t<itemVector>\n");
305         for(int i = 0; i < p.items.size(); i++)
306         {
307             it = (Item)p.items.get(i);
308             sb.append(handleItem(it));
309         }
310         sb.append("</itemVector>\n");
311         return sb.toString();
312     }
313     /**
314      * Handle the Item specified
315      * 
316      * @param it the Item to handle
317      * @return the pml for the Item
318      */
319     private String handleItem(Item it)
320     {
321         StringBuffer sb = new StringBuffer("\t\t<item>\n");
322         String kind = null;
323         switch(it.getBrand())
324         {
325             case Item.POTION:
326             {
327                 switch(((PotionItem)it).getSubBrand())
328                 {
329                     case PotionItem.HPUPFULL:
330                     {
331                         kind = "HPUPFULL";
332                         break;
333                     }
334                     case PotionItem.HPUPHALF:
335                     {
336                         kind = "HPUPHALF";
337                         break;
338                     }
339                     case PotionItem.HPUPTHIRD:
340                     {
341                         kind = "HPUPTHIRD";
342                         break;
343                     }
344                     case PotionItem.ATTUP:
345                     {
346                         kind = "ATTUP";
347                         break;
348                     }
349                     case PotionItem.DEFUP:
350                     {
351                         kind = "DEFUP";
352                         break;
353                     }
354                 }
355                 sb.append("\t\t\t<potion>" + kind + "</potion>\n");
356                 break;
357             }
358             case Item.MONSTERBALL:
359             {
360                 switch(((MonsterBallItem)it).getSubBrand())
361                 {
362                     case MonsterBallItem.NORMAL:
363                     {
364                         kind = "Normal";
365                         break;
366                     }
367                     case MonsterBallItem.MASTER:
368                     {
369                         kind = "MASTER";
370                         break;
371                     }
372                 }
373                 sb.append("\t\t\t<monsterBall>" + kind + "</monsterBall>\n");
374                 break;
375             }
376         }
377         sb.append("\t\t\t<quantity>" + it.getItemCount() + "</quantity>\n");
378         sb.append("\t\t</item>\n");
379         return sb.toString();
380     }
381     /**
382      * Handle the Badge Vector
383      * 
384      * @return the pml for the Badge Vector
385      */
386     private String handleBadgeVector()
387     {
388         StringBuffer sb = new StringBuffer("\t<badgeVector>\n");
389         for(int i = 0; i < p.badges.size(); i++)
390         {
391             sb.append("\t\t<badge>" + (String)p.badges.get(i) + "</badge>\n");
392         }
393         sb.append("\t</badgeVector>\n");
394         return sb.toString();
395     }
396 
397     /**
398      * Testing the Methods.
399      */
400     public static void main(String args[])
401     {
402         try
403         {
404             BufferedReader in = new BufferedReader(new FileReader("maps/Default.pml"));
405             PlayerLoader pload = new PlayerLoader(in);
406             Player pl = pload.getPlayer();
407             PlayerSaver ps = new PlayerSaver(pl);
408             StringBuffer s = new StringBuffer(ps.toString());
409             System.out.println(s.toString());
410         }
411         catch(Exception ee) { ee.printStackTrace(); }
412     }
413 }