Ruby 簡単システム その4

# encoding: UTF-8
# 以下はサンプルプログラム
# SCENARIO_TEST_02b_R02.rb
# 追記b:変数の名前をリファクタしました
# :デフォルトキーを設定しました
# 追記c:改行出力の箇所を変更しました
# Ruby動作2.6で確認
 require 'io/console'
 class Sys_Vars
# ボタンが押された時にこれらの変数をselected_nextに代入して
# メインルーチンにジャンプする
 attr_accessor :next_1
   attr_accessor :next_2
   attr_accessor :next_3
   attr_accessor :next_4
   attr_accessor :next_5
   attr_accessor :next_6
   attr_accessor :next_7
   attr_accessor :next_8
# これがtrueになると終了する
 attr_accessor :exit
# ボタンを押して選択される選択肢のID
 attr_accessor :selected_next
   def initialize()
     @next_1 = "a"
     @next_2 = "a"
     @next_3 = "a"
     @next_4 = "a"
     @next_5 = "a"
     @next_6 = "a"
     @next_7 = "a"
     @next_8 = "a"
     @exit = false
     @selected_next = "a"
     @def_push_key = " "
   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"
         @sv.next_3 = "ac"
         @sv.next_4 = "ad"
         @sv.next_5 = "ae"
         @sv.next_6 = "af"
         @sv.next_7 = "ag"
         @sv.next_8 = "ah"
         print("zキーかxキーかcキーかvキーか\n")
         print("aキーかsキーかdキーかfキーを押してください\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 == "c"
             @sv.selected_next = @sv.next_3
             print("\n\n")
             break
           elsif tmp_ch == "v"
             @sv.selected_next = @sv.next_4
             print("\n\n")
             break
           elsif tmp_ch == "a"
             @sv.selected_next = @sv.next_5
             print("\n\n")
             break
           elsif tmp_ch == "s"
             @sv.selected_next = @sv.next_6
             print("\n\n")
             break
           elsif tmp_ch == "d"
             @sv.selected_next = @sv.next_7
             print("\n\n")
             break
           elsif tmp_ch == "f"
             @sv.selected_next = @sv.next_8
             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:spaceキー")
         key_push_next @sv.next_1
       when "ab" then
         @sv.next_1 = "a"
         print("あなたはxキーを押しましたね\n")
         print("NEXT:spaceキー")
         key_push_next @sv.next_1
       when "ac" then
         @sv.next_1 = "a"
         print("あなたはcキーを押しましたね\n")
         print("NEXT:spaceキー")
         key_push_next @sv.next_1
       when "ad" then
         @sv.next_1 = "a"
         print("あなたはvキーを押しましたね\n")
         print("NEXT:spaceキー")
         key_push_next @sv.next_1
       when "ae" then
         @sv.next_1 = "a"
         print("あなたはaキーを押しましたね\n")
         print("NEXT:spaceキー")
         key_push_next @sv.next_1
       when "af" then
         @sv.next_1 = "a"
         print("あなたはsキーを押しましたね\n")
         print("NEXT:spaceキー")
         key_push_next @sv.next_1
       when "ag" then
         @sv.next_1 = "a"
         print("あなたはdキーを押しましたね\n")
         print("NEXT:spaceキー")
         key_push_next @sv.next_1
       when "ah" then
         @sv.next_1 = "a"
         print("あなたはfキーを押しましたね\n")
         print("NEXT:spaceキー")
         key_push_next @sv.next_1
       end # end of case
     end # end of while A
   end # end of method
   def get_getc
     $stdin.raw do |io|
       ch = io.getc
       print ch
       return ch
     end
   end
   def key_push_next p_next
     while 1
       tmp_ch = get_getc()
       if tmp_ch == @sv.get_def_push_key
         @sv.selected_next = p_next
         print("\n\n")
         break
       end
     end # end of while
   end
 end
 m=Main.new()
 m.run_main