Created
February 19, 2017 02:24
-
-
Save coryhofmann/f93412ca4c9b88b8b46d19f5c4d3300f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%LCR.m | |
%By Cory Hofmann | |
%Last Updated: 2017-01-24 | |
% | |
%This code is designed to run through a pre-determined number of LCR games | |
%for a pre-determined number of players. Designed to output game | |
%statistics for further analysis. | |
% | |
%Function call -> output = LCR(number of players, number of games) | |
% | |
%Output: data = [Winner #, deciding dice roll [1L, 2C, 3R], # rolls] | |
function data = LCR(n, n2) | |
for game = 1:n2 %active game | |
%initialize variables for each new game | |
score(1:n,1) = 3; %users start with three tokens | |
count = 0; | |
for round = 1:100*n %guess upper bound for number of rounds | |
for i = 1:n %active player | |
dice = score(i); %how many tokens? | |
if dice == 0 %to next player, if current player has no tokens | |
continue | |
end | |
for j = 1:dice %how many rolls they take | |
roll = randi(6,1,1); %1=L, 2=C, 3=R, 4,5,6=NO MOVE | |
%in case you want to display them! | |
if roll == 1 | |
%disp('L') | |
elseif roll == 2 | |
%disp('C') | |
elseif roll == 3 | |
%disp('R') | |
else | |
%disp('DOT!') | |
end | |
if roll == 1 && i == 1 | |
%if player 1 rolls L, last player gets the token | |
score(i) = score(i) - 1; | |
score(n) = score(n) + 1; | |
elseif roll == 1 && i ~= 1 | |
score(i) = score(i) - 1; | |
score(i-1) = score(i-1) + 1; %player behind you gets it | |
elseif roll == 2 %token goes to center, no one gets it | |
score(i) = score(i) - 1; | |
elseif roll == 3 && i == n | |
%if last person rolls a R, player 1 gets the token | |
score(i) = score(i) - 1; | |
score(1) = score(1) + 1; | |
elseif roll == 3 && i ~= n | |
score(i) = score(i) - 1; | |
score(i+1) = score(i+1) + 1; | |
end | |
if j >= 3 %Can't roll more than three dice in a turn | |
break | |
end | |
end | |
if sum(score) == max(score) %is game over? | |
count = count + 1; | |
[maximum, index] = max(score); | |
%store the game stats | |
data(game,1) = index; %winner # | |
data(game,2) = roll; %deciding roll (L, C, or R) | |
data(game,3) = count; %number of total rolls | |
break | |
else | |
count = count + 1; | |
end | |
end | |
if sum(score) == max(score) | |
[maximum, index] = max(score); | |
break | |
else | |
end | |
end | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment