Jao's Blog

プログラミング備忘録

美少女のセリフ表示機能を作成する #14

 さて、いよいよ美少女のセリフ表示機能を実装していきます。この日記アプリの最大最重要項目と言っても過言ではありません。緊張してきた。

データベースにテーブルを用意する

 美少女のセリフはデータベースに保存されます。

create table serif(
  id int not null auto_increment primary key,
  genre varchar(90),
  face varchar(255),
  key1 varchar(90),
  key2 varchar(90),
  key3 varchar(90),
  serif varchar(420)
);

 ”genre”には「トップページ」や「日記閲覧ページ」等のページ名を格納し、台詞を取り出す際の目印とします。
 "key1"〜"key3"には、その他の細かい条件を格納します。例えば、トップページであれば、key1に「朝」「昼」「夜」という文字列を格納し、時間帯ごとに取り出されるセリフが変わる仕様となっております。keyを3つも使うのか、というのは些か疑問ですが、備あれば憂いなしというやつです。
 "face"には「lara.png」や「lara_smile.png」といった、美少女の画像ファイル名を格納します。セリフに応じて、表示される表情が変わる仕組みです。その気になれば、立ち絵を切り替えることも可能ですね。複数の立ち絵を用意するのは、労力的に断念したのですが。

ページによって表示される台詞を変える

 日記を見るページであれば「この日はこんなことがありました!」、日記を書くページであれば「日記を書きましょう!」のように、アクセスしているページに応じた台詞を取り出す仕様としたいです。
 $_SERVER['PHP_SELF']を用いて、現在表示しているスクリプトのファイル名を取得できます。これを鍵とし、データベースにアクセスしましょう。
 ファイル名をそのままデータベースと照らし合わせてもよかったのですが、万一ファイル名を変えるようなことが起きた場合に手間が増えぬよう、ファイル名を独自のページ名に変換してからデータベースと照合します。(以下参照)

  private function _validateCurrentPage($place){
    switch($place){
      case '/index.php':
        $this->genre = 'トップページ';
        $tempSerifAndFace = $this->_topPageSerif();
        break;
      case '/index_list.php':
        $this->genre = 'トップページ';
        $tempSerifAndFace = $this->_topPageSerif();
        break;
      case '/myDiary.php':
        $this->genre = '日記閲覧ページ';
        $tempSerifAndFace = $this->_myDiarySerif();
        break;
      case '/myDiary_edit.php':
        $this->genre = '日記編集ページ';
        $tempSerifAndFace = $this->_myDiaryEditSerif();
        break;
      case '/myPage.php':
        $this->genre = 'マイページ';
        $tempSerifAndFace = $this->_MyPageSerif();
        break;
      case '/myPage_edit.php':
        $this->genre = 'マイページ編集ページ';
        $tempSerifAndFace = $this->_MyPageEditSerif();
        break;
      default :
        $this->genre = 'その他';
        break;
    }

トップページに台詞を表示させる

 トップページには「朝」「昼」「夜」という三種類のキーが用意されているので、date('H')によって現在時刻を24時間表記で取得し、時間帯を条件分岐します。これをキーとし、データベースにアクセスして台詞を取り出しましょう。
 この日記には女の子からどう呼ばれるか女の子の一人称を決定する機能があります。これらを実現するため、データベースに格納している女の子のセリフには工夫を加えてあります。

insert into serif(genre,face,key1,serif)
values(
  "トップページ",
  "lara_smile.png",
  "",
  "<二人称>、こんばんは!\n今日も一日、お疲れ様です!よく頑張りましたね!"
);

 女の子の一人称及び二人称は別のテーブルに格納されているので、まず、それを取り出します。セリフの中に<一人称>や<二人称>という文字列が存在した場合、str_replace関数を用いて、文字列を変換しましょう。

f:id:Kyokuya_jao:20200627073125p:plain
 できました!!!
 これにて、ページ毎にセリフ表示を変え、またトップページでは時間帯によっても表示が変わる処理が完成しました。
 次回はさらに深堀り、セリフ数を増やしたり、日記をつける前と後でセリフが変わったり、日記をつけた日数に応じてセリフが変わったりするような機能を増やしていきましょう。
 それでは、今回はこの辺りで。

f:id:Kyokuya_jao:20200627073239p:plainf:id:Kyokuya_jao:20200627073244p:plain
罵ってもらうことだって可能さ!