HTML・CSS・JavaScriptだけで作れる本格オセロ(リバーシ)AIの作り方をやさしく解説する記事のアイキャッチイメージ。配列操作・AIロジック・評価関数の仕組みまで初心者でも理解できる実践チュートリアルです。

開発ガイド

【コピペで完成】オセロ(リバーシ)AI対戦の作り方|HTMLとJavaScriptで実装する思考型ゲーム入門

「オセロ(リバーシ)のAI対戦ゲームを自分で作ってみたい!」
でも、プログラミングって難しそう…と思っていませんか?

実は、HTML・CSS・JavaScriptの3つだけで、
ブラウザで動く本格的なAI対戦オセロを作ることができます。

しかも今回紹介する方法なら、
ソースコードをコピペするだけですぐに完成!
複雑な環境構築も不要で、ブラウザでそのまま実行できます。

この記事では、まず動くオセロ(リバーシ)を完成させてから
「どうして動くのか?」という仕組みを一つずつ解説していきます。

オセロ(リバーシ)の基本仕様を理解しよう

まずは、今回作るオセロ(リバーシ)がどんな仕組みで動いているのかをざっくり見ていきましょう。
全体像を先に理解しておくことで、後のコード解説がぐっとわかりやすくなります。

完成版を体験してみよう

ゲームの基本ルール

オセロ(リバーシ)は、黒と白の石を交互に置いていくボードゲームです。
相手の石を自分の石ではさむと、その間の石がすべて自分の色に裏返ります。
最終的に石の数が多い方が勝ちです。

ゲームの主な機能

今回のプログラムには、次のような機能が含まれています。

  1. 盤面の自動生成:HTMLとCSSで8×8のマスを作成。
  2. 合法手の判定:「石を置ける場所」を計算。
  3. 石の反転処理:相手の石をはさんだとき、自動で裏返す。
  4. AI対戦機能:コンピューターが次の一手を選んで自動でプレイ。
  5. 難易度選択:簡単/普通/難しいの3段階に対応。
  6. レスポンシブデザイン:スマホでも快適にプレイ可能。

ファイルを準備して完成コードを動かそう

それでは、いよいよ実際にオセロ(リバーシ)のAI対戦ゲームを動かしてみましょう。
この章では、ファイルを作ってコードを貼り付け、ブラウザで実行するところまでを一気に行います。

ステップ1:ファイルを作成しよう

まずは、あなたのパソコンでHTMLファイルを作りましょう。
メモ帳・VSCodeなど、どんなエディタでもOKです。

  1. 新しいファイルを作成
  2. ファイル名を reversi.html にして保存

ステップ2:コードをコピペしよう

コードはHTML・CSS・JavaScriptが一体化した単一ファイル構成になっています。
下の「完成コード」をすべてコピーして、reversi.html に貼り付け、上書き保存します。

ステップ3:ブラウザで開いてみよう

保存した reversi.html ファイルをダブルクリックすると、
お使いのブラウザで自動的に開きます。

もし自動で開かない場合は、
ブラウザのメニューから「ファイル → 開く」を選んで、
ファイルを指定して開いてください。

ステップ4:実際に動かしてみよう

起動すると、次のような流れでプレイできます。

  1. 「黒(先手)」または「白(後手)」を選ぶ
  2. 難易度(簡単/普通/難しい)を選択
  3. 「開始」ボタンを押してゲームスタート!

AIが自動で思考し、盤面に石を置いてきます。
すぐにあなた vs コンピューターの頭脳バトルが始まります!

HTML構造を理解しよう(ゲームの骨組み)

オセロ(リバーシ)の土台を支えるのが、HTML(エイチ・ティー・エム・エル)です。
HTMLは、いわばゲーム画面の「設計図」。
ボード(盤面)やスコア表示、操作ボタンなど、プレイヤーが見るすべての要素を配置しています。

HTML全体の役割

HTMLファイルには大きく3つの役割があります。

  1. 見出し(タイトル)を表示する部分
  2. 盤面や情報を配置する部分
  3. ゲーム操作(ボタンなど)を置く部分

ブラウザがこのHTMLを読み取り、CSSとJavaScriptの力で見た目と動きを付け加えます。

各要素の説明

要素役割
<div class="wrap">ゲーム全体を中央にまとめる外枠。レイアウトの中心軸。
<h1>ゲームタイトル(画面上部に表示される大見出し)。
<div id="message">「あなたの番です」「AIの番です」などのメッセージを表示。
<div id="status">黒石・白石のスコアをリアルタイム表示。
<select id="level">難易度選択のプルダウンメニュー。
<div id="board">8×8の盤面が生成される領域。JavaScriptがここにマスを作る。

