package room;
import java.util.ArrayList;
import java.util.Date;
import account.Account;
import account.AccountManager;
import game.Game;
import game.GameManager;
import game.Team;
public class Room {
private int id; //部屋を一意に認識するid
private String name;
private String pass;
private String mode;
// 0 = divide前 / 1 = divide中 / 2 = divide後
private int divideFlag = 0;
private Game game = null;
private Team team = null;
public static final int TEAM_RED = 0;
public static final int TEAM_BLUE = 1;
public static final int MAX_MEMBERS = 2;
public static final int REMOVE_TIME = 30000; //30000ms = 30s
private ArrayList<Account> members = new ArrayList<Account>();
// AccountManagerを使うために宣言しておく ↓シングルトンパターンを利用しているため
GameManager gamemgr = GameManager.getInstance();
// 一部屋の人数を増やす
public void addMember(Account ac) {
members.add(ac);
ac.setRoom(this);
}
// 一部屋の中にいる人が退出 acのroomとwatの初期化も
public void removeMember(Account ac) {
members.remove(ac);
ac.setRoom(null);
ac.setWait("no");
}
// 一部屋内の人数をカウント
public int getMemberCount() {
return members.size();
}
// 部屋の中のn番目のアカウント情報を取得
public Account getMember(int n) {
return members.get(n);
}
//MAX_MEMBERS(6)人集まったらチーム分けを行う
public void divideTeam() {
game = new Game();
game.setRoom(this);
gamemgr.addGame(game);
//すでに入ってるgameが存在する場合にそのゲームから該当アカウントを削除する
// gamemgr.searchGameSid(this);
//ramdomは[0〜5までの連番][0〜99までの乱数]が入る
int ramdom[][] = new int[MAX_MEMBERS][2];
//0〜5までの番号を割り当てる
for(int i=0; i<MAX_MEMBERS; i++) {
ramdom[i][0] = i;
}
//乱数を生成する
for(int i=0; i<MAX_MEMBERS; i++) {
ramdom[i][1] = (int)(Math.random() * 100);
}
//昇順に並び替える
for(int i=0; i<MAX_MEMBERS; i++) {
for(int j=0; j<MAX_MEMBERS-1; j++) {
if(ramdom[j][1] > ramdom[j+1][1]) {
//変数入れ替え
int temp1 = ramdom[j][1];
ramdom[j][1] = ramdom[j+1][1];
ramdom[j+1][1] = temp1;
//何番目かの入れ替え
int temp2 = ramdom[j][0];
ramdom[j][0] = ramdom[j+1][0];
ramdom[j+1][0] = temp2;
}
}
}
//小さい方から順に3人を赤チーム getMember(0〜2)の人が赤チーム
for(int i=0; i<MAX_MEMBERS/2; i++) {
Account ac = getMember(ramdom[i][0]);
game.setTeamTo(ac,TEAM_RED);
ac.newPlayer();
}
//その他3人を青チーム getMember(3〜5)の人が青チーム
for(int i = MAX_MEMBERS/2; i<MAX_MEMBERS; i++) {
Account ac = getMember(ramdom[i][0]);
game.setTeamTo(ac,TEAM_BLUE);
ac.newPlayer();
}
}
//しばらく通信のない人を削除
public void removeNotConnectMember() {
long nowDate = new Date().getTime();
for(int i = 0; i<getMemberCount(); i++) {
//最終接続時間からREMOVE_TIME以上経ってたら、その人を部屋から退室させる
long time = (nowDate - getMember(i).getFinalConnectTime().getTime());
System.out.println("Roomの通信時間チェック : " + time);
if(REMOVE_TIME <= time) {
removeMember(getMember(i));
}
}
}
//game
public Game getGame() {
return game;
}
public void removeGame() {
game = null;
}
//name
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//id
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
//pass
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
//mode
public String getMode() {
return mode;
}
public void setMode(String mode) {
this.mode = mode;
}
//DivideFlag
public int getDivideFlag() {
return divideFlag;
}
public void setDivideFlag(int divideFlag) {
this.divideFlag = divideFlag;
}
}