【Ruby】学習アウトプットその1

【Ruby】学習アウトプットその1 未分類
Pocket

プログラミングスクールで学んだ知識を使ってアウトプットしていきます。

 

 

今回は『Ruby』を使って、アニメ『PSYCHO-PASS』に登場する機械銃、ドミネーターを模したプログラムを作成しました。

 

class Dominator

 

 def initialize
  puts “公安局 刑事課所属 使用許諾確認”
  gets
  puts “適正ユーザーです”
  gets
  puts “現在の執行モードは ノンリーサル パラライザー”
  gets
  puts “落ち着いて照準を合わせ 対象を無力化してください”
  gets
  mode = “パラライザー”
  dominator(mode)
 end

 

 def dominator(mode)
  puts “\n現在の執行モード:#{mode}”
  puts “[1]ドミネーターを向ける”
  puts “[2]終了する”
  input = gets.to_i
  if input == 1
   scan(mode)
  elsif input == 2
   exit
  else
  puts “\n不適切な行動を確認しました\n任務に集中してください”
  gets
  dominator(mode)
  end
 end

 

 def scan(mode)
  probability = rand(100)
  if probability >= 0 && probability < 40
   not_execution(mode)
  elsif probability >= 40 && probability < 70
   execution_paralyzer(mode)
  elsif probability >= 70 && probability < 90
   execution_eliminater(mode)
  elsif probability >= 90
   execution_decomposer(mode)
  end
 end

 

 def not_execution(mode)
  pp = rand(100)
  puts “\n犯罪係数#{pp}”
  gets
  puts “執行対象ではありません トリガーをロックします”
  gets
  mode = “パラライザー”
  dominator(mode)
 end

 

 def execution_paralyzer(mode)
  pp = rand(100..299)
  puts “\n犯罪係数#{pp}”
  gets
  if mode == “パラライザー”
   puts “執行対象です セーフティを解除します\n\n”
  else
   mode = “パラライザー”
   puts “執行モード ノンリーサル パラライザー”
   gets
   puts “落ち着いて照準を合わせ 対象を制圧してください\n\n”
  end
  puts “[執行]”
  gets
  dominator(mode)
 end

 

 def execution_eliminater(mode)
  pp = rand(300..899)
  puts “\n犯罪係数#{pp}”
  gets
  if mode == “エリミネーター”
   puts “執行対象です セーフティを解除します\n\n”
  else
   mode = “エリミネーター”
   puts “執行モード リーサル エリミネーター”
   gets
   puts “慎重に照準を合わせ 対象を排除してください\n\n”
  end
  puts “[執行]”
  gets
  dominator(mode)
 end

 

 def execution_decomposer(mode)
  mode = “デコンポーザー”
  puts “\n対象の脅威判定が更新されました”
  gets
  puts “執行モード デストロイ デコンポーザー”
  gets
  puts “対象を完全排除します ご注意ください\n\n”
  puts “[排除]”
  gets
  dominator(mode)
 end
end

 

shepherd = [“宜野座伸元”, “常森朱”, “霜月美佳”]
hound = [“狡噛慎也”, “征陸智己”, “縢秀星”, “六合塚弥生”]

 

puts “携帯型心理診断 鎮圧執行システム”
gets
puts “ドミネーター起動しました”
gets
puts “ユーザー認証入力待機…”
user = gets.chomp
if shepherd.include?(user)
 puts “\nユーザー認証 #{user} 監視官”
elsif hound.include?(user)
 puts “\nユーザー認証 #{user} 執行官”
else
 puts”\nエラー\n\n不正ユーザーです トリガーをロックします”
 exit
end
gets
dominator = Dominator.new

 

 

 

 

上記プログラムには以下の機能があります。

 

  • ユーザー認証
  • ランダムで犯罪係数を測定し、値に応じて執行モードを変更する

 

ひとつひとつ見ていきます。

 

shepherd = [“宜野座伸元”, “常森朱”, “霜月美佳”]
hound = [“狡噛慎也”, “征陸智己”, “縢秀星”, “六合塚弥生”]

 

ユーザーを配列に代入します。shepherdには監視官、houndには執行官の名前を入れておきます。

 

 

puts “携帯型心理診断 鎮圧執行システム”
gets
puts “ドミネーター起動しました”
gets
puts “ユーザー認証入力待機…”
user = gets.chomp
if shepherd.include?(user)
 puts “\nユーザー認証 #{user} 監視官”
