リバーシ


プログラムの 中身 ( なかみ ) を 詳 ( くわ ) しくみてみよう

黒と白を 交互 ( こうご ) に 置 ( お ) いていくリバーシを作りましょう。
このプログラムでは 実際 ( じっさい ) の 盤面 ( ばんめん ) の 周 ( まわ ) りに1マス 増 ( ふ ) やした 仮想 ( かそう ) の 盤面 ( ばんめん ) を使います。
一般的 ( いっぱんてき ) なリバーシの 盤面 ( ばんめん ) は8×8マスであり、 このとき 仮想 ( かそう ) の 盤面 ( ばんめん ) は10×10マスになります。
1つのマスを表すスプライト(マス)をつくり、 実際 ( じっさい ) の 盤面 ( ばんめん ) のマスの数(8×8=64)だけクローンを 並 ( なら ) べて 実現 ( じつげん ) します。

概要 ( がいよう )

大まかな 内容 ( ないよう )


  • をクリックして開始します。
    開始時には 盤面 ( ばんめん ) の中央の4つのマスに黒、白の石が2つずつ 置 ( お ) かれます。
    黒、白の 順 ( じゅん ) に 交互 ( こうご ) にマスに石を 置 ( お ) いていきます。 ただし、すでに 置 ( お ) いている自分の石とこれから 置 ( お ) く自分の石で 相手の石を 挟 ( はさ ) むことができるマスにしか石を 置 ( お ) くことはできません。
    縦 ( たて ) 、横、 斜 ( なな ) めの8方向のどれか1つの方向で相手の石を 挟 ( はさ ) むことができれば石を 置 ( お ) くことができます。
    置 ( お ) いた石とすでに 置 ( お ) いてある自分の石で 挟 ( はさ ) んでいる相手の石が 裏 ( うら ) 返って自分の石になります。
    例 ( たと ) えばゲーム開始時であれば黒が 置 ( お ) けるのは次の図の1~4のいずれかのマスだけです (この 外側 ( そとがわ ) のマスもすべて 置 ( お ) けません)。

  • 1もしくは2に黒の石を 置 ( お ) いたら左上の白の石が 裏 ( うら ) 返って黒になります。 3もしくは4に黒の石を 置 ( お ) いたら右下の白の石が 裏 ( うら ) 返って黒になります。
    このプログラムではそのターンで 裏 ( うら ) 返した石がわかるように色を少し 変 ( か ) えています。
  • 次のターンの石( 対戦 ( たいせん ) 相手の石)が 置 ( お ) かれたら 通常 ( つうじょう ) の色になります。

    石が 置 ( お ) けるマスがない時のみ、PASSボタンを 押 ( お ) して石を 置 ( お ) かずに相手のターンにします。 (このプログラムでは 置 ( お ) ける場所があるかないかを 判定 ( はんてい ) する 処理 ( しょり ) をしていないため、 置 ( お ) ける場所があった場合でもPASSボタンを 押 ( お ) すと相手のターンになってしまいます)。
    パスは何度でもすることができます。黒、白のどちらも 置 ( お ) けるマスがなくなったら終了です。
    RESULTボタンを 押 ( お ) すと、黒、白のそれぞれの石の数を 表示 ( ひょうじ ) します。
    もう一度RESULTボタンを 押 ( お ) すと 表示 ( ひょうじ ) が消えます。ゲームの 途中 ( とちゅう ) でも石の数を 表示 ( ひょうじ ) することができます。

マス

がクリックされたとき

    • 説明 ( せつめい )
    • それぞれのマスを 配置 ( はいち ) し、中央に4つの石を 置 ( お ) いた 状態 ( じょうたい ) にします。

    •  
    • コードの 詳細 ( しょうさい )
    • 盤面 ( ばんめん ) の 設定 ( せってい ) を実行して1マスの 幅 ( はば ) や1辺のマスの数などを 設定 ( せってい ) します。

      初期化 ( しょきか ) を実行して 各変数 ( かくへんすう ) 、リストを初期の 状態 ( じょうたい ) にします。

「Start」を受け取ったとき

    • 説明 ( せつめい )
    • Startを受け取ったときに以下を実行します。

    •  
    • コードの 詳細 ( しょうさい )
    • マスを 並 ( なら ) べるを実行して各マスを 配置 ( はいち ) します。

      石を中央に 置 ( お ) くを実行して 盤面 ( ばんめん ) の中央に黒を2つ、白を2つ石を 置 ( お ) きます。

      石 更新 ( こうしん ) を送ります。

盤面 ( ばんめん ) の 設定 ( せってい )

    • 説明 ( せつめい )
    • 1マスの 幅 ( はば ) や 1辺のマス数を 設定 ( せってい ) し、 それをもとに 基準 ( きじゅん ) とする左下のマスの 座標 ( ざひょう ) などを計算します。

    •  
    • コードの 詳細 ( しょうさい )
    • 1マスの 幅 ( はば ) を40(px)にします。

      1辺のマス数を8にします (これが 実際 ( じっさい ) に 表示 ( ひょうじ ) する 盤面 ( ばんめん ) の1辺のマス数です)。

      1辺のマス数( 仮想 ( かそう ) )を( 1辺のマス数+2)にします

      (これは 仮想 ( かそう ) の 盤面 ( ばんめん ) の1辺のマス数です。 実際 ( じっさい ) の 盤面 ( ばんめん ) のマスが8×8であれば 仮想 ( かそう ) の 盤面 ( ばんめん ) のマス数は10×10となります)。

      盤面 ( ばんめん ) の中央の 座標 ( ざひょう ) を0とし、 左下 隅 ( すみ ) マスのx 座標 ( ざひょう ) を計算します。

    •  
    • 盤面 ( ばんめん ) の 幅 ( はば ) が「1マスの 幅 ( はば ) × 1辺のマス数」(40×8=320)であり、 左下 隅 ( すみ ) マスのx 座標 ( ざひょう ) は 「-( 盤面 ( ばんめん ) の 幅 ( はば ) の半分-1マスの 幅 ( はば ) の半分)」となります。

      左下 隅 ( すみ ) マスのy 座標 ( ざひょう ) の 値 ( あたい ) は 左下 隅 ( すみ ) マスのx 座標 ( ざひょう ) の 値 ( あたい ) と同じです。

      左下 隅 ( すみ ) マス( 仮想 ( かそう ) )のx 座標 ( ざひょう ) と y 座標 ( ざひょう ) は 左下 隅 ( すみ ) マスの 座標 ( ざひょう ) から 1マスの 幅 ( はば ) 分だけ 外側 ( そとがわ ) になります。

    •  

初期化 ( しょきか )

    • 説明 ( せつめい )
    • 各変数 ( かくへんすう ) 、リストを 初期化 ( しょきか ) します。

    •  
    • コードの 詳細 ( しょうさい )
    • オリジナルは 表示 ( ひょうじ ) しないため 隠 ( かく ) します。

      クローン?をnoにします。

      ターンを1(黒)にします。

      コスチュームをなしにします。

      マスリストの 要素 ( ようそ ) を 一旦 ( いったん ) すべて 削除 ( さくじょ ) します。

      仮想 ( かそう ) の 盤面 ( ばんめん ) のマスの数だけ マスリストに0を 追加 ( ついか ) します。

      マスリストの 各要素 ( かくようそ ) が各マスの 状態 ( じょうたい ) を示します。 この時点ではすべてのマスが「なし」の 状態 ( じょうたい ) となります。

マスを 並 ( なら ) べる

    • 説明 ( せつめい )
    • 実際 ( じっさい ) の 盤面 ( ばんめん ) のマスの数(1辺のマス数× 1辺のマス数)だけクローンを作成して 配置 ( はいち ) します。

      左下 隅 ( すみ ) のマスから作り 始 ( はじ ) め、右に 並 ( なら ) べていきます。マスを1行分 並 ( なら ) べたらその上にまた左からマスを 並 ( なら ) べます。

      仮想 ( かそう ) の 盤面 ( ばんめん ) のマス数(1辺のマス数( 仮想 ( かそう ) )× 1辺のマス数( 仮想 ( かそう ) ))分の 要素 ( ようそ ) を持つ マスリストを用意し、 それぞれのマスの 状態 ( じょうたい ) を 管理 ( かんり ) します。

      それぞれのマスの 管理 ( かんり ) のしかたは 「 仮想 ( かそう ) の 盤面 ( ばんめん ) とそれぞれのマスの 状態 ( じょうたい ) の 管理 ( かんり ) 」 で 説明 ( せつめい ) していますので、そちらを見てください。

    •  
    • コードの 詳細 ( しょうさい )
    • マスの 座標 ( ざひょう ) を左下 隅 ( すみ ) マスの 座標 ( ざひょう ) にします ( 仮想 ( かそう ) の 盤面 ( ばんめん ) の左下 隅 ( すみ ) ではなく 実際 ( じっさい ) の 盤面 ( ばんめん ) の左下 隅 ( すみ ) のマスです)。

      番号を 1辺のマス数( 仮想 ( かそう ) )+2にします (8×8の 盤面 ( ばんめん ) であれば12です)。

      まず 以下 ( いか ) のAの 処理 ( しょり ) を 1辺のマス数(列数)回くり返し、 実際 ( じっさい ) の 盤面 ( ばんめん ) の一番下の行のマスを 並 ( なら ) べます。

    •  
    • A :

      自分自身のクローンを作ります。
      クローン作成時の 処理 ( しょり ) が進んでから次の 処理 ( しょり ) に進むように 念 ( ねん ) のため0秒待つブロックを 置 ( お ) いています。
      右 隣 ( となり ) の列に 移動 ( いどう ) するためにx 座標 ( ざひょう ) を1マスの 幅 ( はば ) だけ 増 ( ふ ) やします。
      番号を1 増 ( ふ ) やします。

    •  
    • 1行分 並 ( なら ) べ終わったらx 座標 ( ざひょう ) を 左下 隅 ( すみ ) マスのx 座標 ( ざひょう ) に 戻 ( もど ) します。

      上の行に 移動 ( いどう ) するためにy 座標 ( ざひょう ) を 1マスの 幅 ( はば ) だけ 増 ( ふ ) やします。

      右端 ( みぎはし ) と 左端 ( ひだりはし ) の 仮想 ( かそう ) のマスを 飛 ( と ) ばすために 番号を2 増 ( ふ ) やします。

      これを 1辺のマス数(行数)回くり返し、 1辺のマス数× 1辺のマス数(8×8)のマスを 並 ( なら ) べます。

クローンされたとき

    • 説明 ( せつめい )
    • 各マスがクローンされたときにそれぞれがおこなう 処理 ( しょり ) です。

      実際 ( じっさい ) の 盤面 ( ばんめん ) のマスの数が8×8=64であれば、64回実行されます。

    •  
    • コードの 詳細 ( しょうさい )
    • 表示 ( ひょうじ ) します。

      マス番号の 値 ( あたい ) を 番号にします。

      マス番号は このクローンが何番目のマス(どの 位置 ( いち ) のマス)であるかを示します。

      x 座標 ( ざひょう ) 、 y 座標 ( ざひょう ) を マスのx 座標 ( ざひょう ) 、 マスのy 座標 ( ざひょう ) に 保存 ( ほぞん ) しておきます。 これはゲーム中にマスを 誤 ( あやま ) って 移動 ( いどう ) させてしまった場合でも 石 更新 ( こうしん ) を受け取ったときに元の 位置 ( いち ) に 戻 ( もど ) せるようにするためです。

      このマスが何行目、何列目であるかも マスの行、 マスの列に 保存 ( ほぞん ) しておきます。 現在のプログラムでは使っていませんが、 改造 ( かいぞう ) する場合に使う 可能性 ( かのうせい ) があります。

      マスリストの マス番号番目の 値 ( あたい ) が このマスの 状態 ( じょうたい ) を示します。

      マスリストの マス番号番目の 値 ( あたい ) が0の場合はコスチュームを なしにします。

      0 以外 ( いがい ) の場合、0より大きければ(1 以上 ( いじょう ) なら)コスチュームを黒にし、 そうでなければ(0より小さければ)コスチュームを白にします。

      クローンされたときは0になっているはずですが、 念 ( ねん ) のため0 以外 ( いがい ) だった場合にどうするのかも書いています。

