% 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 [p,board2]=advantage(board,x); for y=1:n q=advantage(board2,y+n); payoff1(x,y)=p; end end payoff2=zeros(n,n); for x=1:n [p,board2]=advantage(board,x); for y=1:n q=advantage(board2,y+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_theft,the_board]=advantage(the_board,p); 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 [q_theft,the_board]=advantage(the_board,q); q_score=q_score+q_theft; end show_board(the_board); p_score q_score end