elsif hound.include?(user)
 puts “\nユーザー認証 #{user} 執行官”
else
 puts”\nエラー\n\n不正ユーザーです トリガーをロックします”
 exit
end
gets
dominator = Dominator.new

 

プログラムを動かすとドミネーター起動時の音声をputsで出力しています。エンターを押して読み進められるよう間にgetsを挟んでいます。
実際のドミネーターではないので手動入力でユーザー認証させます。
if文とinclude?を使い、入力されたユーザーと配列内のユーザーが一致しているか調べ、該当するならそれぞれ監視官、もしくは執行官と出力した上で、Dominatorクラスをnewして上部のプログラムに移ります。
該当ユーザーじゃなかった場合、エラー表示させプログラムが終了します。

 

 

class Dominator

 

 def initialize
  puts “公安局 刑事課所属 使用許諾確認”
  gets
  puts “適正ユーザーです”
  gets
  puts “現在の執行モードは ノンリーサル パラライザー”
  gets
  puts “落ち着いて照準を合わせ 対象を無力化してください”
  gets
  mode = “パラライザー”
  dominator(mode)
 end

 

文章出力後、modeにパラライザーを代入しdominator関数に引数として渡します。

 

 

 def dominator(mode)
  puts “\n現在の執行モード:#{mode}”
  puts “[1]ドミネーターを向ける”
  puts “[2]終了する”
  input = gets.to_i
  if input == 1
   scan(mode)
  elsif input == 2
   exit
  else
  puts “\n不適切な行動を確認しました\n任務に集中してください”
  gets
  dominator(mode)
  end
 end

 

現在のモードを表示し、1の入力でscan関数を動かし、2の入力で終了させます。

それ以外のものが入力されたら注意され、また入力待機に戻ります。

 

 

def scan(mode)
  probability = rand(100)
  if probability >= 0 && probability < 40
   not_execution(mode)
  elsif probability >= 40 && probability < 70
   execution_paralyzer(mode)
  elsif probability >= 70 && probability < 90
   execution_eliminater(mode)
  elsif probability >= 90
   execution_decomposer(mode)
  end
 end

 

犯罪係数の測定をするのですが、単純に0~899あたりでランダムで表示させるとモードに大きな偏りが起きるので、簡単に確率を操作します。

randで擬似乱数を作り、約40%の確率でnot_execution(犯罪係数0~99を表示させる)関数を、約30%でexecution_paralyzer関数、約20%でexecution_eliminater関数、約10%でexecution_decomposer関数を動かします。

 

 

def not_execution(mode)
  pp = rand(100)
  puts “\n犯罪係数#{pp}”
  gets
  puts “執行対象ではありません トリガーをロックします”
  gets
  mode = “パラライザー”
  dominator(mode)
 end

 

not_execution関数が動いたら、再度randで犯罪係数0~99の間の値を取得し、犯罪係数を表示し執行対象でないことを説明、モードをパラライザーに変更してdominatorに戻ります。

 

 

def execution_paralyzer(mode)
  pp = rand(100..299)
  puts “\n犯罪係数#{pp}”
  gets
  if mode == “パラライザー”
   puts “執行対象です セーフティを解除します\n\n”
  else
   mode = “パラライザー”
   puts “執行モード ノンリーサル パラライザー”
   gets
   puts “落ち着いて照準を合わせ 対象を制圧してください\n\n”
  end
  puts “[執行]”
  gets
  dominator(mode)
 end

 

execution_paralyzer関数とexecution_eliminater関数の処理はほぼ同じです。

犯罪係数を測定しモードが現在のモードと一緒なら簡易表示で執行、違う場合、モード変形からの流れを表示し執行します。

 

 

def execution_decomposer(mode)
  mode = “デコンポーザー”
  puts “\n対象の脅威判定が更新されました”
  gets
  puts “執行モード デストロイ デコンポーザー”
  gets
  puts “対象を完全排除します ご注意ください\n\n”
  puts “[排除]”
  gets
  dominator(mode)
 end
end

 

デコンポーザーなので特に犯罪係数を測ることもなく、対象を完全排除します。

 

 


 

以上になります。

 

もし何かアウトプットする場合は、このように自分の好きなジャンルや欲しいもので作成すると良いと思います。

何事も楽しみましょう。

コメント

タイトルとURLをコピーしました