/** * 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; } }