プログラミングスクールで学んだ知識を使ってアウトプットしていきます。
今回は『Ruby』を使って、アニメ『PSYCHO-PASS』に登場する機械銃、ドミネーターを模したプログラムを作成しました。
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して上部のプログラムに移ります。
該当ユーザーじゃなかった場合、エラー表示させプログラムが終了します。
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
デコンポーザーなので特に犯罪係数を測ることもなく、対象を完全排除します。
以上になります。
もし何かアウトプットする場合は、このように自分の好きなジャンルや欲しいもので作成すると良いと思います。
何事も楽しみましょう。
コメント