Jao's Blog

プログラミング備忘録

セリフ表示機能をグレードアップする #15【完結】

複数種類の台詞をランダムで表示させる

 毎度毎度同じ台詞を喋られては、趣がないというもの。故に、同じページに対応する台詞を複数用意し、それをランダムで表示させる機能を作成していきましょう。
 台詞を表示させる処理は、今見ているページ名を取得し、データベースからページ名に対応する台詞を引っ張って行われるものでした。複数の台詞をデータベースに登録しておくと、多次元配列の形で台詞が取り出されます。それに以下の処理をかけることで、ランダム抽出が可能となります。

  // 複数種類あるセリフから一つのみ選別
  private function _chooseSerifAndFase($tempSerifAndFace){
    $i = mt_rand(0, count($tempSerifAndFace) - 1);
    return $tempSerifAndFace[$i];
  }

 後はこれを、従来の処理で表示させるだけです。

>f:id:Kyokuya_jao:20200628174533g:plain
 ページにアクセスする度に、違ったセリフが取り出されます。

日記をつける前と後でセリフが変わる

 今日の日記をまだつけていないと「今日は日記を書いていませんね!」と表示される一方、日記をつけていると「日記を書いたんですね!偉い!」のように表示される処理を作っていきます。

表示されている日記が「今日」のものかどうかを識別

 日記を見ているというとこは、必ずURLのパラメーターにその日付が表示されています。その日付と、DateTime('today')で取り出される日付(=今日の日付)を比較し、合致した場合は、その日記は今日のもの、ということになります。

今日、日記を書いたかどうかを識別

 データベースから、今日の日記を取り出します。取り出せた場合は、日記がある。取り出せなければ、日記は無い。単純です。

  $myDiary = new \MyApp\Model\DiaryModel();
  // その日の日記が存在するか否かをチェック
  if($myDiary->issetTodayDiary($diaryDate)){
    $res = 'doneEdit';
  }else{
    $res = 'yetEdit';
  };

 これによって返される「doneEdit」か「yetEdit」の文字列を鍵として、台詞を取り出します

f:id:Kyokuya_jao:20200628174645p:plainf:id:Kyokuya_jao:20200628174650p:plain
 うまくいきました!

日記をつけた日数でセリフが変化する

 「三日連続も日記をつけてますね!」「今日で連続三十日です!やばい!」のように、連続で日記を書いた日数に応じてセリフが変化する処理を作成します。

処理を挟む位置

 一つ前の処理で、「表示されている日記が今日か否か」「今日、日記を書いたか否か」と、二つの条件分岐を重ねました。連続記録を褒めてくれる今回の処理は、「今日」かつ「日記を書いている」状態の時に行われるようにしましょう。

連続記録日数を取り出し、条件分岐

 自分が連続でどれだけ日記を書いたのかは、データベースのユーザーテーブルに記されています。それを取り出し、日数に応じて条件分岐するのみです。

  private function _diaryDaysCheck($keepDays, $allDays){
    switch($keepDays){
      case 3:
        return $keepDays;
        break;
      case 7:
        return $keepDays;
        break;
      default:
        // 総記録数が1日=初めて日記を書いた時に特別処理
        switch($allDays){
          case 1:
            return $allDays;
            break;
          default:
            return false;
            break;
        }
      break;
    }
  }

 とりあえずということで、連続記録日数が3日と7日の時にのみ、その日数を返すようにしています。返された日数をキーとして、台詞を取り出します。ちなみに、初めて日記を書いた時にも特別なセリフが表示されるようにもしてあります。

>f:id:Kyokuya_jao:20200628174803p:plain
 うまくいきました!
 ほぼ同様の処理を、マイページにも適用させます。マイページでは、連続記録日数ではなく、総日数に応じて台詞が変わる仕組みとしましょう。
f:id:Kyokuya_jao:20200628174837p:plain



 さて、これにてこの日記アプリは、ほぼ完成です。
 後は、セリフのレパートリーを増やしたり、細かい修正を加えて、完成品を納めることとします。