diff --git a/src/j7/SeaGameServer.java b/src/j7/SeaGameServer.java index 85de2e4..46502d3 100644 --- a/src/j7/SeaGameServer.java +++ b/src/j7/SeaGameServer.java @@ -15,7 +15,6 @@ import java.util.Hashtable; import java.util.Random; import java.util.StringTokenizer; -import java.util.Vector; public class SeaGameServer { static final int DEFAULT_PORT = 9999; @@ -23,7 +22,7 @@ static ServerSocket serverSocket; static ArrayList clientprocs; //クライアントとのコネクションを保持するVectorオブジェクト - static Vector energy_v; // 燃料タンクの位置情報リスト + static ArrayList energy_v; // 燃料タンクの位置情報リスト static Hashtable userTable = null; // クライアント関連情報登録用テーブル static Random random = null; @@ -113,13 +112,14 @@ // calculationメソッド // 燃料タンクと船の位置関係を調べて,燃料タンクが拾えるかどうか判定します - static void calculation(){ + static synchronized void calculation(){ if (userTable != null && energy_v != null){ // すべてのクライアントについて判定します for (String user : userTable.keySet()) { // 判定するクライアントの名前と船の位置を取り出します Ship ship = (Ship) userTable.get(user); // 燃料タンクすべてについて,船との位置関係を調べます + ArrayList toberemoved = new ArrayList(); for (int[] e : energy_v) { // 燃料タンクの位置と船の位置を調べ,距離を計算します int x = e[0] - ship.x; @@ -127,10 +127,13 @@ double r = Math.sqrt(x * x + y * y); // 距離"10"以内なら燃料タンクを取り込みます if (r < 10) { - energy_v.removeElement(e); + toberemoved.add(e); ship.point++; } } + for(int[] rme : toberemoved) { + energy_v.remove(rme); + } } } } @@ -164,7 +167,7 @@ // 燃料タンクを1つだけ海上にランダムに配置 public static void putEnergy(){ if (energy_v == null){// 初めて配置する場合の処理 - energy_v = new Vector(); + energy_v = new ArrayList(); } if (random == null){// 初めて乱数を使う場合の処理 random = new Random(); @@ -174,7 +177,7 @@ e[0] = Math.abs(random.nextInt()) % 256; e[1] = Math.abs(random.nextInt()) % 256; - energy_v.addElement(e); + energy_v.add(e); } // end of putEnergy //--------------------------------------------------------------------- // サーバソケットの作成とクライアント接続の処理