なんともわかるようなわからないような微妙なタイトルですが、こういうことです。

最初の4文字を反転させると「鳩でもわかるC#」になります。では、以下はどうでしょうか?

慣れないと意外に難しいかもしれません。

HTML部分

style.css

グローバル定数

グローバル定数は以下のとおりです。

QueueStackクラスの定義

幅優先探索をするときに使うqueueとしてQueueStackクラスを定義します。これは 最短以外は不正解!8パズルでゲームをつくる(1) と同じものです。

Cellクラスの定義

マスとそのなかの文字を描画するためのCellクラスを定義します。

this.Text には ‘鳩’, ‘で’, ‘も’, ‘わ’, ‘か’, ‘る’, ‘C’ のうちいずれかの文字が格納され、その文字に対応したイメージが描画されます。

QuestionAnswerクラスの定義

お題と答えをペアにして扱うためのQuestionAnswerクラスを定義します。

Gameクラスの定義

Gameクラスを定義します。まずコンストラクタを示します。

以下は効果音再生用の関数です。

連続部分文字列の反転

ReverseString関数は連続した部分文字列を反転させるための関数です。

お題の生成

‘C#’だけ2文字で1文字として扱いたいのですが、そうもいかないので代わりに全角文字の’C’を用いています。これをすべての区間で反転させて得られる文字列を新たな遷移先とします。この処理を繰り返すことで文字列の反転処理を繰り返すことで得られるすべての文字列を取得しています。また遷移先にはどのように区間を選択したのかも記憶させ、容易にもとに戻すことができるようにしています。

更新処理

更新処理を示します。

ゲーム開始の処理

反転の処理

マスがクリックされたら以下の処理をおこないます。

反転の区間の端点が未選択の場合:
クリックされたマスを反転の区間の端点とする

反転の区間の端点がすでに設定されている場合:
そのマスと現在クリックされたマスとの間の文字列を反転させる処理をおこなう。
規定の手数に達している場合はクリア、失敗の処理もおこなう。
処理が終わったら区間の端点を未選択状態にする。

ひとつ前の状態に戻す処理

[ひとつ戻る]が押下されたときはマスが選択されているときは非選択の状態に、選択されていないときは直前の反転処理をする前の状態に戻します。

ギブアップ時の処理

[ギブアップ]が押下されたら答えを表示し、すべて表示し終わったらゲームスタートボタンを再表示させます。

ゲームオーバー処理

ゲームオーバー時の処理を示します。

スコアランキングへの登録

スコアをスコアランキングに登録する処理を示します。

サーバー側の処理とスコアランキングを表示させる処理はゲーム開始以降の処理 鳩でもわかるXORパズルをつくる(2)と同じなので省略します。

ページが読み込まれたときの処理

ページが読み込まれたらGameオブジェクトを生成して、イベントリスナを追加します。

以下はレンジスライダーでボリューム調整を可能にするための当サイト定番の処理です。