JavaScriptで動きをつけるためには、
それぞれの要素にID属性を付けておくことが大事なんです。
これで、JSから『この部分を操作したい!』と指定できるようになります。

ほーく
ほーく

CSSでデザインとレスポンシブ対応を作る

オセロ(リバーシ)の見た目を整えているのが CSS(カスケーディング・スタイル・シート) です。
CSSは、ゲームに「色」「形」「配置」といったデザイン要素を与え、
さらにスマートフォンでも快適に遊べるレスポンシブデザインを実現します。

CSSの主な役割

  1. 盤面(ボード)をきれいに並べる
  2. 石(黒・白)を円形に表示する
  3. メッセージやボタンを整える
  4. スマホでも操作しやすいレイアウトに調整する

ボードレイアウトを整える

盤面は、CSSの強力な機能 Gridレイアウト を使って作られています。

grid-template-columns:8列のマスを等間隔で配置する命令。

マスと石のデザイン

各マス(.cell)は緑系の背景で、クリック可能なエリアです。
中には .stone クラスの要素が入っており、黒石・白石をCSSで描画しています。

プレイ補助の演出

プレイヤーが置ける位置(合法手)には .hint が付き、中央に白ドットが表示されます。
また、直前に置かれたマスには .last-move の破線枠がつきます。

スマホ対応(@mediaクエリ)

このソースでは、2段階のレスポンシブ設計を導入しています。

  • 画面が狭くなるにつれて、盤面の幅と石のサイズを自動調整。
  • clamp() でタイトル文字を画面幅に応じて縮小。

JavaScriptでオセロ(リバーシ)AI対戦を作る仕組み

ここからは、このゲームの頭脳である JavaScript(ジャバスクリプト) の役割を見ていきましょう。
今回のソースは、HTML・CSSと同じファイル内に記述されており、
「盤面の制御」「プレイヤーとAIのターン処理」「思考ロジック」 までをすべて担っています。

1. ゲームの基本となるデータ

まず、JavaScriptの中では次のように数字で石を管理しています。

  • EMPTY(空きマス)= 0
  • BLACK(黒石)= 1
  • WHITE(白石)= 2

このように数値で管理すると、プログラムで比較や判定がしやすくなります。

2. 盤面を作るしくみ

盤面は「8×8マスの表(2次元配列)」で作ります。
1行に8マス、これを8行分用意する形です。

最初に中央にだけ石を置いてスタートします。
このときの並びはオセロの基本形です。

そして、この「配列に入っている数字の状態」を
renderBoard() という関数で実際の画面(HTML)に表示します。

3. 石を置いたときの動き

  1. クリックしたマスに石を置けるか調べる
  2. 置けるなら、その方向にある相手の石を「はさみ返す」

はさみ返せるかを調べるのが getFlippableStones() という関数です。

getFlippableStones(y, x, player)

この関数がオセロのルール処理の核心です。

  1. 指定されたマス (y, x) が空きマスであるかチェック。
  2. DIRECTIONS(8方向)を順にループします。
  3. 各方向に対し、隣接するマスから順に、相手の駒が連続しているかチェックします。
  4. 連続した相手の駒の先に、自分の駒が見つかった場合、その間に挟まれた全ての相手の駒の座標を返します。
  5. 合法手でない(ひっくり返せる駒がない)場合は空の配列を返します。

4. コンピューターの考え方(AI)

AIのターンになると、次のような手順で打つ場所を決めます。

  1. 盤面をすべてチェックして「置ける場所」を探す
  2. その中から「一番良い場所」を選ぶ

この“良い場所”を見つけるために、AIは盤面をスコア化して考えます。
これを「評価関数」といいます。

5. 評価関数(どのマスが有利かを点数化)

AIは「角が強い」「端はまあまあ」「中央は普通」というルールで重みをつけています。

盤面には、オセロのセオリーに基づいた重みが設定されています。

  • 角マス: 非常に高い正の値(例: 120)を設定し、最優先します。
  • 角隣のマス(Xマス、Cマス): 非常に高い負の値(例: -25, -40)を設定し、避けます。

6. 難易度の違いは「考える深さ」

難易度は、AIが「どこまで先を読むか」で変わります。

  • 簡単:ランダムで置く(すぐ終わる)
  • 普通:重み表で判断(1手先を見る)
  • 難しい:1手先+相手の返しを少し読む

つまり、思考の深さを変えることで強さを調整しています。

さらに発展させるアイデア

今回のオセロ(リバーシ)AI対戦をベースに、いろいろな改良を試すことができます。

