| このOSにはインストールできません |
void Kyokumen::MakePinInf(int *pin) const
{
int i;// ピン情報を設定する
for (i = 0x11; i <= 0x99; i++) { // 0はピンされていない、という意味
pin[i] = 0;
}
if (kingS) { //自玉が盤面にある時のみ有効
for (i = 0; i < 8; i++) {
int p;
p = search(kingS, -Direct[i]);
if ((ban[p] != WALL) && !(ban[p] & ENEMY)) { //味方の駒が有る ←ここの部分
if (controlE[p]&(1<<(16+i))) {
pin[p]=Direct[i];
}
}
}
}
……
} |
void Kyokumen::MakePinInf(int *pin) const
{
int i;// ピン情報を設定する
for (i = 0x11; i <= 0x99; i++) { // 0はピンされていない、という意味
pin[i] = 0;
}
if (kingS) { //自玉が盤面にある時のみ有効
for (i = 0; i < 8; i++) {
int p;
p = search(kingS, -Direct[i]);
// ↓hakusa 20120428修正
// http://lesserpyon.bbs.coocan.jp/?m=listthread&t_id=25
// if ((ban[p] != WALL) && !(ban[p] & ENEMY)) { //味方の駒が有る
if ((ban[p] != WALL) && !(ban[p] & SELF)) { //味方の駒が有る
// ↑hakusa 20120428修正
if (controlE[p]&(1<<(16+i))) {
pin[p]=Direct[i];
}
}
}
}
……
}
|
×if ((ban[p] != WALL) && !(ban[p] & SELF)){ ←これだと「味方の駒じゃない」になっちゃうにしないといけなかった。うぅ……(泣)
○if ((ban[p] != WALL) && (ban[p] & SELF)) { ←これが「味方の駒である」
| 1>d:\project\2012\hshogi\makeoute.cpp(1317): fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "StdAfx.h"' をソースに追加しましたか? |
<1:Hash:7fc3144bff4d1104 Hand:6a3331d33105d2c4 Kyokumen:15f02598ce48c3c0 <1:Mochigoma:角02金03銀桂02香03歩15 <1: 09 08 07 06 05 04 03 02 01 <1:+---------------------------+ <1:| ・ ・ ・v飛 ・ ・ 全 ・v王|01 <1:| ・ ・ ・ ・ 龍 ・ ・ ・v香|02 <1:| ・ ・ ・ ・ ・v銀v銀v歩v歩|03 <1:| ・ ・ ・ ・ ・ ・v歩 ・ ・|04 <1:| ・ ・ ・ ・ ・ ・ ・ ・ ・|05 <1:| ・ ・ ・ ・ ・ ・ ・ ・ ・|06 <1:| ・ ・ ・ ・ ・ ・ ・ ・ ・|07 <1:| ・ ・ ・ ・ ・ ・ ・ ・ ・|08 <1:| ・ ・ ・ ・ ・ ・ ・ ・ ・|09 <1:+---------------------------+ <1:Mochigoma:金桂02 <1:num:1 <1:11 壁打 ←←←←←←←←←←!!!!!!!!!! |
// 王手されていたら、それを受けないとしかたない。
if (SorE==SELF && controlE[kingS]!=0) {
printf("s-anti\n");←←←←←←←←←←←←←←←←←←←←ここ
return AntiCheck(SorE,teBuf,pin,controlE[kingS]);
}
|
int Kyokumen::MakeLegalMoves(int SorE,Te *teBuf,int *pin)
{
int pbuf[16*11];
int teNum=0;
if (pin==NULL) {
MakePinInf(pbuf);
pin=pbuf;
}
//if (SorE==SELF && controlE[kingS]!=0) {
// return AntiCheck(SorE,teBuf,pin,controlE[kingS]);
//}
//if (SorE==ENEMY && controlS[kingE]!=0) {
// return AntiCheck(SorE,teBuf,pin,controlS[kingE]);
//}
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓これ
if (SorE==SELF && kingS != 0 && controlE[kingS]!=0) {
// 先手玉があるかどうかという条件を追加。(詰将棋などで先手玉がないなら入らない)
return AntiCheck(SorE,teBuf,pin,controlE[kingS]);
}
if (SorE==ENEMY && kingE != 0 && controlS[kingE]!=0) {
// 後手玉があるかどうかという条件を追加。(詰将棋などで後手玉がないなら入らない)
return AntiCheck(SorE,teBuf,pin,controlS[kingE]);
}
|
char b_str[50];
itoa(controlE[kingS], b_str, 2); ←controlE[kingS]を2進数に変換してb_strに代入する
printf("controlE[kingS]:%s ",b_str);
|
// 龍がこの筋に乗れるか?(乗れたら王手になる) chkSRYyori(to,1,outeNum,teBuf,pin); chkSRYyori(to,3,outeNum,teBuf,pin); chkSRYyori(to,4,outeNum,teBuf,pin); chkSRYyori(to,6,outeNum,teBuf,pin); |

k.EvaluateTe(SorE,teNum,teBuf);
for(i=0;i<teNum;i++) {
printf(" v0:%3d:%7d ",i,teBuf[i].value);
teBuf[i].Print2();
printf("\n");
if (teBuf[i].value<-3000 && i>0 && retval>-INFINITEVAL) {
break;
}
…… |
<1: v0: 0: 3 68王(59) <1: v0: 1: 3 58金(49) <1: v0: 2: 1 46歩(47) <1: v0: 3: 1 76歩(77) <1: v0: 4: 1 96歩(97) <1: v0: 5: 1 69王(59) <1: v0: 6: 1 16歩(17) <1: v0: 7: 1 56歩(57) <1: v0: 8: 1 66歩(67) <1: v0: 9: 1 86歩(87) <1: v0: 10: 1 36歩(37) <1: v0: 11: 0 28銀(39) <1: v0: 12: 0 38銀(39) <1: v0: 13: 0 48銀(39) <1: v0: 14: 0 68銀(79) <1: v0: 15: -1 18香(19) <1: v0: 16: -1 98香(99) <1: v0: 17: -3 58王(59) <1: v0: 18: -3 48王(59) <1: v0: 19: -10 48金(49) <1: v0: 20: -10 38金(49) <1: v0: 21: -20 68金(78) <1: v0: 22: -180 28飛(24) <1: v0: 23: -180 25飛(24) <1: v0: 24: -180 26飛(24) <1: v0: 25: -185 27飛(24) <1: v0: 26: -1382 22歩(23) ←←← <1: v0: 27: -1944 22歩成(23) ←←← <1: v0: 28: -2399 84飛(24) ←←← <1: v0: 29: -4100 54飛(24) ←←← |
<1:16歩(17) val: 1 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:18香(19) val: -1 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:22歩成(23)val:-1944 LossS: 3355 LossE: 4455 GainS:-5670 GainE: 0 ← <1:22歩(23) val:-1382 LossS: 2255 LossE: 2535 GainS:-4570 GainE: 0 ← <1:25飛(24) val: -180 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:26飛(24) val: -180 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:27飛(24) val: -185 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:28飛(24) val: -180 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:14飛(24) val:-4100 LossS: 4100 LossE: 0 GainS: 0 GainE: 0 <1:34飛(24) val:-4100 LossS: 4100 LossE: 0 GainS: 0 GainE: 0 <1:44飛(24) val:-4100 LossS: 4100 LossE: 0 GainS: 0 GainE: 0 <1:54飛(24) val:-4100 LossS: 4100 LossE: 0 GainS: 0 GainE: 0 <1:64飛(24) val:-4100 LossS: 4100 LossE: 0 GainS: 0 GainE: 0 <1:74飛(24) val:-4100 LossS: 4100 LossE: 0 GainS: 0 GainE: 0 <1:84飛(24) val:-2399 LossS: 4100 LossE: -50 GainS: 0 GainE: 0 <1:36歩(37) val: 1 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:38銀(39) val: 0 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:28銀(39) val: 0 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:48銀(39) val: 0 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:46歩(47) val: 1 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:48金(49) val: -10 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:38金(49) val: -10 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:58金(49) val: 3 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:56歩(57) val: 1 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:48王(59) val: -3 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:58王(59) val: -3 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:68王(59) val: 3 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:69王(59) val: 1 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:66歩(67) val: 1 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:76歩(77) val: 1 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:68金(78) val: -20 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:68銀(79) val: 0 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:86歩(87) val: 1 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:96歩(97) val: 1 LossS: 0 LossE: 0 GainS: 0 GainE: 0 <1:98香(99) val: -1 LossS: 0 LossE: 0 GainS: 0 GainE: 0 |
<1:22歩成(23)nowEval: 186 newEval: 5322 val:-1944 LossS: 3355 n1: 0 n2: 3355 LossE: 4455 GainS:-5670 GainE: 0 <1:22歩(23) nowEval: 186 newEval: 3876 val:-1382 LossS: 2255 n1: 0 n2: 2255 LossE: 2535 GainS:-4570 GainE: 0 |
if (te[i].from!=0) {
// 駒が居た場所の脅威がなくなる
LossS-=Eval(te[i].from); ←←←←←←←←←ここがn1
}
// 新しく移動した先での脅威が加わる
LossS+=_new.Eval(te[i].to); ←←←←←←←←ここがn2 |

先手 後手 飛を取られた-2000 飛を取った -2100 歩を取られた -100 歩を取った -105 銀を取った +1050 銀を取られた+1000 --------------------------------------------- 計 -1050 計 -1205 総計 -2255 |
return max(v, EvalMin(AtackS+1,NumAtackS-1,AtackE,NumAtackE)); |
int h1=EvalMin(AtackS+1,NumAtackS-1,AtackE,NumAtackE); int h2=max(v,h1); return h2; |