package koma;
import java.util.Random;
public class step {
String[] koma=new String[7];
int[] pos=new int[7];
String[] hand=new String[7];
int[] x=new int[10];
int[] y=new int[10];
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];
int number_chx;
int[][] pos_sig=new int[100][10];
int game;
void makedata(){
int x1,y1;
int n=0;
for (y1=1;y1<4;y1++){
for (x1=1;x1<4;x1++){
n=n+1;
x[n]=x1;
y[n]=y1;
}}
select();
int s,sx;
int number_sig=0;
int[] sig=new int[100];
int[] sigx=new int[100];
for(s=1;s<number_sel+1;s++){
int s1=koma_sel[s];
makedir(hand[s1],koma[s1]);
int p1=pos[s1];
int x2=x[p1];
int y2=y[p1];
for(sx=1;sx<number_dir+1;sx++){
int x3=x2+dx[sx];
int y3=y2+dy[sx];
int p2=point(x3,y3);
if(p2>0)number_sig=number_sig+1;
if(p2>0)sig[number_sig]=s1;
if(p2>0)sigx[number_sig]=p2;
}
}
for(s=1;s<number_sig+1;s++){
for(sx=1;sx<7;sx++){
pos_sig[s][sx]=pos[sx];
}
int s1=sig[s];
pos_sig[s][s1]=sigx[s];
}
number_ch=0;
int tr;
for(tr=1;tr<number_sig+1;tr++){
if(check(tr)<50){
number_ch=number_ch+1;
for(sx=1;sx<7;sx++){
pos_ch[number_ch][sx]=pos_sig[tr][sx];
}
}
}
change();
double r1=number_chx*Math.random();
tr=(int)r1+1;
invade(tr);
for(s=1;s<7;s++){
pos[s]=pos_chx[tr][s];
hand[s]=hand_chx[tr][s];
}
match();
}
void match(){
if(hand[1]=="後手")mode="後手勝利";
if(hand[4]=="先手")mode="先手勝利";
String mm=mode;
if(mm.equals("後手"))mode="先手";
if(mm.equals("先手"))mode="後手";
}
void invade(int tr){
int s;
int[] c=new int[21];
for(s=1;s<10;s++){
c[s]=0;
}
for(s=1;s<7;s++){
int h=0;
int p1=pos_chx[tr][s];
if(p1>0)h=h+1;
if(hand[s].equals(mode))h=h+1;
if(h==2)c[p1]=100;
}
String mm="後手";
if(mode.equals("後手"))mm="先手";
for(s=1;s<7;s++){
int h=0;
int p1=pos_chx[tr][s];
if(p1>0)h=h+1;
if(hand[s].equals(mm))h=h+1;
if(c[p1]>50)h=h+1;
if(h==3)hand_chx[tr][s]=mode;
if(h==3)pos_chx[tr][s]=0;
}
}
void change(){
int tr,s;
number_chx=0;
for(tr=1;tr<number_ch+1;tr++){
int ch=check(tr);
if(ch<50){
number_chx=number_chx+1;
for(s=1;s<7;s++){
pos_chx[number_chx][s]=pos_ch[tr][s];
hand_chx[number_chx][s]=hand[s];
}
}
}
}
int check(int tr){
int s;
int[] c=new int[21];
for(s=1;s<10;s++){
c[s]=0;
}
for(s=1;s<7;s++){
int h=0;
int p1=pos_sig[tr][s];
if(p1>0)h=h+1;
if(hand[s].equals(mode))h=h+1;
if(h==2)c[p1]=c[p1]+1;
}
int chx=0;
for(s=1;s<10;s++){
if(c[s]>1)chx=100;
}
return chx;
}
void fresh(){
int sx,s;
for(s=1;s<number_ch+1;s++){
for(sx=1;sx<7;sx++){
if(pos_ch[s][sx]==-1)pos_ch[s][sx]=pos[sx];
}}
}
void rev(int nx){
String h1=hand[nx];
String k1=koma[nx];
makedir(h1,k1);
int s;
int p1=pos[nx];
int x1=x[p1];
int y1=y[p1];
for(s=1;s<number_dir+1;s++){
int x2=x1+dx[s];
int y2=y1+dy[s];
p1=point(x2,y2);
if(p1>0)number_ch=number_ch+1;
if(p1>0)pos_ch[number_ch][nx]=p1;
}
}
int point(int xs,int ys){
int pppp=-1;
int s;
for(s=1;s<10;s++){
int h=0;
if(x[s]==xs)h=h+1;
if(y[s]==ys)h=h+1;
if(h==2)pppp=s;
}
return pppp;
}
void select(){
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 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]=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;
}
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;
}
}
}
最終更新:2018年01月19日 13:46