コンピュータ囲碁プログラム 囲碁のルール

前回の記事 : 「コンピュータ囲碁プログラム 盤上を走査しよう」 http://qiita.com/muzudho1/items/b5fbe7f9a6dd9fb1b989

# 今回の記事
Qiitaで囲碁のルールなんか解説したら 怒られたりするんだろうか。やってみよう。

# 将棋との違い
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703021642a19.png?raw=true)
囲碁は　終局間近に　何をやっているのか。　将棋から入ってくると　それが分からない。

将棋の　形作り　ともまた違う。

## 将棋の形作り
１手差でした、ということが分かる詰みの形まで　１０手とか２０手とか前の局面から長手数で持っていき　投了図　を作る作業。棋譜を残すのが職業というところもあるプロがやるもので、アマチュア初級者は別に **やらなくていい**、というか**まず、１手差で負けの接戦までもってけないし、一手差で負けの接戦なら形作りとかやるわけない。まだ勝てると思っている**。

アマチュアなら　ソフトで対戦しているときは　腹いせにタダ捨て王手連打したり　最後に香車１枚でも取ってから詰められるといった **勝敗からすると無駄なことをやったり**すると思うが、道場に行くと　対面のプレッシャーの空気でふざけてられずに　３手詰めぐらいになるまで指してから　投了するだろう。

## 囲碁のダメ詰めと自陣の手入れ
自分の陣地と思っていても、オセロみたいに、黒の地と思ったら　白の地に　ひっくり返ってしまう場面がある。
あとで文句を言う前に　対局停止するまえに　はっきりさせておこう、というもの。

### ダメ詰め
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703021642a20b1.png?raw=true)
白か黒か、どっちのものか分からない空き地、これを **ダメ**(駄目) というが、ダメに石を置いて、盤上のダメを埋める（無くす）こと。**日本ルールだとダメに石を置いても点数にならず１手損するだけ** なので、対局も半ばに好き好んで　ダメに石をおくやつはいない。

なぜダメを詰めるのかを説明する前に、自陣の手入れを説明する。

### 自陣の手入れ
わたしは囲碁のルール覚えたての初心者なのだから　問題作成のような高度なことは　やらせないでほしい。
だが説明しないことには始まらない。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703021642a20b3.png?raw=true)
これが苦し紛れに作成した、合ってるかどうかもわからない図だ。

黒手番だとして、一見すると、
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703021642a20b4.png?raw=true)
いくつかパターンが変わるが、ここらへんに黒３目（もく）ができて、白２目で　コミが０だとすれば　黒の１目勝ちの場面だ、多分。まだ囲碁のルールの説明をしていないので　なんのことだか分からない図だが……。

ここで、
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703021642a20b5.png?raw=true)
黒は　この青線で囲んだあたりに　黒の陣地が３つぐらいできるかな、と　ほくほく顔になっているわけだ。というか黒勝ってるなこれ。

で、日本ルールでは　石で囲っている　空き地　を数えるから、黒は……。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703021642a20b6.png?raw=true)
こんなところに　黒石を置いたら、自分の陣地を　減らしてしまうことになる。つまり１点減点だ。

だから、ダメを埋めるのは１手損なだけで点数は減らないが、自分の陣地を埋めるのは１点（１目）減ってしまう。
**自分の陣地を埋めるぐらいだったら、ダメを埋めるよね**、ということなんだが、この青い印を付けたところをほっておくと　白石を打ち込まれて黒石２個取られてしまう。（取られるとややこしくなる）

そこで自分の陣地に　石を置く。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703021642a20b7.png?raw=true)
自分の陣地を１個自分で減らしてしまったのだから　１目損だ。でも　そうやって自分の陣地を減らしてでも勝ちを固めるのを **手入れ** という。

勝ってると思っても　考え間違いで　勝ち負けが　ひっくり返るかもしれないから、勝敗の判定に入る前に、**ダメは埋めておくなり、手入れはやっておくなり　しておきましょう、**ということだ。

じゃあ仮に　ダメ詰め、手入れ　がもう少し進んだものとする。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703021642a20b8.png?raw=true)
ここで、白はもう打ち込める場所が無いので、パスをする。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703021642a20b9.png?raw=true)
じゃあ最後に　黒が打ち込んで白石を取り上げ、白は打ち込める場所がないのでパス、黒も打ち込みたい場所が無いので　パスをする。

両者が連続でパスすると **対局停止** になるので、地計算に進むことになる。

もし途中で　黒番も白番も　勝負は終わっていると思って　両者がパスをすると、地計算のときに　読みが合っていればいいが、もしかすると　良い手を見逃していて、対局停止をしたあとで　ひっくり返るかもしれない。ここで納得できなかった場合は　対局を再開できる。

そういうことを防ぐために、対局停止前に　損する手も　対局中に済ませておこうという作業を、最後の方でやっている。

# ひとまず説明中断。

次は　地計算について　この記事に書き足していきたい。
コンピュータ囲碁ソフトの技術を説明するための　前振りとして必要だ。

## なんだ、Git Hub がアクセスバイオレーションとか言うエラーを吐きだしたぜ？
Windowsの検索で「不要」と入れて　ドライブの不要なファイルを除去して　ＰＣを再起動したら直った。

# 中国ルールと日本ルール
大雑把な視点から　説明してみよう。

## 何がクリティカルなのか
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703031500a21.png?raw=true)

### 中国ルール
中国ルールだと、「どっちが勝ったのか分かりません」なんていうことがあったら困るので「何を於いてもまず勝ち負けが分かる」ようにできている。その方法が「石を置けなくなるまで置く」こと。日本ルールでも同じなんだが、**半目でも勝ってれば勝ち** ということにたいしてクリティカルだ。

### 日本ルール
「大きく囲ってがっぽりうはうは」というゲームを楽しんだんだから、その勝ち負けの計算をするのに「囲んでいるところを埋めていくただの作業をして計算しよう」では　勝ち負けを競ったゲームのあとに　なんで作業しなければならないのか、とゲームとして面白くない。プレイ後に　すっきりしない。「がっぽりうはうは」な気分のまま計算して　すかっとしたまま終わりたい。

そこで

- （１）第三者から見ても、盤面だけ見て計算がはっきりしているところ
- （２）もうちょっと石を置かないと計算がはっきりしていないところ

に分け、（２）の部分は **対局している両者が権利を主張しつつ納得する見積もり** をして勝敗に納得して終わる。

だから　そもそも　そんな主張とか計算ができる強い人同士が遊ぶのが日本ルール。
**勝敗を判定するのに、計算力が要る。**

**勝ってるか負けてるかを判定するのに、計算力が要るなんておかしいんじゃないか？** とか言う、玉を取られて終わりの将棋勢も納得する説明をしよう。

# 日本ルールの極端な理屈
人間でも　１０数手の序盤で　これが悪手だった、とか言う人もいるんだが、それをもっと極端にすると、
もし囲碁が　（仮に）後手必勝　のゲームだとすると、こうなる。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703031500a23.png?raw=true)

後手必勝なんだから、初手投了だろう。**で、このあとの計算は、** 両者納得してるんだから　するまでもないだろう。**中国ルール**ならもちろん、ここから１つも間違えずに完璧な手順で後手必勝まで持っていって、後手必勝ですね、ということを　負けた先手が納得するまで　盤上でやればいいわけだ。

ところで例えに出しておいて何だが、 **５路盤は　先手必勝** だったんじゃないだろうか。囲碁は６路盤以上でやろう。

# じゃあ、将棋で 長手数の詰みが読めて投了するのと何が違うのか？
だって、
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703031500a24b2.png?raw=true)
囲碁って**近似計算**なんだもーん。

## 近似計算とは
小さくて無視できるものは無視すること。正確さではなく、速くて手軽で必要な精度で正確という、実用を目指す。

小さくて無視できるところは無視して、大きくて無視できないところは主張して、両者が納得すれば計算成立。

**じゃあ逆に　将棋はキリのいい計算と言える。** えっ、じゃあ将棋は有理数か何かで、囲碁は実数か何かなのだろうか？　まあそれはあとで考えよう。

で、強い人はその **精度** が高いのだろう。

じゃあ、
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703031500a25.png?raw=true)
こういうことなのか？

どういうことかは分からないが　なんとなく気分的にそんな気もする。
中国ルールは　**ちゃかちゃかちゃか　チン！**　になっている。

また時間があれば　具体的なルールに進めたい。