Ruby 簡単システム その3

Ruby 簡単システム その3

グローバル変数を使いすぎだったのでメンバに変更しました
普通に$を消すとうまいこと動作しなかったんですが
それローカル変数ですねw
classを作ってそのメンバにして委譲したら上手くいきました
メンバなのでGCの対象にもなりそう
追記b:変数の名前をリファクタしました
追記c:デフォルトキーを設定しました
:改行出力の箇所を変更しました

# encoding: UTF-8
# 以下はサンプルプログラム
# SCENARIO_TEST_01c_R02.rb
# 追記b:変数の名前をリファクタしました
# 追記c:デフォルトキーを設定しました
# :改行出力の箇所を変更しました
# Ruby動作2.6で確認
 require 'io/console'
 class Sys_Vars
# ボタンが押された時にこれらの変数をselected_btnextに代入して
# メインルーチンにジャンプする
 attr_accessor :next_1
   attr_accessor :next_2
# これがtrueになると終了する
 attr_accessor :exit
# ボタンを押して選択される選択肢のID
 attr_accessor :selected_next
   def initialize()
     @next_1 = "a"
     @next_2 = "a"
     @exit = false
     @selected_next = "a"
     @def_push_key = "z"
   end
   def set_def_push_key arg
     @def_push_key = arg
   end
   def get_def_push_key arg = nil
     if arg == nil
       return @def_push_key
     end
     return arg
   end
 end
# ここからメインルーチン
 class Main
   def initialize()
     @sv = Sys_Vars.new()
   end
   def run_main
     tmp_ch = "?"
     while 1
       if @sv.exit == true then break end
       case@sv.selected_next
       when "a" then
         @sv.next_1 = "aa"
         @sv.next_2 = "ab"
         print("zキーかxキーを押してください\n")
         print("終了:qキー")
         while 1
           tmp_ch = get_getc()
           if tmp_ch == "z"
             @sv.selected_next = @sv.next_1
             print("\n\n")
             break
           elsif tmp_ch == "x"
             @sv.selected_next = @sv.next_2
             print("\n\n")
             break
           elsif tmp_ch == @sv.get_def_push_key("q")
             @sv.exit = true
             print("\n\n")
             print("QUIT")
             tmp_ch = get_getc()
             break
           end
         end # end of while B
       when "aa" then
         @sv.next_1 = "a"
         print("あなたはzキーを押しましたね\n")
         print("NEXT:zキー")
         while 1
           tmp_ch = get_getc()
           if tmp_ch == @sv.get_def_push_key
             @sv.selected_next = @sv.next_1
             print("\n\n")
             break
           end
         end # end of while C
       when "ab" then
         @sv.next_1 = "a"
         print("あなたはxキーを押しましたね\n")
         print("NEXT:zキー")
         while 1
           tmp_ch = get_getc()
           if tmp_ch == @sv.get_def_push_key
             @sv.selected_next = @sv.next_1
             print("\n\n")
             break
           end
         end # end of while D
       end # end of case
     end # end of while A
   end # end of method
 end # end of class
 def get_getc
   $stdin.raw do |io|
     ch = io.getc
     print ch
     return ch
   end
 end
 m=Main.new()
 m.run_main

batake_lab

コメントは受け付けていません。