GAS

【コピペで作れる】GASで動くスプレッドシートオセロの作り方

【コピペで作れる】GASで動くスプレッドシートオセロの作り方GAS
スポンサーリンク

記事を書いてて気づいたんですが、なんかバグあります。

置けないパターンがあります。パターンが不明です。

バグも楽しんでプレイしてください(近いうちに修正します。)

くら
くら

さっそく作ったGASによるスプレッドシートオセロを見てもらいましょう!

さっそく作り方を紹介します!

シートとコードだけほしい人はこちらからどうぞ!

スポンサーリンク

シートの用意

Googleアカウントにログインしてる状態で上記シートにアクセスします。

ファイル → コピー作成 と順に押します。
ファイル → コピーを作成 と順に押します。

ファイル → コピーを作成 と順に押します。

好きなところにコピーを保存してください。
好きなところにコピーを保存してください。

好きなところにコピーを保存してください。

ファイル名とかシート名変えても問題ありません。
ファイル名とかシート名変えても問題ありません。

ファイル名とかシート名変えても問題ありません。

スポンサーリンク

スクリプトの実行権限を許可する

初回のみスクリプトの実行を許可する必要があります。続行 を押します。
初回のみスクリプトの実行を許可する必要があります。続行 を押します。

初回のみスクリプトの実行を許可する必要があります。

対戦開始ボタンを押したあとに、続行 を押します。

アカウントを選択します。
アカウントを選択します。

アカウントを選択します。

詳細リンクを押します。
詳細リンクを押します。

詳細リンクを押します。

オセロ(安全ではないページ)に移動リンクを押します。
オセロ(安全ではないページ)に移動リンクを押します。

オセロ(安全ではないページ)に移動リンクを押します。

許可を押します。
許可を押します。

許可を押します。

このメッセージボックスが表示されたら完了です。
このメッセージボックスが表示されたら完了です。

もう一度対戦開始ボタンを押し、このメッセージボックスが表示されたら完了です。

これで遊ぶ準備はできました!

スポンサーリンク

オセロで遊ぶ

先攻は黒固定です。
先攻は黒固定です。

先攻は黒固定です。

石の置き方

コピーして貼り付ける
コピーして貼り付ける

石の置き方はコピペです。コピーして置きたいところに貼り付けます。

メッセージ内にどちらの順番か示されます。
メッセージ内にどちらかの順番か示されます。

石は自動でひっくり返され、メッセージ内にどちらかの順番か示されます。

パスする

置けない場合はパスすることで相手の番にターンが移ります。
置けない場合はパスすることで相手の番にターンが移ります。

置けない場合はパスすることで相手の番にターンが移ります。

勝敗

すべての石の合計が64になると、石の多いほうが勝ちとなります。

エラーになるパターン

順番が違ったり、置けない場所に置いたりするとエラーになります。

また、置かれた石は削除されます。

スポンサーリンク

相手の石をひっくり返すまでの処理の流れ

盤面に石が置かれた時の処理の説明です。

誰のターンか取得

GASのスクリプトプロパティ上にターンを管理しており、そのデータを取得しています。

石が置かれた場所を取得

GASのイベントオブジェクトから、セルの行・列の位置を取得しています。

石が置かれても良い場所か判別

playable という関数で置いても良い場所か判断しています。

関数内の処理の流れを説明します。

石が置かれていないか判別

filed は盤面のデータを2次元配列で管理しています。

盤面のデータ管理
  • C まだ置かれていない
  • B 黒
  • W 白
  • Z 壁

置かれた場所が C (まだ置かれていない) 状態の時のみ、次の処理に移ります。

置かれた場所から8方向をチェック

置かれた場所から 8方向の状態をチェックします。

置かれた場所が壁、自分の石、空白の場合は、次の処理には移りません。

オセロを作りながらマクロVBAを学ぼう№3 参考:エクセルの神髄 | Copyright© 2010 鵜原パソコンソフト研究所
オセロを作りながらマクロVBAを学ぼう№3
参考:エクセルの神髄 | Copyright© 2010 鵜原パソコンソフト研究所

8方向の隣に相手の石がある場合

隣に相手の石がある間は、その延長線上の位置をチェックします。

相手の石を挟んで自分の石がある場合

延長線上に自分の石がある場合は、石が置けたと判定します。

相手の石をひっくり返す

changeStone という関数で石をひっくり返します。

関数内の処理はこんな感じです。

石をひっくり返す処理

渡された位置のセルにIMAGE関数を使って石の画像を入れています。

参考情報

スポンサーリンク

まとめ

くら
くら

バグの原因が分かった方いたらコメントください。

オセロ深い。

コメント

タイトルとURLをコピーしました