Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/dma/ihm/game/match/Match.java


1   package org.dma.ihm.game.match;
2   
3   import java.io.*;
4   
5   import java.util.*;
6   import org.dma.ihm.controller.data.*;
7   import org.dma.ihm.game.league.*;
8   import org.dma.ihm.game.league.helper.*;
9   import org.dma.ihm.game.league.std.*;
10  import org.dma.ihm.game.player.*;
11  
12  import org.dma.ihm.game.team.*;
13  
14  /**
15   *  Match class that plays a good game of ice hockey. Contains: - Results - Play
16   *  method called by event or controller <p>
17   *
18   *  -- UNDER CONSTRUCTION --
19   *
20   * @author     Bernhard von Gunten & Arik Dasen
21   * @created    December 29, 2001
22   */
23  public class Match implements Serializable {
24    private Team teamHome;
25    private Team teamAway;
26    private ScoreSheet scoreSheet = null;
27  
28    private LeagueElement leagueElement;
29    private boolean played = false;
30  
31    private Rules rules = null;
32  
33    private static Random r = new Random();
34  
35    private boolean overtimePlayed = false;
36  
37  
38    /**
39     *  Constructor for the Match object
40     *
41     * @param  leagueElement  LeagueElement of this match
42     * @param  teamHome       Home team of this match
43     * @param  teamAway       Away team of this match
44     * @param  rules          Rules of this match
45     */
46    public Match(LeagueElement leagueElement, Team teamHome, Team teamAway, Rules rules) {
47      this.leagueElement = leagueElement;
48      this.teamHome = teamHome;
49      this.teamAway = teamAway;
50      this.rules = rules;
51      this.scoreSheet = new ScoreSheet(this);
52    }
53  
54  
55    /**
56     *  Returns boolean if user passed by is involved in this match
57     *
58     * @param  user  User looking for
59     * @return       The userInvolved value
60     */
61    public boolean isUserInvolved(User user) {
62      if (teamHome.equals(user.getTeam())) {
63        return true;
64      } else if (teamAway.equals(user.getTeam())) {
65        return true;
66      }
67      return false;
68    }
69  
70  
71    /**
72     *  Returns if teamHome is winner of this match.
73     *
74     * @return    Boolean if teamHome is winner
75     */
76    public boolean _isTeamHomeWinner() {
77      return scoreSheet.isHomeTeamWinner();
78    }
79  
80  
81    /**
82     *  Gets the teamWinner attribute of the Match object
83     *
84     * @param  team  Team to look if it's the winner of this match.
85     * @return       The teamWinner value
86     */
87    public boolean isTeamWinner(Team team) {
88      Team winner = null;
89      if (_isTeamHomeWinner()) {
90        winner = teamHome;
91      } else {
92        winner = teamAway;
93      }
94      if (team.equals(winner)) {
95        return true;
96      } else {
97        return false;
98      }
99    }
100 
101 
102   /**
103    *  Gets the gameTied attribute of the Match object
104    *
105    * @return    The gameTied value
106    */
107   public boolean isGameTied() {
108     return scoreSheet.isGameTied();
109   }
110 
111 
112   /**
113    *  Gets the leagueElement attribute of the Match object
114    *
115    * @return    The leagueElement value
116    */
117   public LeagueElement getLeagueElement() {
118     return leagueElement;
119   }
120 
121   public Team getTeamForPlayer( Player oPlayer )
122   {
123     if( this.teamAway.isPlayerInTeam( oPlayer ) )
124     {
125       return this.teamAway;
126     }
127     else
128     {
129       return this.teamHome;
130     }
131   }
132 
133   /**
134    *  Gets the teamHome attribute of the Match object
135    *
136    * @return    The teamHome value
137    */
138   public Team getTeamHome() {
139     return teamHome;
140   }
141 
142 
143   /**
144    *  Gets the teamAway attribute of the Match object
145    *
146    * @return    The teamAway value
147    */
148   public Team getTeamAway() {
149     return teamAway;
150   }
151 
152 
153   /**
154    *  Gets the scoreSheet attribute of the Match object
155    *
156    * @return    The scoreSheet value
157    */
158   public ScoreSheet getScoreSheet() {
159     return scoreSheet;
160   }
161 
162 
163   /**
164    *  Who gets how many points ...
165    *
166    * @param  team  Description of the Parameter
167    * @return       The points value
168    */
169   public int getPoints(Team team) {
170     if (isGameTied()) {
171       return rules.pointsForTied();
172     } else {
173       if (overtimePlayed) {
174         if (this.isTeamWinner(team)) {
175           return rules.pointsForOvertimeWin();
176         } else {
177           return rules.pointsForOvertimeLoss();
178         }
179       } else {
180         if (this.isTeamWinner(team)) {
181           return rules.pointsForWin();
182         } else {
183           return rules.pointsForLoss();
184         }
185       }
186     }
187   }
188 
189 
190   /**  The kick azz play method */
191   public void play() {
192 
193     // --------------- VERY UNDER CONSTRUCTION -------------
194     // Now we play according to rules!
195 
196     // play regular game
197     int period = 0;
198     for (period = 1; period <= rules.numberOfPeriods(); period++) {
199       // play period
200       for (int minute = 1; minute <= rules.minutesPerPeriod(); minute++) {
201         playMinute(period, minute, false);
202       }
203     }
204     // play overtime
205     if (rules.playOvertime() && scoreSheet.isGameTied()) {
206       overtimePlayed = true;
207       do {
208         // play period
209         period++;
210         for (int minute = 1; minute <= rules.minutesPerOvertime(); minute++) {
211           playMinute(period, minute, rules.suddenDeath());
212         }
213       } while (rules.contignousOvertime() && scoreSheet.isGameTied());
214     }
215     // play shootout
216     if (rules.playShootout() && scoreSheet.isGameTied()) {
217       // werfe eine Muenze ;-)))
218       while (scoreSheet.isGameTied()) {
219         playMinute(0, 0, true);
220       }
221     }
222 
223     // -------------------- END KICK AZZ GAME --------------
224 
225     scoreSheet.finish();
226     this.played = true;
227   }
228 
229 
230   /**
231    *  Play a minute (EXTREM UNDER CONSTRUCTION)
232    *
233    * @param  period       Match periode
234    * @param  minute       Minute to play
235    * @param  suddenDeath  SuddenDeath boolean
236    */
237   private void playMinute(int period, int minute, boolean suddenDeath) {
238 
239     // Some crazy A.I. ;))))
240     // Sorry Rik ... musste ich doch einfach tun ;-))))
241 
242     if (r.nextInt(10) == 5) {
243 
244       // goal
245       Goal goal = null;
246 
247       double homeAdv = (teamHome.getTeamAttributes().getOverall() -  teamAway.getTeamAttributes().getOverall());
248       // + 5 For homeTeam
249       homeAdv += 5;
250 
251       if (r.nextInt(100) <= 50 + homeAdv) {
252         // hometeam
253         Player[] homePlayers = teamHome.getPlayers();
254         Player player = (Player) homePlayers[r.nextInt(20)];
255         Player assist1 = (Player) homePlayers[r.nextInt(20)];
256         Player assist2 = (Player) homePlayers[r.nextInt(20)];
257         goal = new Goal(String.valueOf(((period - 1) * 20) + minute), teamHome, teamAway, player, assist1, assist2);
258       } else {
259         // awayteam
260         Player[] awayPlayers = teamAway.getPlayers();
261         Player player = (Player) awayPlayers[r.nextInt(20)];
262         Player assist1 = (Player) awayPlayers[r.nextInt(20)];
263         Player assist2 = (Player) awayPlayers[r.nextInt(20)];
264         goal = new Goal(String.valueOf(((period - 1) * 20) + minute), teamAway, teamHome, player, assist1, assist2);
265       }
266       scoreSheet.addGoal(goal);
267     }
268 
269     if (r.nextInt(10) == 5) {
270 
271       // goal
272       Penalty penalty = null;
273 
274       if (r.nextBoolean()) {
275         // hometeam
276         Player[] homePlayers = teamHome.getPlayers();
277         Player player = (Player) homePlayers[r.nextInt(20)];
278         penalty = new Penalty (String.valueOf(((period - 1) * 20) + minute), teamHome, player, 2);
279       } else {
280         // awayteam
281         Player[] awayPlayers = teamAway.getPlayers();
282         Player player = (Player) awayPlayers[r.nextInt(20)];
283         penalty = new Penalty (String.valueOf(((period - 1) * 20) + minute), teamAway, player, 2);
284       }
285       scoreSheet.addPenalty(penalty);
286     }
287 
288 
289 
290 
291   }
292 
293 
294   /**
295    *  Gets the played attribute of the Match object
296    *
297    * @return    The played value
298    */
299   public boolean isPlayed() {
300     return played;
301   }
302 
303 
304   /**
305    *  Gets the description attribute of the Match object
306    *
307    * @return    The description value
308    */
309   public String getDescription() {
310     if (this.isPlayed()) {
311       return teamHome.getTeamInfo().getTeamName() + " vs. " + teamAway.getTeamInfo().getTeamName() + " Result : " + scoreSheet.getGoalsHome() + ":" + scoreSheet.getGoalsAway();
312     } else {
313       return teamHome.getTeamInfo().getTeamName() + " vs. " + teamAway.getTeamInfo().getTeamName();
314     }
315   }
316 
317 }