blog.hekt.org

オセロ(5)

ver 0.5

関数の入れ子が酷いので改善してみました。あとは無駄に冗長だった記述を直したりなど。リストの件(S.append(x), S.append(y)からS.append([x, y]に)はリストの入れ子が複雑になって読みにくくなったのでやめました。

今までは、座標を要求する関数の中から石をひっくりかえす関数を呼び出して、その中からターンを交代する関数を呼び出して、その中からCPU処理の関数を呼び出して……、というように延々と入れ子になっていたので、ある程度ゲームが進んでからスクリプトにエラーが発生すると、「~の中の~の中の~の中の~の中の~の中の~の中の~の中の~の中の~の中の~の中の何行目がおかしいですよ」というようなエラー文が表示されました。

そうじゃなくても延々と消化不良な関数を続けるのもなんかあまりよくない気したので、whileループを使ってプログラムを回すことにしました。関数が完全に最後まで実行されてから状況を判断して次に動作する関数を呼び出す、という感じ。たぶんこっちが普通なんじゃないですかね。なんとなく。

今回のバージョンでは、ターンとかパスのカウントの値がおかしくなって無限ループに陥りそうになった時のためにelse:sys.exit()としてプログラムを強制終了させてますが、普通にbreakでループを抜けた方がいいのかしら。最後の処理なので実際の動作は同じなのですが。