この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; |