見出し画像

数日後にゲーム作るタニ なのかめ 〜突然ですが、完成編〜

突然ですが、この記事を細かく書く意味がよくわからなくなってきたので、対人対戦が可能となったところまで、完成とします。正直、早く次に行きたい。

作ったコードの行数は約410行、作った関数の数は22個(main関数含む)です。もっと細かく処理を分けてもいいかなとも思いました。今回は、その関数をざっくり紹介する回にします。

1. big関数、little関数。英語ができない人のネーミングセンス。オセロをひっくり返す時に、例えばスタート地点とゴール地点のx座標とかy座標どちらが大きいかによって、for文を何度も書くのがナンセンスと感じて、2つの座標の大小を比べるために作った。

2. set_board関数。ボードをセッティングする。最初の4個を置くだけ。

3. count_white関数、count_black関数。白の数と黒の数を数えてその数を返す。勝敗判定用。

4. display_board関数。盤面を表示する。2次元リストの中の値に応じて、●と○とか、置かれてない場所に◽︎を出力する。

5. reverse_Othello関数。挟まれたオセロをひっくり返す関数。置いた座標と挟む反対側の座標を受け取ってその間のリストを変えちゃう。6.の関数たちから呼び出される。

6. judge_North, judge_South, judge_East, judge_West, judge_North_West, judge_North_East, judge_South_East, judge_South_West関数。いっぱい作った。各方角に挟めるかどうかを判定する。挟めたら0、挟めなかったら1を返す。

7. judge_place関数。まず、枠内にないか、そこにすでに置かれてないかを調べて、そのあとは6.の関数たちに依頼する。

8. play_turn関数。どこに置く?って聞いて、置けるかどうかの判定を7.にお願いする。無理だったら置けないよ!っていう。置けたら、置く。

9. judge_possibility関数。置ける場所があるかどうかを判定する。盤面全体を調べる。for文で7.を各マスについて繰り返す。

10.judge_winner関数。3.から白と黒の数を聞いてどっちが勝ったか判定する。判定するだけ。

11.display_winner関数。judge_winner関数の結果をもとにどっちが勝ったか、引き分けたかを教えてくれる。いうだけ。

12. finish関数。急に雑ネーミング。全部埋まってるかどうかを判定する。全部埋まってたら終わりであることを1を返すことによって伝える。

13. main関数。全ての始まり。中にはwhile(true)、無限ループが仕込まれていて、そこでplay_turnとか、display_boardなんかが呼び出される。

judge_place関数がjudge_(方角)関数を呼び出して、judge_(方角)関数で挟めることがわかったら、reverse_Othello関数でひっくり返していたので、実は自分が置く前にひっくり返す処理が行われています。

これで一つ困ったことがかつて発生しました。judge_possibility関数はjudge_place関数を何度も呼び出して使うのですが、ひっくり返せるかどうかを調べるとついでにひっくり返してしまうのです。あわわ。

そこで、judge_placeの引数をひとつ増やして、judge_possibilityでjudge_placeを呼び出すときと、play_turnでjudge_placeを呼び出すときとで異なる引数を与えて、reverse_Othelloを実行するかどうかを分けました。なんとかなった。

もう完全に自分のメモノートと化してますが、まあ問題ない。

次回は、コンピュータ対戦モード作成に備えて、この長くなりすぎたソースを分解していきます。

いいなと思ったら応援しよう!