「恋するプログラム」のMac向け読み替え その2

前回に続き、Macユーザーが恋するプログラムを勉強する上で、読み替えや説明が必要だったことをメモして行く。

  • CHAPTER 6-1
    サンプル(KOISURU_PROGRAM/sample/emotion)は、GUI絡みの変更のため、Macでは関係ない。

  • CHAPTER 6-3
    サンプル(KOISURU_PROGRAM/sample/emotion2)に以下の変更を行った。

    1. GUIで使われるbmpsフォルダ、noby.rbおよびnobycanvas.rbは破棄する。
    2. dicsフォルダにある2つの辞書をテキストエディタで開き、文字コードをUTF-8に、改行コードをLFに変換する。
    3. dictionary.rbは改行コードを変換する。
    4. responder.rbは文字コードと改行コードを変換する。
    5. unmo.rbは改行コードを変換、さらに以下の変更を行う。

      unmo.rb 1〜2行目

      require 'responder'
      require 'dictionary'

      require_relative 'responder'
      require_relative 'dictionary'

      に書き換える。

    6. 前回のCHAPTER 3-2での読み替えで作成したproto.rbをコピーしておく。
  • CHAPTER 6-4
    サンプル(KOISURU_PROGRAM/sample/emotion2)を動かすのは上記変更だが、番外編としてコードの理解に手間取ったことをメモしておく。

    1. dictionary.rb PatternItemクラス

      SEPARATORの正規表現の意味 – 後方参照
      SEPARATOR = /^((-?\d+)##)?(.*)$/      # (2)
      
      # SEPARATORの正規表現の意味
      #
      # 「^」は、行頭にマッチ
      # 「-?」は、-(マイナス)が1回あるか、ないケース
      # 「\d+」は、10進数が1回以上
      # 「-?」と「\d+」を組み合わせて正負の10進数が1回以上を意味する
      # (-?\d+)で、それをキャプチャ($2)すると同時に、この()でグループ化
      # ((-?\d+)##)で、「正負の10進数##」をキャプチャ($1)すると同時に、この()でグループ化
      # その次の「?」で、((-?\d+)##)が1回あるか、ないケース
      # (.*)は任意の一文字「.」の0回以上の繰り返し「*」をキャプチャ($3)すると同時に、
      # この()でグループ化
      # 「$」は行末にマッチ
      # 最終的に行頭が「±a」で始まり、行末が「任意の文字列」で終わる「±a##任意の文字列」
      # を意味し、「±a」「±a##」「任意の文字列」をキャプチャする。
      #
      # $& =「±a##任意の文字列」*マッチした文字列
      # $1 =「±a##」*マッチした部分文字列1
      # $2 =「±a」*マッチした部分文字列2
      # $3 = 「任意の文字列」*マッチした部分文字列3
      #
      # $付きの文字で取得したもの=あとで利用するもの=後方参照
    2. dictionary.rb PatternItemクラス initializeメソッド

      initializeメソッドの意味
      # パターンは入力、フレーズは応答
      def initialize(pattern, phrases)
      
          # SEPARATORでpatternをマッチング
          SEPARATOR =~ pattern
      
          # @modifyと@patternに$2を整数化したものと$3を代入(後方参照)
          @modify, @pattern = $2.to_i, $3
      
          # 応答の処理。
          @phrases = []
      
          # 「|」で区切られた応答候補をバラし
          phrases.split('|').each do |phrase|
      
              # SEPARATORでphraseをマッチング
              SEPARATOR =~ phrase
      
              # 必要機嫌値と応答のハッシュに格納
              @phrases.push({'need'=>$2.to_i, 'phrase'=>$3})
          end
      end
    3. dictionary.rb PatternItemクラス suitable?メソッド

      suitable?メソッドの意味
      def suitable?(need, mood)             # (8)
          return true if need == 0
          if need > 0
      
              # 戻り値はmoodがneedより大きいかを判定した結果の真偽値
              return mood > need
          else
      
              # 戻り値はmoodがneedより小さいかを判定した結果の真偽値
              return mood < need
          end
      end

今回は短いが、話の区切りの都合上ここまでとする。その3に続く。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL