Skip to content

課題: オセロの作成

timtakamura edited this page Jul 1, 2013 · 2 revisions

オセロの作成

概要

HTML/CSS/JavaScriptを利用してWebブラウザで遊べるオセロを実装してもらいます。

  • 対戦相手がいないと面白くないので、対戦相手が務まるAIを実装してもらい、一人で遊べる形態のオセロを実装してもらいます。
  • 盤面の表示、UI、AIの詳細については各自の裁量に任せます。
  • なお、この課題で重要なのは「いかにしてAIを実装するか」なので、表示やUIに凝るのは後回しにしてください。

この課題の意図

  • 関数型プログラミングを実践し、簡潔なコードを書く。
  • メモ化や遅延評価といったテクニックを学び、コードを簡潔にしたまま性能を改善する。

1. 開発の準備

  • Git リポジトリを作成してください。名前は othello-js とします。
  • GitHub にも同名のリポジトリを作成してください。
  • 以下のファイルを作成してください:
    • index.html
    • app.css
    • app.js
  • app.jsapp.css はこの段階では中身は空で構いません。
  • index.html からはCSS/JavaScriptの各ファイルを参照するようにしてください。この段階では <body> の内容は空で構いません。
  • 一通りできたらコミットし、 GitHub のリポジトリにも push してください。
    • この後は適宜コミットして GitHub のリポジトリに push してください。
    • GitHub のリポジトリに push するときは master ブランチだけでなく gh-pages ブランチにも master と同様の内容を push してください。
  • 実装にあたって必要なファイルがあれば適宜追加していってください。

2. 基礎部分の作成

  • いきなりAIを実装するのは大変なので、黒と白のどちらも人間が操作する一人二役のオセロを実装してください。
  • また、盤面が8×8のちゃんとしたオセロを作るのも大変なので、最初は盤面が4×4の最小サイズのものを実装することにします。

3. AIの仮実装

  • AIを実装してください。いきなりまともなAIを実装するのは大変なので、一先ずは「最も上の行に石を置ける手を選ぶ」「同一行に複数の手が存在する場合は最も左の列に置ける手を選ぶ」だけの簡単なものとします。
  • ゲームは人間が先手を、AIが後手を指すものとします。

4. 本格的なAIの実装

  • 先程の仮のAIをまともなAIに置き換えます。条件としては以下の通りです:
    • 最大で4手先まで読み、最終的に最も「優勢」な盤面に辿り着く手を選びます。
      • AIの手番を読むときはAIにとって最も「優勢」な盤面になる手を選びます。
      • 人間の手番を読むときは人間にとって最も「優勢」な盤面になる手を選びます。
    • 「優勢」の度合いをどう測るかは各自の裁量に任せます。
    • 同じ盤面に対して指す手は常に同じです。

5. 盤面の拡大

  • 盤面のサイズを6×6に拡大してください。拡大に伴って処理すべきデータ数が増大するのでパフォーマンスが落ちます。快適に遊べるよう、適宜パフォーマンスを改善してください。
  • 6×6でも快適に遊べるようになったなら、盤面のサイズを8×8に拡大してください。