Since I've gotten the go-ahead from Christer, here's a little newbie app
I just wrote and am looking for advice on how to better write:
=begin
=Author & Maintainer
Matthew A. Feadler
http://matthew.feadler.com
=Description
arschar.rb guides the user through the process of rolling attributes
for
an Ars Magica character using v4 rules.
=Copyright
This software is Copyright 2005 Matthew A. Feadler. All rights
reserved.
Do as you like with it, as long as you don't claim to have written it.
And, there is certainly no warranty hereabout, express or implied.
=Version
arschar.rb 0.1 2005/Nov/30
=end
system("clear")
#BEGINCLASSDEFS
#Classname: Die
#Purpose: Provide arbitrarily-sided die functionality
#Notes: Only 6-sided dice display from 1, all others from 0
class Die
def initialize(sides)
@sides = sides
roll
if @sides == 6
@currentFace += 1
end
@currentFace
end
def roll
@currentFace = rand(@sides)
@currentFace
end
def showing
@currentFace
end
end
#ENDCLASSDEFS
#BEGINMETHODDEFS
#Roll 2 10-sided die and subtract 2nd from 1st to determine pair total
def rollAttributePair
rolls = Array.new
rolls.push(Die.new(10).roll)
rolls.push(Die.new(10).roll)
if (rolls[0] == 0) or (rolls[1] == 0)
total = 0
return total
else
total = (rolls[0] - rolls[1])
return total
end
end
#Obtain user allocation of scores and validate against AM rules
def getScore(total,attr)
goodAnswer = false
while goodAnswer == false
print " Enter score for " + attr + ": "
userInput = gets.chomp.strip.to_i
if (userInput < 0) and (total > 0)
puts " You rolled positively; no negatives for this pair."
goodAnswer = false
elsif (userInput > 0) and (total < 0)
puts " You rolled negatively; no positives for this pair."
goodAnswer = false
elsif userInput > 4
puts " Rolled scores cannot be higher than 4."
goodAnswer = false
elsif userInput < -4
puts " Rolled scores cannot be lower than 4."
goodAnswer = false
else
goodAnswer = true
end
end
return userInput
end
#ENDMETHODDEFS
#BEGINVARIABLEDEFS
#Init Array to hold shortnames of the 8 Attributes
attributeShortNames = Array.new
attributeShortNames[0,7]=["Int", "Per", "Str", "Sta", "Pre", "Com",
"Dex", "Qik"]
#Init Array to hold fullnames of the 8 Attributes
attributeFullNames = Array.new
attributeFullNames[0,7]=["Intelligence","Perception","Strength","Stamina","Presence","Communication","Dexterity","Quickness"]
#Init Hash to hold shortname/fullname pairs for the 8 Attributes
attributeNameMap = Hash.new
count = 0
attributeShortNames.each do |name|
attributeNameMap[name]= attributeFullNames[count]
count += 1
end
#Init Hash to hold name/value pairs for character Attributes
#charAttributes = {'Int' => 0, 'Per' => 0, 'Str' => 0, 'Sta' => 0, 'Pre'
=> 0, 'Com' => 0, 'Dex' => 0, 'Qik' => 0}
charAttributes = Hash.new(0)
attributeShortNames.each do |name|
charAttributes[name]= 0
end
#ENDVARIABLEDEFS
#BEGINMAIN
x = 0
y = 1
while (x <= 6) and (y <= 7)
attr0 = attributeShortNames[x]
attr1 = attributeShortNames[y]
full0 = attributeNameMap[attr0]
full1 = attributeNameMap[attr1]
puts "Now rolling for the " + full0 + " and " + full1 + " pair..."
total = rollAttributePair
if total == 0
puts " You rolled a zero for this pair. Both " + attr0 + " and " +
attr1 + " will be set to zero."
charAttributes[attr0]= 0
charAttributes[attr1]= 0
elsif total > 0
puts " You rolled a +" + total.to_s + " for this pair."
puts " Please choose scores which are >= 0, <= 4, and which add up
to " + total.to_s + "."
goodAnswer = false
while goodAnswer == false
temp = Array.new
val0 = getScore(total,attr0)
val1 = getScore(total,attr1)
if (val0 + val1) == total
charAttributes[attr0]= val0
charAttributes[attr1]= val1
goodAnswer = true
else
puts " Your scores add up to more than " + total.to_s + ".
Please try again."
goodAnswer = false
end
end
else
puts " You rolled a " + total.to_s + " for this pair."
puts " Please, choose scores which are <= 0, >= -4, and which add
up to " + total.to_s + "."
goodAnswer = false
while goodAnswer == false
temp = Array.new
val0 = getScore(total,attr0)
val1 = getScore(total,attr1)
if (val0 + val1) == total
charAttributes[attr0]= val0
charAttributes[attr1]= val1
goodAnswer = true
else
puts " Your scores add up to more than " + total.to_s + ".
Please try again."
goodAnswer = false
end
end
end
x += 2
y += 2
puts
end
#Print charAttributes
attributeShortNames.each do |attr|
puts attr.to_s + ": " + charAttributes[attr].to_s
end
#Pause for user input before exit
puts
print "Press Enter to exit..."
gets
#ENDMAIN
Thanks to all in advance!
-Matthew
···
--
Posted via http://www.ruby-forum.com/.