Help with speciality dice simulator

1 view (last 30 days)
Erik
Erik on 14 Apr 2011
OK, so I'm trying my best to make a dice simulator for a role playing game I'm going to be hosting, which will plug into various other time-saving programs later on. This is the basics:
n number of six-sided dice are rolled and the results are added together. If all the dice except one (at most) are ones, that counts as a "perfect" hit. (If only one die is rolled, either a one, two or three counts as a perfect hit.) If two or more dice are sixes, that counts as a "fumble".
Now, I'm kinda new to programming, and have only taken a smaller course in it, and I hold no illusions to my version of the simulator being the best there is, or even just GOOD! If you have a better way of doing it, I don't mind you telling me =P
Here's the code for the dice function:
function [DieResult Special] = t6(n)
DieResult = 0;
NumberOnes = 0;
NumberTwos = 0;
NumberThrees = 0;
NumberSixes = 0;
for k=1:n % Rolls the dice
DieRoll = floor(rand()*6) + 1;
if DieRoll == 1
NumberOnes = NumberOnes + 1;
elseif DieRoll == 2
NumberTwos = NumberTwos + 1;
elseif DieRoll == 3
NumberThrees = NumberThrees + 1;
elseif DieRoll == 6
NumberSixes = NumberSixes + 1;
end
DieResult = DieResult + DieRoll;
end
if NumberOnes >= n - 1 && n >= 2 % Check fumble / perfect hit
Special = 1;
elseif NumberOnes == 1 || NumberTwos == 1 || NumberThrees == 1 && n == 1
Special = 1;
elseif NumberSixes >= 2
Special = 2;
else
Special = 0;
end
Now, I seem to be getting far too many perfect hits. For example, I can get a result of 8 (perfect) when only rolling two dice (n=2), which should not be possible. I've tried reading through all the code in search of what I've done wrong, but I can't find it!
Thanks in advance, any help is greatly appreciated!

Accepted Answer

Matt Fig
Matt Fig on 14 Apr 2011
From what I can understand, your code could become:
function [DieResult Special] = t6(n)
D = floor(rand(1,n)*6) + 1;
DieResult = sum(D);
Special = 0; % For now...
if sum(D==1)>=(n-1) || (n==1 && D<=3)
disp('A perfect hit')
Special = 1;
elseif sum(D==6)>=2
disp('A fumble')
Special = 2;
end
  1 Comment
Erik
Erik on 15 Apr 2011
Thanks a lot! That sure was a much simpler program, good thing you people actually know this stuff ^^

Sign in to comment.

More Answers (0)

Categories

Find more on Just for fun in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!