/**
* IntOrder クラスは、SGF形式の手順と、OrderOfMoves クラス形式の手順の変換を行う。
* @author Jiro Suzuki
*/
public class IntOrder{
private OrderOfMoves orderOfMoves;
/**
* 手順が空のインスタンスを生成します。
*/
IntOrder(){
orderOfMoves=new OrderOfMoves();
}
/**
* SGF形式の手順を、OrderOfMoves クラス形式の手順に変換します。
* @param data SGF形式の手順。String の配列として受け取る。
* @return OrderOfMoves クラス形式の手順
*/
public OrderOfMoves translateSgfToInt(String[] data){
//SGF形式のデータは「列行」の順番なので、行列を反転して保管する。
for(int i=0;i<data.length;i++){
int stoneColor,row,col;
if(data[i].startsWith("B[") | data[i].startsWith("W[")){
col=translateSub(data[i].charAt(2));
row=translateSub(data[i].charAt(3));
if(data[i].startsWith("B[")){
stoneColor=1;
}else{
stoneColor=2;
}
orderOfMoves.add(new Move(stoneColor,row,col));
}
}
return orderOfMoves;
}
private int translateSub(char ch){
int i=0;
switch (ch){
case 'a':i=0; break;
case 'b':i=1; break;
case 'c':i=2; break;
case 'd':i=3; break;
case 'e':i=4; break;
case 'f':i=5; break;
case 'g':i=6; break;
case 'h':i=7; break;
case 'i':i=8; break;
case 'j':i=9; break;
case 'k':i=10; break;
case 'l':i=11; break;
case 'm':i=12; break;
case 'n':i=13; break;
case 'o':i=14; break;
case 'p':i=15; break;
case 'q':i=16; break;
case 'r':i=17; break;
case 's':i=18; break;
case 't':i=-1; break;
default:i=-1; break;
}
return i;
}
/**
* OrderOfMoves クラス形式の手順を、SGF形式の手順に変換します。
* @param orderOfMoves OrderOfMoves クラス形式の手順。
* @return SGF形式の手順。String の配列として渡す。
*/
public String[] translateIntToSgf(OrderOfMoves orderOfMoves){
//SGF形式のデータは「列行」の順番なので、行列を反転して保管する。
String[] sgfStrArray=new String[orderOfMoves.size()];
for(int i=0;i<orderOfMoves.size();i++){
String stoneColor,row,col;
col=translateSub2(orderOfMoves.get(i).getCol());
row=translateSub2(orderOfMoves.get(i).getRow());
if(orderOfMoves.get(i).getStoneColor()==1){
stoneColor="B[";
}else{
stoneColor="W[";
}
String sgfMove=new String(stoneColor + col + row + "]");
sgfStrArray[i]=sgfMove;
}
return sgfStrArray;
}
private String translateSub2(int num){
String s;
switch (num){
case 0:s="a"; break;
case 1:s="b"; break;
case 2:s="c"; break;
case 3:s="d"; break;
case 4:s="e"; break;
case 5:s="f"; break;
case 6:s="g"; break;
case 7:s="h"; break;
case 8:s="i"; break;
case 9:s="j"; break;
case 10:s="k"; break;
case 11:s="l"; break;
case 12:s="m"; break;
case 13:s="n"; break;
case 14:s="o"; break;
case 15:s="p"; break;
case 16:s="q"; break;
case 17:s="r"; break;
case 18:s="s"; break;
default:s="t"; break;
}
return s;
}
}