Advertisement
Guest User

dice.rb

a guest
Apr 21st, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.78 KB | None | 0 0
  1. gen=Random.new()
  2.  
  3. puts "Usage: <times>d<size>(+<mod>), add \"drop low\" or \"drop hi\" followed by amount of dice to drop to do so. 'q' to quit."
  4. while (input=gets().chomp)!='q'
  5.     if (cmd=/(?<roll>(?<times>\d+)[dD](?<die>\d+))\s*(?<add>(?:\s*[\+|\-]\s*\d+)*)?\s*(?:(?<drop>drop)\s*(?<dropmod>l|h)\w*\s*(?<dropN>\d)\s*\z|\z)/.match(input))!=nil
  6.         dice=Array.new()
  7.         cmd['times'].to_i.times do
  8.             cmd['die'].to_i!=0 ? dice.push(gen.rand(cmd['die'].to_i)+1) : dice.push(0)
  9.         end
  10.         dice=dice.sort
  11.        
  12.         output=cmd['roll'] + ": "
  13.         sum=0
  14.        
  15.         for i in 0..dice.size-1
  16.             if i!=dice.size-1
  17.                 output = output + dice[i].to_s + ", "
  18.             else
  19.                 output = output + dice[i].to_s
  20.             end
  21.                 sum=sum+dice[i]
  22.         end
  23.        
  24.         if cmd['drop']!=nil
  25.             output=output + "; "
  26.             if cmd['dropN'].to_i>=dice.size
  27.                 output=output + "dropped all dice, result 0."
  28.             else
  29.                 output=output + "dropping " + (cmd['dropN']=='1' ? "the" : cmd['dropN']) + (cmd['dropmod']=='l' ? " lowest" : " highest") + (cmd['dropN']==1 ? " die; " : " dice; ")
  30.                 cmd['dropmod']=='l' ? dice=dice.drop(cmd['dropN'].to_i) : dice.pop(cmd['dropN'].to_i)
  31.                 sum=0
  32.                 for i in 0..dice.size-1
  33.                     if i!=dice.size-1
  34.                         output = output + dice[i].to_s + ", "
  35.                     else
  36.                         output = output + dice[i].to_s
  37.                     end
  38.                     sum=sum+dice[i]
  39.                 end
  40.             end
  41.         end
  42.         output=output + "; total " + sum.to_s
  43.        
  44.         addition=cmd['add'].gsub(/\s+/, "")
  45.         if addition!=""
  46.             add=addition.scan(/\+|\-|\d+/)
  47.             output=output + addition + "="
  48.            
  49.             i=0
  50.             while i<add.size-1
  51.                 if add[i]=='+'
  52.                     sum=sum+add[i+1].to_i
  53.                 else
  54.                     sum=sum-add[i+1].to_i
  55.                 end
  56.                 i=i+2
  57.             end
  58.             output=output+sum.to_s
  59.         end
  60.        
  61.         puts output
  62.     else
  63.         puts "Invalid format! Please use the format <times>d<size>(+<mod>)(\"drop lo/hi\")"
  64.     end
  65. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement