hermemo-エルメモ-

情報の神の備忘録

OpenGLで自己学習型オセロAI  §3「石の設置」

time 2017/01/30

OpenGLで自己学習型オセロAI  §3「石の設置」

sponsored link

目標

マウスを用いてクリックで石を配置します。今回は石を配置するだけで、石を反転させたり、置ける場所を制限したりはしません。

ソースコード

実行結果

盤面上をクリックすればその場所にターンの色の石を配置します。ターンは一個石を置くごとに自動で変更されます。また、石がすでにある場所には置けません。次回以降で置ける場所の制限と反転等を導入します。

解説

ターン[22],[41]

[22]int turn=BLACK;
[41]turn = BLACK;
ターンの情報を保存する変数を定義します。また、リセット関数内でターンを黒に戻します。

マウスによる石の配置[91]-[119]

[91]-[119] void mouse(int button, int state, int x, int y){}
[144]で設定することでマウスに変更があった時に呼び出されます。押されたボタンや座標が引数として渡されます。

[94]-[118] if(button == GLUT_LEFT_BUTTON && state == GLUT_UP){}
マウスの左クリックがされていてかつ、クリックが終了した時に実行する。こうすることで間違ってクリックしかけてもドラッグして修正することができる。

[95]-[117] if(80 < x && x < 720 && 80 < y && y < 720){}
効率化のために盤面上の座標の時のみ実行する。

[98]-[101]
ウィンドウの座標から盤面の座標に変換する。

[103]-[116] if(boardmap[x][y] == NOTSTONE){}
盤面の座標の位置に石がない場合のみ石を設置する。

[105] boardmap[x][y] = turn;
盤面上に石を設置します。

[108]-[114]
ターンの反転。ターンが黒の場合は白に、白の場合は黒に変更する。

[110],[113],[115]
ログ。これはコマンドライン上のログなので、記述しなくてもゲームとしては成立する。

基本処理関数[124]

[124]-[126] void basicProcess(){}
[146]で設定することで、処理することがない暇な時に実行されます。

[125] display();
描画関数を呼び出します。暇になったタイミングで更新します。

メイン関数

[144]glutMouseFunc(mouse);
マウスの状態に変更があった時に呼び出される関数を設定します。
マウスが押されても、そこから離されても呼び出されます。どのボタンに関する情報か、そのボタンがどうなっているか、どこにあるのかが引数として渡されます。

[146]glutIdleFunc(basicProcess);
暇な時間に呼び出される関数を設定します。今回は描画の更新を行います。

次回予告

次回は石を置ける場所を制限します。一つ以上ひっくり返らなければそこへは置けなくします。

最後に

OpenGLやGLUTを学びつつ布教するために記事を作成しています。
何かわからないことやご指摘がございましたら気軽にコメントをお願いします。

sponsored link

down

コメントする




*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)



sponsored link