発展テーマ内容難易度
アニメーション追加石が回転して裏返る演出を追加★☆☆
AIの強化先読みの深さや評価関数を改良★★☆

盤面アニメーションの追加

見た目の面白さを出したい場合は、
石がひっくり返るときにアニメーションをつけることもできます。

CSSだけでOKです。

AIカスタマイズ 「評価表(重みマップ)」を変える

前の章で紹介した「WEIGHTS(重み表)」は、AIの価値観を決める重要な部分です。

この値を少し変えるだけで、AIの“打ち方”がまったく変わります。
たとえば:

改造例AIの性格変更ポイント
初心者用角を軽視、中央を好む角(120)を50に下げる、中央(3)を10に上げる
強化版角を最優先、辺の隣を嫌う角を150に上げ、-40(角隣)を-60にする
守り型AI辺を重視して角を避ける辺(5)を10に上げ、角(120)を80にする

AIの強さは“正確さ”だけでなく“性格”でも感じ方が変わります。
人間のプレイスタイルのように、あなた好みに調整してみましょう。

ほーく
ほーく

AIカスタマイズ “合法手の少なさ”を評価に加える

強いAIは単純に“石の数”や“位置の強さ”だけでなく、
次のターンで相手の選択肢を減らす」ことも考えます。

たとえば、AIがある場所に打ったあと、
相手が打てる場所が3つしかなくなるなら、それは“良い手”です。
逆に、相手が10手も選べるようになるなら“悪い手”です。

この考え方を可動性(mobility)と呼びます。

score += (8 - oppMob) * 2; の部分で、評価の強さを調整できます。

  • 8:定数。オセロの盤面サイズは 8×8 なので、これは評価の基準点として使用されています。
  • oppMob:相手に残された合法手の数。
  • 2評価係数(ウェイト)。この値を大きくするほど、「合法手の少なさ」(相手の可動性制限)が他の評価項目(位置の重み、フリップ枚数など)よりも優先されます。

例えば、合法手の少なさを最優先するAIにしたい場合は、この係数2510といった大きな値に設定し直します。

おすすめの学習リソース|もっとスキルを伸ばしたいあなたへ

オセロ(リバーシ)」を完成させたことで、あなたはすでに HTML・CSS・JavaScriptの基礎 に触れました。
ここからさらにステップアップするために役立つ学習リソースを紹介します。

おすすめ書籍

『ゲームで学ぶJavaScript入門 増補改訂版 ~ブラウザゲームづくりでHTML&CSSも身につく!』

  • ゲームを作りながら学べるので、退屈せずにJavaScriptの基礎が身につく
  • HTML・CSS・JavaScriptの基本を一冊で網羅、Web制作の土台が自然に理解できる
  • 13本のサンプルゲームを実際に動かせるから「作れる喜び」が味わえる
  • 初心者・中高生にもやさしい解説で、初めてのゲームプログラミングに最適

『スラスラわかるHTML&CSSのきほん』(SBクリエイティブ)

  • Web制作初心者に最適な入門書。HTMLとCSSの仕組みをやさしく解説。
  • これからWebページを作ってみたい方にぴったり。
  • レイアウトの基本やスタイルの調整方法など、実践的に学べます。
SBクリエイティブ/狩野祐東

オンライン講座編

Udemy|世界最大級のオンライン学習プラットフォーム

世界中で利用されるオンライン学習サイト。
HTML、CSS、JavaScriptの入門から応用まで、高評価の講座が数百種類揃っています。
初心者でも動画を見ながら手を動かせるので、挫折しにくいのが魅力です。

まとめ

今回の記事では、
HTML・CSS・JavaScriptの基本を使って、本格的なオセロ(リバーシ)AI対戦ゲームを作ることができました。

AIが「石を裏返す」「有利な位置を選ぶ」という仕組みを理解すれば、
プログラミングの考え方も自然と身につきます。

少しずつ改良したり、難易度を変えたりすることで、
あなただけのオリジナルオセロを作ることもできます。

ゲーム開発の第一歩として、ぜひ楽しみながら学んでみてください。

関連記事

【実際に遊べる オセロ(リバーシ)AI対戦 はこちら。AIと対戦してみましょう!】▼

オセロ(リバーシ)AI対戦ゲームを作れたあなたは、
他のゲームも作れる実力があります。
次のような作品にも挑戦してみましょう。

【作り方記事】まるばつゲーム(三目並べ)の作り方|AI対戦ロジックを学ぼう!

【作り方記事】スライドパズル(15パズル)の作り方|配列操作とアルゴリズムを学ぼう!▼

-開発ガイド
-, , , , ,