]> Pileus Git - ~andy/spades/blob - src/Spades.java
31878442460291f6564af9b8164b72e94dc39ec0
[~andy/spades] / src / Spades.java
1 package org.pileus.spades;
2
3 public class Spades
4 {
5         /* Properties */
6         public  Task    task;
7         public  Cards   cards;
8         public  String  admin;
9         public  boolean looked;
10
11         /* Static methods */
12         private static String[] getCards(String msg, String regex)
13         {
14                 String cards = msg
15                         .replaceAll(regex, "$1")
16                         .replaceAll(",", " ")
17                         .replaceAll("♠", "s")
18                         .replaceAll("♥", "h")
19                         .replaceAll("♦", "d")
20                         .replaceAll("♣", "c");
21                 Os.debug("Cards: getCards - [" + cards + "]:" + Os.base64(cards));
22                 return cards.split("\\s+");
23         }
24
25         /* Widget callback functions */
26         public Spades(String admin)
27         {
28                 this.admin = admin;
29         }
30
31         /* IRC Callbacks */
32         public void onMessage(Message msg)
33         {
34                 Os.debug("Spades: onMessage - " + msg.msg);
35                 if (msg.type != Message.Type.PRIVMSG)
36                         return;
37                 if (!msg.from.equals(this.admin))
38                         return;
39
40                 String txt = msg.txt;
41                 if (txt.matches(".*turn!.*") && !this.looked) {
42                         this.send(this.admin, ".look");
43                         this.looked = true;
44                 }
45                 if (txt.startsWith("You have: ")) {
46                         this.cards.hand = Spades.getCards(txt, "You have: (.*)");
47                         this.cards.requestRender();
48                 }
49                 if (txt.matches(".*turn!.*")) {
50                         this.cards.pile = Spades.getCards(txt, ".*turn! \\((.*)\\)");
51                         this.cards.requestRender();
52                 }
53         }
54
55         /* UI Callbacks */
56         public boolean onConnect()
57         {
58                 Os.debug("Spades: onConnect");
59                 this.looked = false;
60                 this.send(this.admin, ".status");
61                 this.send(this.admin, ".turn");
62                 return true;
63         }
64
65         public boolean onBid(int bid)
66         {
67                 Os.debug("Spades: onBid - " + bid);
68                 return this.send(".bid " + bid);
69         }
70
71         public boolean onPass(String card)
72         {
73                 Os.debug("Spades: onPass - " + card);
74                 return this.send(this.admin, ".pass " + card);
75         }
76
77         public boolean onLook()
78         {
79                 Os.debug("Spades: onLook");
80                 return this.send(".look");
81         }
82
83         public boolean onPlay(String card)
84         {
85                 Os.debug("Spades: onPlay - " + card);
86                 return this.send(".play " + card);
87         }
88
89         public boolean onTurn()
90         {
91                 Os.debug("Spades: onTurn");
92                 return this.send(".turn");
93         }
94
95         /* Helper functions */
96         private boolean send(String dst, String msg)
97         {
98                 if (this.task == null)
99                         return false;
100                 this.task.send(dst, msg);
101                 return true;
102         }
103         private boolean send(String msg)
104         {
105                 if (this.task == null)
106                         return false;
107                 this.task.send(msg);
108                 return true;
109         }
110 }