石を中央に 置 ( お ) く

    • 説明 ( せつめい )
    • このゲームは 盤面 ( ばんめん ) の中央のマスに黒と白の石を2ずつ 置 ( お ) いた 状態 ( じょうたい ) で開始します。

      実際 ( じっさい ) の 盤面 ( ばんめん ) のマス数が8x8( 仮想 ( かそう ) の 盤面 ( ばんめん ) のマス数が10×10)であれば45番目、 46番目、55番目、56番目の4つのマスに石を 置 ( お ) きます。

    •  
    • コードの 詳細 ( しょうさい )
    • 仮想 ( かそう ) の 盤面 ( ばんめん ) の全マス数の2分の1から 仮想 ( かそう ) の 盤面 ( ばんめん ) の1辺のマス数の2分の1を引いた 値 ( あたい ) を 番号にします。

      これは中央の4つのうちの左下のマスの番号です。

      マスリストの 番号番目の 値 ( あたい ) を1(黒)にします。

      次にその右 隣 ( となり ) のマスを白にします。

      (マスリストの (番号+1)番目の 値 ( あたい ) を-1(白)にします。

      番号を (左下のマスの番号+ 仮想 ( かそう ) の 盤面 ( ばんめん ) の1辺のマス数)にします。

      これは中央の4つのうちの左上のマスの番号です。

      マスリストの 番号番目の 値 ( あたい ) を-1(白)にします。

      次にその右 隣 ( となり ) のマスを黒にします

      (マスリストの( 番号+1)番目の 値 ( あたい ) を1(黒)にします。

石 更新 ( こうしん ) を受け取ったとき

    • 説明 ( せつめい )
    • マスリストのそれぞれの 要素 ( ようそ ) の マスの 状態 ( じょうたい ) をもとに対応するマスのコスチュームを 変更 ( へんこう ) します。

      誤 ( あやま ) って 位置 ( いち ) をずらしてしまったマスがあれば元の 位置 ( いち ) に 戻 ( もど ) します。

    •  
    • コードの 詳細 ( しょうさい )
    • マスリストの マス番号番目の 値 ( あたい ) (マスの 状態 ( じょうたい ) ) によってコスチュームを 変更 ( へんこう ) します。

    •  
    •  
    • マスの 状態 ( じょうたい ) が0の場合、0でない場合にわけ、0でなければ0より大きい場合、 0より小さい場合にわけるというようにしていますが、マスの 状態 ( じょうたい ) =-2の場合、マスの 状態 ( じょうたい ) =-1の場合、 マスの 状態 ( じょうたい ) =0の場合、マスの 状態 ( じょうたい ) =1の場合、 マスの 状態 ( じょうたい ) =2の場合というように 順番 ( じゅんばん ) に 確認 ( かくにん ) していっても同じ 結果 ( けっか ) となります。

      マスの 座標 ( ざひょう ) がずれてしまっている場合があるので、もとの 座標 ( ざひょう ) に 戻 ( もど ) します。

このスプライトがクリックされたとき

    • 説明 ( せつめい )
    • マスに石がなければ石を 置 ( お ) けるかどうかを 確認 ( かくにん ) し、 置 ( お ) ける場合は石を 置 ( お ) き、ターンを 替 ( か ) えます。

      すでにマスに石が 置 ( お ) いてある場合はなにもせずに終了します。

      クリックされたマス(クローン)でのみ実行されます。

    •  
    • コードの 詳細 ( しょうさい )
    • このマスにすでに石が 置 ( お ) いてある場合 (マスリストの マス番号番目の 値 ( あたい ) が0 以外 ( いがい ) の場合) は何もしないでこのスクリプトを終了します。

      0の場合(石が 置 ( お ) かれていない場合)は 以降 ( いこう ) の 処理 ( しょり ) をします。

      裏 ( うら ) 返せる方向リストを空にします。

      石を 置 ( お ) ける?を実行します。 これはクリックしたマスの 周囲 ( しゅうい ) の8方向の 状態 ( じょうたい ) を調べ、このマスに石を 置 ( お ) けるかどうかを 確認 ( かくにん ) する 処理 ( しょり ) です。

      相手の石を 裏 ( うら ) 返すことができる方向が1つでもあれば石を 置 ( お ) くことができます。 裏 ( うら ) 返すことができる方向は 裏 ( うら ) 返せる方向リストに 追加 ( ついか ) されます。

      裏 ( うら ) 返す方向があった場合( 裏 ( うら ) 返せる方向リスト の長さが1 以上 ( いじょう ) の場合)には石を 置 ( お ) き、 自分の石で 挟 ( はさ ) んだ相手の石を 裏 ( うら ) 返してから相手のターンにします。

      それは 以下 ( いか ) のAの 処理 ( しょり ) でおこないます。

    •  
    • A :

      黒白(仮)→ 確定 ( かくてい ) を実行します。
      これは相手が前回のターンで 裏 ( うら ) 返した石を 確定 ( かくてい ) して 通常 ( つうじょう ) の 状態 ( じょうたい ) にします。
      マスリストの マス番号番目の 値 ( あたい ) を ターンの 値 ( あたい ) にします(自分の色の石を 置 ( お ) きます)。
      各方向を 裏 ( うら ) 返すを実行します。 これは各方向の相手の石を 裏 ( うら ) 返す 処理 ( しょり ) です。

    •  
    • 石を 置 ( お ) けないマスだった場合は ポップの音を鳴らして終了します。

石を 置 ( お ) ける?

    • 説明 ( せつめい )
    • 石を 置 ( お ) きたいマスの左方向、右方向、左上方向、左下方向、上方向、下方向、右上方向、 右下方向の 順 ( じゅん ) に相手の石を 裏 ( うら ) 返せるかどうかを 判定 ( はんてい ) します。

      裏 ( うら ) 返せる方向が1つでもあればこのマスに石を 置 ( お ) くことができます。

      方向の 値 ( あたい ) は次のようにします。


      そのマスの番号に方向の 値 ( あたい ) を足すとその方向の1つ 隣 ( となり ) のマスの番号になります。

      各方向ごとの 判定 ( はんてい ) はこの方向で 裏 ( うら ) 返せる? で 判定 ( はんてい ) します。

    •  
    • コードの 詳細 ( しょうさい )
    • 確認結果 ( かくにんけっか ) を0にします。

      左方向(-1)に対してこの方向で 裏 ( うら ) 返せる? を実行します。

      右方向(+1)に対してこの方向で 裏 ( うら ) 返せる? を実行します。

      方向を 1辺のマス数( 仮想 ( かそう ) )-1にします。 これは左上を指しています。

      以下 ( いか ) の 処理 ( しょり ) を3回くり返し、6つの方向に対して 判定 ( はんてい ) します。

      (左上、左下、上、下、右上、右下の 順 ( じゅん ) に 判定 ( はんてい ) しています)

    •  
    • A :

      方向に対して この方向で 裏 ( うら ) 返せる?を実行します。(上の行の 判定 ( はんてい ) )
      方向×(-1)に対して この方向で 裏 ( うら ) 返せる?を実行します。(下の行の 判定 ( はんてい ) )
      方向を1 増 ( ふ ) やします。(方向を1つ右にずらします)

この方向で 裏 ( うら ) 返せる?

    • 説明 ( せつめい )
    • 指定した方向に対して1マスずつ 確認 ( かくにん ) していき、 相手の石が1つ 以上 ( いじょう ) 並 ( なら ) び 且 ( か ) つその先に自分の石があればその間にある相手の石を 裏 ( うら ) 返すことができます。

      石を 置 ( お ) きたいマスのすぐ 隣 ( となり ) が自分の石であったり、自分の石にたどりつく前に石がないマスがあったり、 盤面 ( ばんめん ) の 端 ( はし ) まで相手の石が 並 ( なら ) んでいたりした場合はその方向では 裏 ( うら ) 返すことができません。

    •  
    • コードの 詳細 ( しょうさい )
    • 隣 ( となり ) のマスの番号をマス番号+方向にします。

      隣 ( となり ) のマスに石がなければ( 隣 ( となり ) のマスの 状態 ( じょうたい ) が0なら) 確認結果 ( かくにんけっか ) を0にして終了します。

      隣 ( となり ) のマスに石があるなら( 隣 ( となり ) のマスの 状態 ( じょうたい ) が0 以外 ( いがい ) なら)Aの 処理 ( しょり ) をします。

    •  
    • A :

      隣 ( となり ) のマスにある石が相手の石である場合、Bの 処理 ( しょり ) をします。
      隣 ( となり ) のマスにある石が相手の石でない場合(自分の石である場合)、Cの 処理 ( しょり ) をします。

    •  
    • B :

      確認結果 ( かくにんけっか ) を1 増 ( ふ ) やします。
      「1ずつ 変 ( か ) える」を使っていますが、このプログラムでは「1にする」を使用しても同じ 結果 ( けっか ) となります。 「1ずつ 変 ( か ) える」を使うと 確認結果 ( かくにんけっか ) の 値 ( あたい ) と 並 ( なら ) んでいる相手の石の数が同じとなるので、 この方向に相手の石がいくつ 並 ( なら ) んでいるのかを 確認 ( かくにん ) することができます。 隣 ( となり ) のマスの番号と方向を使って この方向で 裏 ( うら ) 返せる?を実行します (同じ方向のさらに1つ先のマスに対して 判定 ( はんてい ) します)。

    •  
    • C :

      確認結果 ( かくにんけっか ) が0より大きければ 裏 ( うら ) 返せる方向リストにこの方向を 追加 ( ついか ) します。
      確認結果 ( かくにんけっか ) が0の場合は石を 置 ( お ) きたいマスのすぐ 隣 ( となり ) が 自分の石ということなのでこの方向は 裏 ( うら ) 返せないと 判定 ( はんてい ) し、リストへ 追加 ( ついか ) しません。
      確認結果 ( かくにんけっか ) が1 以上 ( いじょう ) の場合は 途中 ( とちゅう ) に相手の石があったということなので、 この方向は 裏 ( うら ) 返すことができると 判定 ( はんてい ) し、リストへ 追加 ( ついか ) します。

    •  
    • このプロジェクトは 仮想 ( かそう ) のマスを 置 ( お ) くことで 判定 ( はんてい ) をしやすくしています。

      もし 仮想 ( かそう ) のマスを 置 ( お ) かずに次の図のような 状況 ( じょうきょう ) で14のマスに黒の石を 置 ( お ) けるかを 判定 ( はんてい ) するとします。

    • マスリストの15番目、 16番目とリストの番号を 単純 ( たんじゅん ) に1つずつ 増 ( ふ ) やして調べていくと 17番目の黒の石で 挟 ( はさ ) めると 判定 ( はんてい ) してしまいます。 それを 防 ( ふせ ) ぐためには 端 ( はし ) に 到達 ( とうたつ ) したかのチェックも 必要 ( ひつよう ) となり、やや 複雑 ( ふくざつ ) になります。

      そこでこのプログラムでは石が 置 ( お ) かれることがない 仮想 ( かそう ) のマスを 実際 ( じっさい ) の 盤面 ( ばんめん ) の 外側 ( そとがわ ) に 置 ( お ) くことで、 相手の石が 続 ( つづ ) いたまま 端 ( はし ) に着いたか?という 判定 ( はんてい ) をしなくて 済 ( す ) むようにしています。

    • 27に黒の石を 置 ( お ) けるかを 判定 ( はんてい ) する場合、 黒の石がある32のマスにたどり着く前に石がない30の 仮想 ( かそう ) のマスがあるので 裏 ( うら ) 返すことができないという 判定 ( はんてい ) 結果 ( けっか ) となります。

      このように 端 ( はし ) のマスであっても 端 ( はし ) 以外 ( いがい ) のマスと 同じ 判定 ( はんてい ) のしかたができるようにするために 仮想 ( かそう ) のマスを 置 ( お ) いています。

各方向を 裏 ( うら ) 返す

    • 説明 ( せつめい )
    • 裏 ( うら ) 返せる方向リストに 追加 ( ついか ) された方向ごとに 1方向を 裏 ( うら ) 返すを実行し、 相手の石を 裏 ( うら ) 返して自分の石にしていきます。

    •  
    • コードの 詳細 ( しょうさい )
    • 番号を1にし、 裏 ( うら ) 返せる方向リスト の長さの数だけAの 処理 ( しょり ) をくり返します。

    •  
    • A :

      石を 置 ( お ) きたいマスの番号と 裏 ( うら ) 返せる方向リストの 番号番目の方向を渡して 1方向を 裏 ( うら ) 返すを実行します。
      番号を1 増 ( ふ ) やします。

    •  
    • すべての方向を 裏 ( うら ) 返したら石 更新 ( こうしん ) を送ります。

      各方向を 裏 ( うら ) 返すが実行された時点では マスリスト の中の 値 ( あたい ) だけが 更新 ( こうしん ) されているだけで、 画面上 ( がめんじょう ) のマスの 状態 ( じょうたい ) は 変 ( か ) わっていません。

      石 更新 ( こうしん ) を 受け取ったときの 処理 ( しょり ) の中で 実際 ( じっさい ) にマスのコスチュームを 変更 ( へんこう ) します。

1方向を 裏 ( うら ) 返す

    • 説明 ( せつめい )
    • 隣 ( となり ) のマスの石が自分の石であるか、もしくは石がない場合は何もせずに終了します。

      隣 ( となり ) のマスが相手の石である場合は自分の石に 変更 ( へんこう ) し、さらに 隣 ( となり ) のマスの番号を渡して 1方向を 裏 ( うら ) 返すを実行します。

    •  
    • コードの 詳細 ( しょうさい )
    • 隣 ( となり ) のマスの番号をマス番号+方向にします。

      「ターン」×「マスリストの 隣 ( となり ) のマスの番号番目の 値 ( あたい ) 」が 0 未満 ( みまん ) (負の 値 ( あたい ) )であれば 隣 ( となり ) のマスには相手の石があると 判断 ( はんだん ) します。

      ターンは 黒なら1、白なら-1です。 隣 ( となり ) のマスに石がなければ「 ターン」×「マスリストの 隣 ( となり ) のマスの番号番目の 値 ( あたい ) 」は 必 ( かなら ) ず0になります。 ターンと 隣 ( となり ) のマスの石の色が同じである場合は同じ 符号 ( ふごう ) 同士の かけ算であり黒×黒、白×白のどちらの場合も正の数(0より大きい)となります。

      ターンと 隣 ( となり ) のマスの石の色が 異 ( こと ) なる場合は 異 ( こと ) なる 符号 ( ふごう ) 同士の かけ算であり黒×白、白×黒のどちらの場合も負の数(0より小さい)となります。

      隣 ( となり ) のマスの石が相手の石なら「マスリストの 隣 ( となり ) のマスの番号番目の 値 ( あたい ) 」をターン×2(2または-2)にし、 さらに 隣 ( となり ) のマスの番号を渡して 1方向を 裏 ( うら ) 返すを実行します。

      これは指定した方向に対して、 自分の色の石に当たるまで相手の石を 裏 ( うら ) 返しています(石がないマスに当たった場合も この 処理 ( しょり ) を止めるようにしていますが、 実際 ( じっさい ) には 裏 ( うら ) 返すことができる方向に対してのみ 実行するので石がないマスに当たることはありません)。

黒白(仮)→ 確定 ( かくてい )

    • 説明 ( せつめい )
    • 石を 置 ( お ) いたら、その前のターンで 裏 ( うら ) 返した石の 状態 ( じょうたい ) を 確定 ( かくてい ) します(2から1へ、または-2から-1へ 変更 ( へんこう ) します)。

    •  
    • コードの 詳細 ( しょうさい )
    • 番号を1にし、 マスリストの長さの数だけAの 処理 ( しょり ) をくり返します。

    •  
    • A :

      マスリストの 番号番目の 値 ( あたい ) が1より大きい場合(2の場合)は
      マスリストの 番号番目の 値 ( あたい ) を1にします。
      マスリストの 番号番目の 値 ( あたい ) が-1より小さい場合(-2の場合)は
      マスリストの 番号番目の 値 ( あたい ) を-1にします。
      番号を1 増 ( ふ ) やします。

    •  
    • すべての2を1へ、-2を-1へ 変更 ( へんこう ) し終わったら 石 更新 ( こうしん ) を送ります。

ターン

がクリックされたとき

    • 説明 ( せつめい )
    • コスチュームと 座標 ( ざひょう ) を 設定 ( せってい ) します。

    •  
    • コードの 詳細 ( しょうさい )
    • コスチュームを黒にします。

      x 座標 ( ざひょう ) を-200、y 座標 ( ざひょう ) を160にします。

石 更新 ( こうしん ) を受け取ったとき

    • 説明 ( せつめい )
    • ターンの 値 ( あたい ) によってコスチュームを黒、 白のどちらかに 設定 ( せってい ) します。

    •  
    • コードの 詳細 ( しょうさい )
    • ターンが0 未満 ( みまん ) (-1)ならコスチュームを白、 そうでなければ(1なら)コスチュームを黒にします。

PASSボタン

がクリックされたとき

    • 説明 ( せつめい )
    • 座標 ( ざひょう ) を 設定 ( せってい ) します。

    •  
    • コードの 詳細 ( しょうさい )
    • x 座標 ( ざひょう ) を-200、y 座標 ( ざひょう ) を120にします。

このスプライトがクリックされたとき

    • 説明 ( せつめい )
    • ターンを切り 替 ( か ) えます。

    •  
    • コードの 詳細 ( しょうさい )
    • ターンを ターン×(-1)にします。

      (黒(1)なら白(-1)へ、白(-1)なら黒(1)にします)。 石 更新 ( こうしん ) を送ります。

RESULTボタン

がクリックされたとき

    • 説明 ( せつめい )
    • 座標 ( ざひょう ) を 設定 ( せってい ) し、黒、 白を 隠 ( かく ) します。

    •  
    • コードの 詳細 ( しょうさい )
    • x 座標 ( ざひょう ) を-200、y 座標 ( ざひょう ) を84にします。
      結果表示 ( けっかひょうじ ) を0にします。
      黒を 隠 ( かく ) します。
      白を 隠 ( かく ) します。

このスプライトがクリックされたとき

    • 説明 ( せつめい )
    • 黒の数と白の数の 表示 ( ひょうじ ) / 非表示 ( ひひょうじ ) を切り 替 ( か ) えます。

    •  
    • コードの 詳細 ( しょうさい )
    • 結果 ( けっか ) が 表示 ( ひょうじ ) されていない( 結果表示 ( けっかひょうじ ) =0)の場合、 黒と白の数を集計して 表示 ( ひょうじ ) します。

    •  
    • 黒白集計を実行してそれぞれの数を集計します。
      黒、白を 表示 ( ひょうじ ) します。
      結果表示 ( けっかひょうじ ) を1にします。

    •  
    • 結果 ( けっか ) が 表示 ( ひょうじ ) されている( 結果表示 ( けっかひょうじ ) =1)の場合、 黒、白を 隠 ( かく ) し、 結果表示 ( けっかひょうじ ) を0にします。

石 更新 ( こうしん ) を受け取ったとき

    • 説明 ( せつめい )
    • 石 更新 ( こうしん ) を受け取ったら 黒、 白の数を集計しなおします。

    •  
    • コードの 詳細 ( しょうさい )
    • 結果 ( けっか ) が 表示 ( ひょうじ ) されている( 結果表示 ( けっかひょうじ ) =0)の場合のみ、 黒白集計を実行します。

黒白集計

    • 説明 ( せつめい )
    • 各マスの 状態 ( じょうたい ) をチェックし、黒の数と白の数を集計します。

    •  
    • コードの 詳細 ( しょうさい )
    • 黒を0にします。

      白を0にします。

      マス番号を1にし、 マスリスト の長さの数だけ 以下 ( いか ) の 処理 ( しょり ) をくり返します。

    •  
    • 「マスリストの マス番号 番目の 値 ( あたい ) 」が0より大きい(1または2)場合は、 黒を1 増 ( ふ ) やします。
      「マスリストの マス番号 番目の 値 ( あたい ) 」が0より小さい(-1または-2)場合は、 白を1 増 ( ふ ) やします。

    •  
    • 黒を1 増 ( ふ ) やします。

用語の 説明 ( せつめい )

マスの 状態 ( じょうたい )


  • (※) 裏 ( うら ) 返したばかりの 状態 ( じょうたい ) 。
    次のターンが終わったら 確定 ( かくてい ) して、 通常 ( つうじょう ) の 状態 ( じょうたい ) ( )になります。

仮想 ( かそう ) の 盤面 ( ばんめん ) とそれぞれのマスの 状態 ( じょうたい ) の 管理 ( かんり )

  • 実際 ( じっさい ) の 盤面 ( ばんめん ) (緑のマス)の 周 ( まわ ) りに1マス 増 ( ふ ) やしたものが 仮想 ( かそう ) の 盤面 ( ばんめん ) です。
    実際 ( じっさい ) の 盤面 ( ばんめん ) を8×8マスとした場合、 仮想 ( かそう ) の 盤面 ( ばんめん ) は10×10マスとなります。
    仮想 ( かそう ) の 盤面 ( ばんめん ) のマス数(10×10マスであれば100)の 要素 ( ようそ ) を持つマスリストで それぞれのマスの 状態 ( じょうたい ) を 管理 ( かんり ) します。
    仮想 ( かそう ) の 盤面 ( ばんめん ) のマスとマスリストの 各要素 ( かくようそ ) は次の図のように対応させます。

Start

主な 動 ( うご ) き

  • がクリックされたらコスチュームをStartにして 表示 ( ひょうじ ) する。
  • クリックされたら 各 ( かく ) スプライトへStartを送り、 非表示 ( ひひょうじ ) にする( 各 ( かく ) スプライト Startを受け取ってゲーム開始)。

がクリックされたとき

    • 説明 ( せつめい )
    • ゲームスタートの 準備 ( じゅんび ) をする。
    •  
    • 必要な 処理 ( しょり )
    • 座標 ( ざひょう ) の 初期化 ( しょきか )
      Startの 表示 ( ひょうじ )
      マウスポインターが上に乗ったとき色を 変 ( か ) える
    •  
    • コードの 詳細 ( しょうさい )
    • x 座標 ( ざひょう ) (横の 表示 ( ひょうじ ) 位置 ( いち ) )を0、 y 座標 ( ざひょう ) ( 縦 ( たて ) の 表示 ( ひょうじ ) 位置 ( いち ) )を0にします。

      コスチュームをStartにして 表示 ( ひょうじ ) します。 (ゲーム終了時は 非表示 ( ひひょうじ ) になっているため)

      マウスポインターがこのスプライトに 触 ( ふ ) れているときは色を 変 ( か ) え、 離 ( はな ) れたら元の色に 戻 ( もど ) します。

このスプライトがクリックされたとき

    • コードの 詳細 ( しょうさい )
    • コード「 がクリックされたとき」が動作しているので、止めます。

      各 ( かく ) スプライトにStartを送りゲームを開始します。

^