package jump;
public class one {
String[] koma=new String[7];
int[] pos=new int[7];
String[] hand=new String[7];
int[][] ban=new int[10][2];
int[] dy=new int[100];
int[] dx=new int[100];
int number_dir;
String mode;
int number_sel;
int[] koma_sel=new int[11];
int[][] pos_ch=new int[101][7];
int number_ch;
int[][] pos_chx=new int[101][7];
String[][] hand_chx=new String[101][7];
String[] mode_chx=new String[101];
String[][] grow_chx=new String[101][7];
int number_chx;
String[] hash_chx=new String[101];
String[] grow=new String[11];
void makedata(String hhh){
decode(hhh);
select_koma();
int k1,mx;
int[] delta=new int[50];
int[] de=new int[50];
int[] den=new int[50];
int number_delta;
number_delta=0;
for(k1=1;k1<number_sel+1;k1++){
int m=koma_sel[k1];
int p1=pos[m];
int x1=ban[p1][0];
int y1=ban[p1][1];
String kp=ng(koma[m],grow[m]);
makedir(hand[m],kp);
for(mx=1;mx<number_dir+1;mx++){
int x2=x1+dx[mx];
int y2=y1+dy[mx];
int p2=point(x2,y2);
if(p2>0)number_delta=number_delta+1;
if(p2>0)delta[number_delta]=m;
if(p2>0)de[number_delta]=p1;
if(p2>0)den[number_delta]=p2;
}
}
int[] delta_ch=new int[50];
int[] de_ch=new int[50];
int[] den_ch=new int[50];
int sx=0;
int number_ch=0;
for(k1=1;k1<number_delta+1;k1++){
if(check(den[k1])<40)sx=sx+1;
if(check(den[k1])<40)delta_ch[sx]=delta[k1];
if(check(den[k1])<40)de_ch[sx]=de[k1];
if(check(den[k1])<40)den_ch[sx]=den[k1];
}
number_ch=sx;
for(k1=1;k1<number_ch+1;k1++){
invade(k1,delta_ch[k1],den_ch[k1]);
}
number_chx=number_ch;
for(k1=1;k1<number_chx+1;k1++){
match(k1);
}
for(k1=1;k1<number_chx+1;k1++){
hash_chx[k1]=hash(k1);
}
}
String ng(String k1,String g1){
String kk=k1;
int h=0;
if(g1.equals("成"))h=h+1;
if(k1.equals("歩"))h=h+1;
if(h==2)kk="金";
h=0;
if(g1.equals("成"))h=h+1;
if(k1.equals("香"))h=h+1;
if(h==2)kk="金";
h=0;
if(g1.equals("成"))h=h+1;
if(k1.equals("桂"))h=h+1;
if(h==2)kk="金";
h=0;
if(g1.equals("成"))h=h+1;
if(k1.equals("銀"))h=h+1;
if(h==2)kk="金";
h=0;
if(g1.equals("成"))h=h+1;
if(k1.equals("角"))h=h+1;
if(h==2)kk="竜馬";
h=0;
if(g1.equals("成"))h=h+1;
if(k1.equals("飛"))h=h+1;
if(h==2)kk="竜王";
return kk;
}
String hash(int q){
String ha="";
if (mode_chx[q].equals("先手"))ha=ha+"w";
if (mode_chx[q].equals("後手"))ha=ha+"x";
if (mode_chx[q].equals("先手勝利"))ha=ha+"y";
if (mode_chx[q].equals("後手勝利"))ha=ha+"z";
int s;
for(s=1;s<7;s++){
if(hand_chx[q][s].equals("先手"))ha=ha+"p";
if(hand_chx[q][s].equals("後手"))ha=ha+"q";
}
String w1="a,b,c,d,e,f,g,h,i,j";
String[] ww=w1.split(",");
for(s=1;s<7;s++){
int sx=pos_chx[q][s];
ha=ha+ww[sx];
}
for(s=1;s<7;s++){
if(grow_chx[q][s].equals("成"))ha=ha+"l";
if(grow_chx[q][s].equals("不成"))ha=ha+"k";
}
return ha;
}
void match(int q){
String mm=mode;
if(mm=="先手")mode_chx[q]="後手";
if(mm=="後手")mode_chx[q]="先手";
if(hand_chx[q][1]=="後手")mode_chx[q]="後手勝利";
if(hand_chx[q][4]=="先手")mode_chx[q]="先手勝利";
}
void invade(int tr,int m1,int p1){
int s;
for(s=1;s<7;s++){
pos_chx[tr][s]=pos[s];
hand_chx[tr][s]=hand[s];
grow_chx[tr][s]=grow[s];
}
pos_chx[tr][m1]=p1;
int ch1=0;
if(p1==7)ch1=ch1+1;
if(p1==8)ch1=ch1+1;
if(p1==9)ch1=ch1+1;
if(mode.equals("先手"))ch1=ch1+1;
if(ch1==2)grow_chx[tr][m1]="成";
int ch2=0;
if(p1==1)ch2=ch2+1;
if(p1==2)ch2=ch2+1;
if(p1==3)ch2=ch2+1;
if(mode.equals("後手"))ch2=ch2+1;
if(ch2==2)grow_chx[tr][m1]="成";
String mm="先手";
if(mode.equals("先手"))mm="後手";
for(s=1;s<7;s++){
int h=0;
if(hand_chx[tr][s].equals(mm))h=h+1;
if(pos_chx[tr][s]==p1)h=h+1;
if(h==2)hand_chx[tr][s]=mode;
if(h==2)pos_chx[tr][s]=0;
if(h==2)grow_chx[tr][s]="不成";
}
}
int check(int p2){
int s;
int chx=0;
for(s=1;s<7;s++){
int h=0;
if(pos[s]==p2)h=h+1;
if(hand[s].equals(mode))h=h+1;
if(h==2)chx=100;
}
return chx;
}
int point(int xs,int ys){
int pppp=-1;
int s;
for(s=1;s<10;s++){
int h=0;
if(ban[s][0]==xs)h=h+1;
if(ban[s][1]==ys)h=h+1;
if(h==2)pppp=s;
}
return pppp;
}
void makedir(String h1,String k1){
if (k1.equals("王")){
dx[1]=1;
dy[1]=0;
dx[2]=-1;
dy[2]=0;
dx[3]=0;
dy[3]=1;
dx[4]=0;
dy[4]=-1;
dx[5]=1;
dy[5]=1;
dx[6]=-1;
dy[6]=1;
dx[7]=1;
dy[7]=-1;
dx[8]=-1;
dy[8]=-1;
number_dir=8;
}
if (k1.equals("飛")){
dx[1]=1;
dy[1]=0;
dx[2]=-1;
dy[2]=0;
dx[3]=0;
dy[3]=1;
dx[4]=0;
dy[4]=-1;
dx[5]=2;
dy[5]=0;
dx[6]=-2;
dy[6]=0;
dx[7]=0;
dy[7]=-2;
dx[8]=0;
dy[8]=2;
number_dir=8;
}
if (k1.equals("竜王")){
dx[1]=1;
dy[1]=0;
dx[2]=-1;
dy[2]=0;
dx[3]=0;
dy[3]=1;
dx[4]=0;
dy[4]=-1;
dx[5]=2;
dy[5]=0;
dx[6]=-2;
dy[6]=0;
dx[7]=0;
dy[7]=-2;
dx[8]=0;
dy[8]=2;
dx[9]=1;
dy[9]=1;
dx[10]=-1;
dy[10]=-1;
dx[11]=1;
dy[11]=-1;
dx[12]=-1;
dy[12]=1;
number_dir=12;
}
if (k1.equals("角")){
dx[1]=1;
dy[1]=1;
dx[2]=-1;
dy[2]=-1;
dx[3]=1;
dy[3]=-1;
dx[4]=-1;
dy[4]=1;
dx[5]=2;
dy[5]=2;
dx[6]=-2;
dy[6]=-2;
dx[7]=2;
dy[7]=-2;
dx[8]=-2;
dy[8]=2;
number_dir=8;
}
if (k1.equals("竜馬")){
dx[1]=1;
dy[1]=1;
dx[2]=-1;
dy[2]=-1;
dx[3]=1;
dy[3]=-1;
dx[4]=-1;
dy[4]=1;
dx[5]=2;
dy[5]=2;
dx[6]=-2;
dy[6]=2;
dx[7]=2;
dy[7]=-2;
dx[8]=-2;
dy[8]=-2;
dx[9]=1;
dy[9]=0;
dx[10]=-1;
dy[10]=0;
dx[11]=0;
dy[11]=1;
dx[12]=0;
dy[12]=-1;
number_dir=12;
}
int h=0;
if (k1.equals("歩"))h=h+1;
if (h1.equals("先手"))h=h+1;
if (h==2){
dx[1]=0;
dy[1]=1;
number_dir=1;
}
h=0;
if (k1.equals("金"))h=h+1;
if (h1.equals("先手"))h=h+1;
if (h==2){
dx[1]=1;
dy[1]=0;
dx[2]=-1;
dy[2]=0;
dx[3]=0;
dy[3]=1;
dx[4]=0;
dy[4]=-1;
dx[5]=1;
dy[5]=1;
dx[6]=-1;
dy[6]=1;
number_dir=6;
}
h=0;
if (k1.equals("金"))h=h+1;
if (h1.equals("後手"))h=h+1;
if (h==2){
dx[1]=1;
dy[1]=0;
dx[2]=-1;
dy[2]=0;
dx[3]=0;
dy[3]=1;
dx[4]=0;
dy[4]=-1;
dx[5]=1;
dy[5]=-1;
dx[6]=-1;
dy[6]=-1;
number_dir=6;
}
h=0;
if (k1.equals("銀"))h=h+1;
if (h1.equals("先手"))h=h+1;
if (h==2){
dx[1]=1;
dy[1]=1;
dx[2]=-1;
dy[2]=1;
dx[3]=0;
dy[3]=1;
dx[4]=-1;
dy[4]=-1;
dx[5]=1;
dy[5]=-1;
number_dir=5;
}
h=0;
if (k1.equals("銀"))h=h+1;
if (h1.equals("後手"))h=h+1;
if (h==2){
dx[1]=1;
dy[1]=-1;
dx[2]=-1;
dy[2]=-1;
dx[3]=0;
dy[3]=-1;
dx[4]=-1;
dy[4]=1;
dx[5]=1;
dy[5]=1;
number_dir=5;
}
h=0;
if (k1.equals("歩"))h=h+1;
if (h1.equals("後手"))h=h+1;
if (h==2){
dx[1]=0;
dy[1]=-1;
number_dir=1;
}
h=0;
if (k1.equals("香"))h=h+1;
if (h1.equals("先手"))h=h+1;
if (h==2){
dx[1]=0;
dy[1]=1;
dx[2]=0;
dy[2]=2;
number_dir=2;
}
h=0;
if (k1.equals("香"))h=h+1;
if (h1.equals("後手"))h=h+1;
if (h==2){
dx[1]=0;
dy[1]=-1;
dx[2]=0;
dy[2]=-2;
number_dir=2;
}
h=0;
if (k1.equals("桂"))h=h+1;
if (h1.equals("先手"))h=h+1;
if (h==2){
dx[1]=-1;
dy[1]=2;
dx[2]=1;
dy[2]=2;
number_dir=2;
}
h=0;
if (k1.equals("桂"))h=h+1;
if (h1.equals("後手"))h=h+1;
if (h==2){
dx[1]=1;
dy[1]=-2;
dx[2]=-1;
dy[2]=-2;
number_dir=2;
}
}
void select_koma(){
int s,sx;
sx=0;
for(s=1;s<7;s++){
int h=0;
if(hand[s].equals(mode))h=h+1;
if(pos[s]>0)h=h+1;
if(h==2)sx=sx+1;
if(h==2)koma_sel[sx]=s;
}
number_sel=sx;
}
void decode(String hxp){
String m1=hxp.substring(0,1);
String[] h1=new String[7];
String[] p1=new String[7];
String[] g1=new String[7];
int s;
for(s=1;s<7;s++){
h1[s]=hxp.substring(s,s+1);
}
for(s=1;s<7;s++){
p1[s]=hxp.substring(s+6,s+7);
}
for(s=1;s<7;s++){
g1[s]=hxp.substring(s+12,s+13);
}
if(m1.equals("w"))mode="先手";
if(m1.equals("x"))mode="後手";
if(m1.equals("y"))mode="先手勝利";
if(m1.equals("z"))mode="後手勝利";
for(s=1;s<7;s++){
if(h1[s].equals("p"))hand[s]="先手";
if(h1[s].equals("q"))hand[s]="後手";
}
for(s=1;s<7;s++){
if(p1[s].equals("a"))pos[s]=0;
if(p1[s].equals("b"))pos[s]=1;
if(p1[s].equals("c"))pos[s]=2;
if(p1[s].equals("d"))pos[s]=3;
if(p1[s].equals("e"))pos[s]=4;
if(p1[s].equals("f"))pos[s]=5;
if(p1[s].equals("g"))pos[s]=6;
if(p1[s].equals("h"))pos[s]=7;
if(p1[s].equals("i"))pos[s]=8;
if(p1[s].equals("j"))pos[s]=9;
}
for(s=1;s<7;s++){
if(g1[s].equals("k"))grow[s]="不成";
if(g1[s].equals("l"))grow[s]="成";
}
}
}
最終更新:2018年04月16日 09:11