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

Quick Search    Search Deep

Source code: org/zazof/jtegServer/StartMH.java


1   package org.zazof.jtegServer;
2   
3   import java.util.*;
4   import org.apache.log4j.Category;
5   
6   /**
7    * This MessageHandler process "start" messages.
8    */
9   public class StartMH extends MessageHandler{
10  
11    public StartMH(){
12    }
13  
14    protected void processMessage(Message m){
15      int nbPlayers; String result;
16      PlayerContainer pc = m.getGameController().getPlayerContainer();
17      nbPlayers = pc.getNumberPlayers();
18      // check if there are at least 2 players
19      if (nbPlayers < 2){
20        result = "error=start";
21        m.getPlayer().sendMessage(result);
22        return;
23      }
24      // set every player as ACTIVE
25      Enumeration players = pc.getElements();
26      while (players.hasMoreElements()){
27        Player p = (Player) players.nextElement();
28        p.setStatus(Player.IDLE);
29      }
30      m.getPlayer().setStatus(Player.STARTED);
31      // initializes the countries
32      initCountries(pc, m.getWorld());
33      // build an StartAnswer to send to the players
34      StartAnswer sa = getStatus(m.getGameController(), m.getWorld());
35      pc.sendMessage(sa);
36      Player fichasPlayer = (Player) pc.getElements().nextElement();
37      result = "modalidad=0,0;fichas=" + fichasPlayer.getID() + ",5";
38      // should the result also be sent to the observers?
39      pc.sendMessage(result);
40    }
41  
42    /**
43     * initializes the countries
44     */ 
45    private void initCountries(PlayerContainer pc, World w){
46      Random r = new Random();
47      int nbPlayers = pc.getNumberPlayers();
48      int maxCountries[] = new int[20]; // nb countries owned by player i
49      // each player gets nb countries
50      int nb = w.getNbCountries() / nbPlayers; 
51      for(int i=0; i<nbPlayers; i++){
52        maxCountries[i] = nb;
53      }
54      // and some players get 1 more
55      int rest = w.getNbCountries() % nbPlayers;
56      for(int i=0; i<rest; i++){
57        maxCountries[nbPlayers-i]++;
58      }
59      // assign countries to the players
60      for(int i = 0; i<w.getNbCountries(); i++){
61        int a = r.nextInt(nbPlayers);
62        if (maxCountries[a] > 0){
63          maxCountries[a]--;
64          w.getCountry(i).setOwner(pc.getPlayer(a));  
65          w.getCountry(i).setArmies(1);
66        }else{
67          i--; // give it another try
68        }
69      }
70    }
71  
72    /**
73     * @return status message
74     */
75    private StartAnswer getStatus(GameController g, World w){
76      Player p; 
77      StartAnswer a = new StartAnswer();
78      PlayerContainer players = g.getPlayerContainer();
79      Vector ps = players.getPlayers();
80      a.set("nbPlayers", Integer.toString(ps.size()));
81      for(int i = 0; i < ps.size(); i++){
82        p = (Player) ps.elementAt(i);
83        a.set("name_" + i, p.getName());
84        a.set("color_" + i, Integer.toString(p.getColor()));
85        a.set("id_" + i, Integer.toString(p.getID()));
86        a.set("status_" + i, Integer.toString(p.getStatus()));
87        a.set("countries_" + i, Integer.toString(w.countCountries(p)));
88        a.set("armies_" + i, Integer.toString(w.countArmies(p)));
89      }
90      return a;
91    }
92  
93  }