# Paste: payoff matrices for ayo

Author: Rex ml Tue, 2 Jun 2009 19:13:01
Plain Text |
```% A toolkit for calculating payoff matrices
% for the game of Ayo.
% Created by Rex Ford, 2009
% James Madison University

% my bin numbering system...
% this would be 3 choices:
%   6 5 4
%   1 2 3

board=zeros(1,15);

% are these two positions on the same side?
function is_it =same_side(board,x,y)
is_it=false;
n=length(board)/2;
if(x>n && y>n)
is_it=true;
end
if(x<=n && y<=n)
is_it=true;
end
end

% calculates the number of stones obtained
% by making a certain choice on a board
function [score,board] = advantage(board,choice)
number_there=board(choice);
board(choice)=0;
pos=choice;
for x=1:number_there
pos=mod(pos,length(board))+1;
if(pos==choice)
pos=mod(pos,length(board))+1;
end
board(pos)=board(pos)+1;
end
% now, we must steal!
score=0;
while((board(pos)==2 || board(pos)==3) && ~same_side(board,choice,pos))
score=score+board(pos);
board(pos)=0;
pos=pos-1;
if(pos==0)
pos=length(board);
end
end
end

% calculates the payoff matrix
% for a given board
function payoff=pom(board)
n=length(board)/2;
payoff1=zeros(n,n);
for x=1:n
for y=1:n
payoff1(x,y)=p;
end
end

payoff2=zeros(n,n);
for x=1:n
for y=1:n
payoff2(x,y)=q;
end
end

payoff3=zeros(n,n);
for x=1:n
for y=1:n
payoff3(x,y)=payoff1(x,y)-payoff2(x,y);
end
end
payoff1
payoff2
payoff3
end

function show_board(board)
n=length(board)/2;
[board(n+1:2*n);board(1:n)]
end

% This is the cadillac of payoff matrices
% for Ayo. The numbering is shifted for q's turns
% so that both players are choosing within one range.
function play
p_score = 0;
q_score = 0;
choices = input("how many bins on each side?");
stones = input("how many stones in each bin?");

the_board=stones*ones(1,choices*2);
while(sum(abs(the_board(1:choices)))*sum(abs(the_board(choices+1:2*choices)))~=0)
% the dashboard...
pom(the_board)
show_board(the_board);
p_score
q_score
p=input("what choice does p make? ");
while(p<1 || p>choices || the_board(p)==0)
p=input("Pick another hole. ");
end
p_score=p_score+p_theft;
q=input("what choice does q make? ");
while(q<1 || q>choices || the_board(q)==0)
q=input("Pick another hole. ");
end
q=q+choices; % this shifts q's choice to their side