七行プログラミング part4
■ このスレッドは過去ログ倉庫に格納されています
0658雪ん子
NGNG王が動かないバグ、
後手が正しく成れないバグ
は修正しましたがほかにありますでしょうか?
あと、私の知識では
h[i]&&printf("%.2s",k+h[i]*2);
の前半6byteの意図がわかりません。教えていただけませんでしょうか?
#include<stdio.h>
char*k=" 歩香桂銀金角飛王",d[81]={2,3,4,5,8,5,4,3,2,0,7},h[64],b[9],a=32,c=16,
t,i,j,u,m,v,w,s,*p,z,e;main(){d[c]=6;for(i=18;i<27;)d[i++]=1;for(;~--i;)d[80-i]
=d[i]?d[i]+a:0;for(;;){for(z=i=0;i<81;++i%9||puts("|\n"))u=d[i],j=u%c,printf("\
|%c%.2s%c"," +"[u/c&1],k+j*2,"^_ "[j?u/a:2]);puts("先手");for(i=64;~--i;z|=h[i]
&8,a-i||puts("\n後手"))h[i]&&printf("%.2s",k+h[i]*2);printf("\n%s手入力\n",t?"\
後":"先");if(z)return!printf("%s手の勝利",i<a?"後":"先");l:scanf("%4s",b);for(i
=0;i<4;)b[i++]-=49;e=8-b[2];i=e+b[3]*9;if(*b-63){*b=8-*b;j=*b+b[1]*9;m=*(p=d+i)
;u=d[j];z=!u|(u&a)==t||m&&u/a==m/a;if(!z){m=t?i-j:j-i;s=u%a;v=7<m&m<11;w=v|m*m
==1;if(!(s<2&m==9|s==3&(m==19|m==17)|s==4&(v|m==-8|m==-10)|(s&8||21<s)&(w|-7<m&
m<-11)|(s==5|c<s&s<22)&(w|m==-9))){v=j;do v+=s%c==6&!(m%8&&m%10)?((e>*b)+(b[3]>
b[1])*9-5)*2:s%c==7?z=m%9?1:9,j>i?-z:z:m&&s==2&m%9==0?t?9:-9:1;while((z=v-i)&&!
d[v]);}if(!z){for(m=a-t;d[j]=m<64-t&&h[m]||(h[m]=*p%c,0);m++);*p=u;if(s<8?t?j<
53&i>54:i<27&j>26:0){for(m=puts("成る?y/n");m-'y'&&m-'n';scanf("%c",&m));*p|=m
-'n'?c:0;}}}t=z?t:a-t;}else{j=b[1]+1;for(u=i%9;u<81&&~t+d[u+=9];);if(d[i]||i>81
|j==1&u<81)goto l;for(u=a-t;u<64-t&&h[u]-j;u++);h[u]=0;t=a-t;d[i]=j+t;}}}
■ このスレッドは過去ログ倉庫に格納されています