2012年3月28日水曜日

将棋のゲームについて。 10年前くらいに携帯で森田将棋という将棋のゲームをやっ...

将棋のゲームについて。

10年前くらいに携帯で森田将棋という将棋のゲームをやっていたら、一度だけ妙なことが起きました。


携帯ということもあり、コンピューターは弱かったので、中級でもほとんど勝てていたのですが、ある時一度、詰め将棋のように王手王手で自分の王様が寄せられていき、あとひとつ、前に進める駒を打てば詰まされる場面に至りました。

相手が持っていた駒は歩だったので、打てば打ち歩詰めだと思い、安心していたら、歩を打たれ「打ち歩詰め。反則負け。あなたの勝ち」と出ました。

これから攻めようと思っていたのに、勝手に自滅され、あっけない幕切れだったのを覚えていますが、みなさんはコンピュータに打ち歩詰めされたことはありますか?

反則と分かっていて、コンピューターがそんなことやってくるものなんですか?たった一度だけしか打ち歩詰めになるケースがなく、どういうものなのか分かりません。経験者の方、教えてください。


|||



私は打ち歩詰めされたことはありませんが、所詮作っているのは人間なわけで、そういう事もあるでしょう。

考えられるのは、

①打ち歩詰め判定だけが実装されていて、打ち歩詰め回避が実装されていない。

②ホワイトボックステストの漏れ。

のどちらかですかね。



①については、携帯なので容量の問題があったのかも知れませんし、開発スケジュールが厳しかったのかもしれません。判定さえあればゲームとしては成り立っているわけですから、バグではないですし(ソフト開発者がよく使う「そういう仕様」ってやつです)。

②は、ロジックのチェックが甘かったってやつです。ある条件下では打ち歩詰め回避が上手く機能しないバグといった感じです。質問者様のケースは、手順によっては普通の詰みも打ち歩詰めも両方ある状態だった気がします。つまり、詰みがあることが確定(これが上記の「ある条件下」)したあとの処理で、打ち歩詰めの回避漏れ(前にすすめる駒ならどっちを先に指してもよいと判断してしまった)があったんじゃないかなぁと。まあ憶測ですけどね。また、レアケースであればあるほどテストで発生させることが難しい(質問者様は、コンピューターをいろいろな条件の打ち歩詰めに誘導させることができますか?私はできませんw)ので、もしかしたらブラックボックステスト(上記「いろいろな条件下」は考えないテスト)だけで済ませたのかもしれません。プログラム自体が落ちなかっただけ良かった気がします。

0 件のコメント:

コメントを投稿