1 import java.util.*;
2 import java.awt.*;
3 import java.awt.event.*;
4 import java.applet.*;
5 import java.awt.geom.*;
6 import java.awt.image.*;
7
8
18
19 public class Shop extends Component
20 {
21
24 Player p;
25
28 Image bg;
29
30
33 Vector shopEndListeners;
34
37 Vector saveGameListeners;
38
39
43 private static final int XST = 47;
44
47 private static final int YST = 43;
48
51 private static final int YST2 = 121;
52
55 private static final int XWT = 54;
56
59 private static final int XTT = 27;
60
63 private static final int YWT = 50;
64
68 private static final int HPUPF = 500;
69
72 private static final int HPUPH = 250;
73
76 private static final int HPUPT = 167;
77
80 private static final int DEFUP = 200;
81
84 private static final int ATTUP = 200;
85
88 private static final int NORMA = 150;
89
92 private static final int MASTE = 300;
93
94
98 private static final int BUY = 0;
99
102 private static final int SHOP = 1;
103
106 private static final int SWITCH = 2;
107
110 private static final int HEAL = 3;
111
114 private static final int SAVE = 4;
115
118 private static final int LEAVE = 5;
119
122 private static final int SWITCHH = 6;
123
124
127 int shelf, sel, sel2, xs, ys, ys2, op, start, start2;
128
131 String[] disp;
132
135 String[] ops;
136
137
143 public Shop(Player p, Image bg)
144 {
145 this.p = p;
146 this.bg = bg;
147 sel = 0;
148 shelf = 0;
149 op = 0;
150 start = 0;
151 xs = XST;
152 ys = YST;
153
154 disp = new String[2];
155 disp[0] = "Howdy partner!";
156 disp[1] = "How may I help you?";
157
158 ops = new String[5];
159 ops[0] = "Buy";
160 ops[1] = "Heal";
161 ops[2] = "Switch";
162 ops[3] = "Save";
163 ops[4] = "Leave";
164
165 enableEvents(AWTEvent.KEY_EVENT_MASK);
166 }
167
168
176 public void processEvent(AWTEvent e)
177 {
178 if(e.getID() == KeyEvent.KEY_PRESSED)
179 {
180 switch(((KeyEvent)e).getKeyCode())
181 {
182 case KeyEvent.VK_LEFT:
183 {
184 if(op == BUY)
185 {
186 if(sel != 0)
187 {
188 sel--;
189 xs += XWT + XTT;
190 repaint(7, 343, 600, 100);
191 }
192 else
193 {
194 sel = ops.length-1;
195 xs = XST;
196 repaint(7, 343, 600, 100);
197 }
198 }
199 else if(op == SWITCH || op == SWITCHH)
200 {
201 if(sel == 0)
202 {
203 if(start == 0)
204 {
205 if(ops.length - 5 >= 0)
206 start = ops.length-5;
207 else
208 start = 0;
209 sel = ops.length-1-start;
210 }
211 else if( (start - 5) >= 0)
212 {
213 start -= 5;
214 sel = 0;
215 }
216 else
217 {
218 start = 0;
219 sel = 0;
220 }
221 xs = XST;
222 }
223 else
224 {
225 sel--;
226 xs += XWT + XTT;
227 }
228 repaint(7, 343, 600, 100);
229 }
230 else if(op == SHOP)
231 {
232 if(shelf == 0)
233 {
234 if(sel == 0)
235 {
236 sel = 4;
237 repaint(xs, ys, XWT+XTT, YWT+7);
238 xs = (XST + (XWT + XTT) * 4);
239 repaint(xs, ys, XWT+XTT, YWT+7);
240 }
241 else
242 {
243 sel--;
244 repaint(xs, ys, XWT+XTT, YWT+7);
245 xs -= XWT + XTT;
246 repaint(xs, ys, XWT+XTT, YWT+7);
247 }
248 }
249 else
250 {
251 if(sel == 0)
252 {
253 sel = 1;
254 repaint(xs, ys, XWT+XTT, YWT+7);
255 xs = XST + XWT + XTT;
256 repaint(xs, ys, XWT+XTT, YWT+7);
257 }
258 else
259 {
260 sel--;
261 repaint(xs, ys, XWT+XTT, YWT+7);
262 xs = XST;
263 repaint(xs, ys, XWT+XTT, YWT+7);
264 }
265 }
266 }
267 break;
268 }
269 case KeyEvent.VK_RIGHT:
270 {
271 if(op == BUY)
272 {
273 if(sel == ops.length-1)
274 {
275 start = 0;
276 sel = 0;
277 }
278 else
279 {
280 sel++;
281 }
282 repaint(7, 343, 600, 100);
283 }
284 else if(op == SWITCH || op == SWITCHH)
285 {
286 if((sel+start) == ops.length-1)
287 {
288 start = 0;
289 sel = 0;
290 }
291 else if(sel == 4)
292 {
293 if((start+5) < ops.length)
294 {
295 start += 5;
296 sel = 0;
297 }
298 else
299 {
300 start = ops.length-5;
301 sel = 0;
302 }
303 }
304 else
305 sel++;
306 repaint(7, 343, 600, 100);
307 }
308 else if(op == SHOP)
309 {
310 if(shelf == 0)
311 {
312 if(sel == 4)
313 {
314 sel = 0;
315 repaint(xs, ys, XWT+XTT, YWT+7);
316 xs = XST;
317 repaint(xs, ys, XWT+XTT, YWT+7);
318 }
319 else
320 {
321 sel++;
322 repaint(xs, ys, XWT+XTT, YWT+7);
323 xs += XWT + XTT;
324 repaint(xs, ys, XWT+XTT, YWT+7);
325 }
326 }
327 else
328 {
329 if(sel == 1)
330 {
331 sel = 0;
332 repaint(xs, ys, XWT+XTT, YWT+7);
333 xs = XST;
334 repaint(xs, ys, XWT+XTT, YWT+7);
335 }
336 else
337 {
338 sel++;
339 repaint(xs, ys, XWT+XTT, YWT+7);
340 xs = XST + XWT + XTT;
341 repaint(xs, ys, XWT+XTT, YWT+7);
342 }
343 }
344 }
345 break;
346 }
347 case KeyEvent.VK_DOWN:
348 {
349 if(op == SHOP)
350 {
351 sel = 0;
352 if(shelf == 0)
353 {
354 shelf++;
355 repaint(xs, ys, XWT+XTT, YWT+7);
356 xs = XST;
357 ys = YST2;
358 repaint(xs, ys, XWT+XTT, YWT+7);
359 }
360 else
361 {
362 shelf = 0;
363 repaint(xs, ys, XWT+XTT, YWT+7);
364 xs = XST;
365 ys = YST;
366 repaint(xs, ys, XWT+XTT, YWT+7);
367 }
368 }
369 break;
370 }
371 case KeyEvent.VK_UP:
372 {
373 if(op == SHOP)
374 {
375 sel = 0;
376 if(shelf == 1)
377 {
378 shelf--;
379 repaint(xs, ys, XWT+XTT, YWT+7);
380 xs = XST;
381 ys = YST;
382 repaint(xs, ys, XWT+XTT, YWT+7);
383 }
384 else
385 {
386 shelf = 1;
387 repaint(xs, ys, XWT+XTT, YWT+7);
388 xs = XST;
389 ys = YST2;
390 repaint(xs, ys, XWT+XTT, YWT+7);
391 }
392 }
393 break;
394 }
395 case KeyEvent.VK_ENTER:
396 case KeyEvent.VK_SPACE:
397 {
398 repaint(xs, ys, XWT+XTT, YWT+7);
399 if(op == BUY)
400 {
401 if(sel == 4)
402 fireEvent(p);
403 else if(sel == 0)
404 {
405 shelf = 0;
406 sel = 0;
407 start = 0;
408 disp = new String[2];
409 disp[0] = "Please Choose a Selection.";
410 disp[1] = "You have: $" + p.getMoney();
411 ops = new String[1];
412 ops[0] = "";
413 op = SHOP;
414 }
415 else if(sel == 1)
416 {
417 p.healAllMonsters();
418 disp = new String[2];
419 disp[0] = "All Your Monsters have been healed";
420 disp[1] = "Good Luck Pardner.";
421 ops = new String[1];
422 ops[0] = "";
423 op = HEAL;
424 }
425 else if(sel == 2)
426 {
427 int num = p.getNumberOfMonstersAtHome();
428 if(num > 0)
429 {
430 sel = 0;
431 shelf = 0;
432 start = 0;
433 disp = new String[2];
434 disp[0] = "Please choose the Monster from";
435 disp[1] = "home to switch into your hand";
436 ops = new String[num];
437 System.out.println(num);
438 for(int i = 0; i < num; i++)
439 {
440 ops[i] = p.getMonsterAtHome(i).getName();
441 }
442 op = SWITCH;
443 }
444 else
445 {
446 sel = 0;
447 shelf = 0;
448 start = 0;
449 xs = XST;
450 ys = YST;
451
452 disp = new String[2];
453 disp[0] = "Howdy partner!";
454 disp[1] = "How may I help you?";
455
456 ops = new String[5];
457 ops[0] = "Buy";
458 ops[1] = "Heal";
459 ops[2] = "Switch";
460 ops[3] = "Save";
461 ops[4] = "Leave";
462 op = BUY;
463 }
464 }
465 else if(sel == 3)
466 {
467 fireSaveEvent(p);
468
469 sel = 0;
470 shelf = 0;
471 start = 0;
472 xs = XST;
473 ys = YST;
474
475 disp = new String[2];
476 disp[0] = "Howdy partner!";
477 disp[1] = "How may I help you?";
478
479 ops = new String[5];
480 ops[0] = "Buy";
481 ops[1] = "Heal";
482 ops[2] = "Switch";
483 ops[3] = "Save";
484 ops[4] = "Leave";
485 op = BUY;
486 }
487 }
488 else if(op == HEAL)
489 {
490 sel = 0;
491 shelf = 0;
492 start = 0;
493 xs = XST;
494 ys = YST;
495
496 disp = new String[2];
497 disp[0] = "Howdy partner!";
498 disp[1] = "How may I help you?";
499
500 ops = new String[5];
501 ops[0] = "Buy";
502 ops[1] = "Heal";
503 ops[2] = "Switch";
504 ops[3] = "Save";
505 ops[4] = "Leave";
506 op = BUY;
507 }
508 else if(op == SWITCH)
509 {
510 sel2 = start + sel;
511 sel = 0;
512 start = 0;
513 disp = new String[2];
514 disp[0] = "Please choose the Monster from";
515 disp[1] = "your hand to send home";
516 int num = p.getNumberOfMonsters();
517 if(num > 0)
518 {
519 ops = new String[num];
520 for(int i = 0; i < num; i++)
521 {
522 ops[i] = p.getMonster(i).getName();
523 }
524 op = SWITCHH;
525 }
526 else
527 {
528 shelf = 0;
529 xs = XST;
530 ys = YST;
531
532 disp = new String[2];
533 disp[0] = "Howdy partner!";
534 disp[1] = "How may I help you?";
535
536 ops = new String[5];
537 ops[0] = "Buy";
538 ops[1] = "Heal";
539 ops[2] = "Switch";
540 ops[3] = "Save";
541 ops[4] = "Leave";
542 op = BUY;
543 }
544 }
545 else if(op == SWITCHH)
546 {
547 p.switchMonster(p.getMonster(sel), p.getMonsterAtHome(sel2));
548 sel = 0;
549 sel2 = 0;
550 shelf = 0;
551 start = 0;
552 xs = XST;
553 ys = YST;
554
555 disp = new String[2];
556 disp[0] = "Howdy partner!";
557 disp[1] = "How may I help you?";
558
559 ops = new String[5];
560 ops[0] = "Buy";
561 ops[1] = "Heal";
562 ops[2] = "Switch";
563 ops[3] = "Save";
564 ops[4] = "Leave";
565 op = BUY;
566 }
567 else if(op == SHOP)
568 {
569 if(checkMoney())
570 {
571 sel = 0;
572 shelf = 0;
573 start = 0;
574 xs = XST;
575 ys = YST;
576
577 disp = new String[2];
578 disp[0] = "Howdy partner!";
579 disp[1] = "How may I help you?";
580
581 ops = new String[5];
582 ops[0] = "Buy";
583 ops[1] = "Heal";
584 ops[2] = "Switch";
585 ops[3] = "Save";
586 ops[4] = "Leave";
587 op = BUY;
588 }
589 else
590 {
591 disp = new String[3];
592 disp[0] = "Now See Here!";
593 disp[1] = "Ya'all ain't got enough money, partner.";
594 disp[2] = "Press escape to continue.";
595 }
596 }
597 repaint(7, 343, 600, 100);
598 break;
599 }
600 case KeyEvent.VK_ESCAPE:
601 {
602 repaint(xs, ys, XWT+XTT, YWT+7);
603 sel = 0;
604 sel2 = 0;
605 shelf = 0;
606 start = 0;
607 xs = XST;
608 ys = YST;
609 op = BUY;
610
611 disp = new String[2];
612 disp[0] = "Howdy partner!";
613 disp[1] = "How may I help you?";
614
615 ops = new String[5];
616 ops[0] = "Buy";
617 ops[1] = "Heal";
618 ops[2] = "Switch";
619 ops[3] = "Save";
620 ops[4] = "Leave";
621 repaint(7, 343, 600, 100);
622 break;
623 }
624 }
625 }
626 super.processEvent(e);
627 }
628
629
635 public void update(Graphics g)
636 {
637 paint(g);
638 }
639
644 public void paint(Graphics g)
645 {
646 g.setColor(Color.white);
647 g.fillRect(0, 0, 640, 450);
648 g.drawImage(bg, 0, 0, this);
649
650 drawText(g);
651
652 if(op == SHOP)
653 {
654 g.setColor(Color.red);
655 g.drawRect(xs, ys, XWT, YWT);
656 }
657 }
658
659
664 private void drawText(Graphics g)
665 {
666 int xp = 7;
667 int yp = 343;
668
669 g.setColor(Color.white);
670 g.fillRect(xp, yp, 600, 100);
671
672 g.setColor(Color.black);
673 int ym = yp+20;
674 for(int i = 0; i < disp.length; i++)
675 {
676 g.drawString(disp[i], xp+8, ym+8);
677 ym += g.getFontMetrics().getHeight();
678 }
679 for(int i = start, j = 0, xm = xp+10; i < ops.length && j < 5; i++, j++)
680 {
681 if(i == sel+start)
682 g.setColor(Color.red);
683 else
684 g.setColor(Color.black);
685 g.drawString(ops[i], xm+8, ym+8);
686 xm += g.getFontMetrics().stringWidth(ops[i]) + 10;
687 }
688 }
689
690
697 public void addShopEndListener(ShopEndListener bl)
698 {
699 if ( shopEndListeners == null )
700 shopEndListeners = new Vector();
701 shopEndListeners.addElement( bl );
702 }
703
710 public void removeShopListener(ShopEndListener bl)
711 {
712 if ( shopEndListeners != null )
713 shopEndListeners.removeElement( bl );
714 }
715
722 public void addSaveListener(SaveListener bl)
723 {
724 if ( saveGameListeners == null )
725 saveGameListeners = new Vector();
726 saveGameListeners.addElement( bl );
727 }
728
735 public void removeSaveListener(SaveEvent bl)
736 {
737 if ( saveGameListeners != null )
738 saveGameListeners.removeElement( bl );
739 }
740
745 private void fireEvent(Player p)
746 {
747 if ( shopEndListeners == null )
748 return;
749 ShopEndEvent event = new ShopEndEvent(this, ShopEndEvent.SHOP_ENDED, p);
750 for (Enumeration e = shopEndListeners.elements(); e.hasMoreElements(); )
751 ((ShopEndListener)e.nextElement()).shopEnd( event );
752 }
753
754
759 private void fireSaveEvent(Player p)
760 {
761 if ( saveGameListeners == null )
762 return;
763 SaveEvent event = new SaveEvent(this, SaveEvent.SAVE_GAME, p);
764 for (Enumeration e = saveGameListeners.elements(); e.hasMoreElements(); )
765 ((SaveListener)e.nextElement()).saveGame( event );
766 }
767
773 private boolean checkMoney()
774 {
775 int mon = p.getMoney();
776 switch(shelf)
777 {
778 case 0: {
780 switch(sel)
781 {
782 case 0:
783 {
784 if(mon >= HPUPF)
785 {
786 p.setMoney(mon - HPUPF);
787 p.addItem(new PotionItem("HP Up Full", PotionItem.HPUPFULL));
788 return true;
789 }
790 return false;
791 }
792 case 1:
793 {
794 if(mon >= HPUPH)
795 {
796 p.setMoney(mon - HPUPH);
797 p.addItem(new PotionItem("HP Up Half", PotionItem.HPUPHALF));
798 return true;
799 }
800 return false;
801 }
802 case 2:
803 {
804 if(mon >= HPUPT)
805 {
806 p.setMoney(mon- HPUPT);
807 p.addItem(new PotionItem("HP Up Third", PotionItem.HPUPTHIRD));
808 return true;
809 }
810 return false;
811 }
812 case 3:
813 {
814 if(mon >= ATTUP)
815 {
816 p.setMoney(mon - ATTUP);
817 p.addItem(new PotionItem("Attack Up", PotionItem.ATTUP));
818 return true;
819 }
820 return false;
821 }
822 case 4:
823 {
824 if(mon >= DEFUP)
825 {
826 p.setMoney(mon - DEFUP);
827 p.addItem(new PotionItem("Defense Up", PotionItem.DEFUP));
828 return true;
829 }
830 return false;
831 }
832 }
833 break;
834 }
835 case 1: {
837 switch(sel)
838 {
839 case 0:
840 {
841 if(mon >= NORMA)
842 {
843 p.setMoney(mon - NORMA);
844 p.addItem(new MonsterBallItem("Normal MonsterBall", MonsterBallItem.NORMAL));
845 return true;
846 }
847 return false;
848 }
849 case 1:
850 {
851 if(mon >= MASTE)
852 {
853 p.setMoney(mon - MASTE);
854 p.addItem(new MonsterBallItem("Master MonsterBall", MonsterBallItem.MASTER));
855 return true;
856 }
857 return false;
858 }
859 }
860 break;
861 }
862 }
863 return false;
864 }
865 }