Jao's Blog

プログラミング備忘録

画面の切り替えを実装する #03

 前回は、ゲームを遊ぶための様々な画面を作り上げていきました。
 今回は、それらの画面表示を切り替える処理を、実装していきましょう。

f:id:Kyokuya_jao:20200814202858p:plain
 こちらはタイトル画面ですね。「スタート」というボタンを押すと
f:id:Kyokuya_jao:20200814203426p:plain
 このような、カウント画面に移行するのが理想です。

どのように実装していくか?

 まず、スタート画面、ゲーム画面、リザルト画面、それぞれを包括している親要素を、全てdisplay: none;で非表示にします。非表示であることがデフォルト、という感じですね。
 そしてnowShowという、些か適当な名前のクラスにdisplay: block;を設定し、nowShowが付与された画面が表示されるようにしましょう。

ゲームスタート
$(document).on('click', '#startButton', function(){
    $('#startScreen').removeClass('nowShow');
    $('#gameScreen').addClass('nowShow');
  });

 スタート画面でスタートを押すと、スタート画面のnowShowが取り除かれ、ゲーム画面にnowShowが付与されます。

ゲーム進行

 ゲーム画面において、上部の「制限時間表示」「検品物詳細表示」と、下部の「次へ」ボタンは、どの段階においても変わらず表示されています。故に、中核となる部分の表示だけをnowShowの移動で表現します。

// 現在nowShowがついてる番号を表示
 // 0……カウント画面
 // 1……看板選択画面
 // 2……看板記入画面
 index = $('.nowShow').index('.mainWrap');

 mainWrapとは、ゲームの操作を行う画面に付与されたクラスです。ゲームの段階の数だけ、このクラスのついた要素は存在します。このクラスの中でnowShowクラスがついているもの(=現在表示されているもの)が何番目なのか、indexという変数に格納しておきます。

// 次へボタンを押すと次の画面を表示させる
  $(document).on('click', '.next', function(){
    $('.mainWrap').eq(index).removeClass('nowShow');
    $('.mainWrap').eq(index + 1).addClass('nowShow');
    index++;

    // 最後のゲームなら、結果画面に遷移
    if((index - 1) == 2){
      $('.mainWrap').removeClass('nowShow');
      $('#gameScreen').removeClass('nowShow');
      $('#resultScreen').addClass('nowShow');
    }
  });

 nextクラスのついたボタンを押すことで、現在のindex番目のmainWrapに付与されているnowShowクラスを消し去り、次の番号のmainWrapにnowShowを分け与えます。
 index - 1が最後のゲームの番号なら、リザルト画面に移行する分岐処理も召喚します。なぜindex - 1なのかというと、ボタンを押した時点でindexの番号が進んでしまうからです。

スタート画面へ
$(document).on('click', '#endButton', function(){
    $('#resultScreen').removeClass('nowShow');
    $('#startScreen').addClass('nowShow');
    index = 0;
    $('.mainWrap').eq(index).addClass('nowShow');
  });

 リザルト画面にて、「タイトルへ」というボタンをクリックすると、スタート画面へと戻る処理です。この時点でindexをリセットし、mainWrapに降り直しております。






 以上をもって、「スタート画面」→「ゲーム進行」→「結果表示」→「スタート画面」という画面ループを、クリック操作のみで実装することができました。  次回はいよいよ、各ゲームの処理を実装していきましょう。