전략이 있는 가위바위보 게임을 짤려고 합니다.

teami(a,b,ay,ao) 라는 메인프로그램이 있구요 a는 나 혹은 상대방..b는 게임횟수 ay는 저의 1*100 행렬

ao는 상대방의 1*100행렬 인데 저와 상대방의 알고리즘의 확률을 받아서 메인프로그램에서 가위바위보를

정해서 경기를 붙은후에 승패무를 다시 알고리즘으로 보내줍니다..이것을 100번하게되는데요..

제 생각은 대전할 때마다 상대의 습관을 파악해서 더 강해지는 가위바위보 게임을 만들고 싶습니다.

만약에 가위,바위,보를 각각 0,1,2  로 나타내고 컴퓨터와 사람의 대전을 표로 만들면

 

컴퓨터/사람     가위(0)   바위(1)   보(2)

가위(0)                   -              X            O

바위(1)                  O             -              X

보(2)                      X             O               -

 

대충 이렇게 나올껀데요...컴퓨터와 사람에 각각 0~2의 데이터를 넣으면

0비김

1컴퓨터승

2컴퓨터패

 

로 판정할수 있잖아요...이제 보 다음에 주먹을 내는 경향이 강하다와 같이 전에 자신이 낸 손에 따라서

다음 손을 정하는 습관이 있다고 생각을 하고 짜고 싶어요. 상대방이 바로 전에 낸손을 M 지금 낸손을

M+1라고 할때 가위바위보를 계속수행한다면

 

      M/M+1      가위(0)   바위(1)   보(2)

가위(0)                 2             5           1

바위(1)                 1              2          4

보(2)                     3             1          1

 

같이 전략표가 나오게 된다고 생각하고 저의 알고리즘은 이것을 보고 상대가 바위 다음에 보(4),가위

다음에 바위(5), 보다음에 가위(3)를 내는 경향이 있다는것을 파악하고 상대의 이전 손이 바위면

이번에는 보를 낼 가능성이 높아서 가위를 내면 이길 가능성이 높게된다는게 제 생각입니다.

 

그런데 이걸 구현하려는데 쉽지가 않네요...랜드로 [0,1] 에서 숫자를 뽑아서 가위바위보 지정하고

while loop 를 사용할려고 해도 M과 M+1 관계를 다시 3*3행렬에 적용시키는 것을 잘모르겠습니다.

 

주 생각은 상대방의 습관을 파악해서 내가 이길확률을 더 높여서 메인프로그램에서 이길 수를 내게

하는게 생각인데...상당히 어려워서 도움을 받고자 연락드립니다..

메인프로그램입니다..ㅜㅡ
clc
clear all

a1 = 1;
a2 = 2;

m_pay1 = []; m_pay2 = [];

cy = zeros(100,1);
co = zeros(100,1);

for i = 1:99
    j = i - 1;
    b = j;
   
    p = team1(a,b,cy,co);
    p = team2(a,b,co,cy);
   
    r1 = rand(1);
    r2 = rand(1);
   
    if (r1 < p1(1,1))
        cy(i,1) = 0;
    elseif (r1 < p1(2,1))
        cy(i,1) = 1;
    else
        cy(i,1) = 2;
    end
   
    if (r2 < p2(1,1))
        co(i,1) = 0;
    elseif (r2 < p2(2,1))
        co(i,1) = 1;
    else
        co(i,1) = 2;
    end
    
   
    %% --- payment --- %%
   
    if (cy(i,1) == 0 && co(i,1) == 0)
        pay1 = 0; pay2 = 0;
    elseif (cy(i,1) == 0 && co(i,1) == 1)
        pay1 = 100; pay2 = -100;
    elseif (cy(i,1) == 0 && co(i,1) == 2)
        pay1 = -100; pay2 = 100;
    elseif (cy(i,1) == 1 && co(i,1) == 0)
        pay1 = -100; pay2 = 100;
    elseif (cy(i,1) == 1 && co(i,1) == 1)
        pay1 = 0; pay2 = 0;
    elseif (cy(i,1) == 1 && co(i,1) == 2)
        pay1 = 100; pay2 = -100;
    elseif (cy(i,1) == 2 && co(i,1) == 0)
        pay1 = 100; pay2 = -100;
    elseif (cy(i,1) == 2 && co(i,1) == 1)
        pay1 = -100; pay2 = 100;
    elseif (cy(i,1) == 2 && co(i,1) == 2)
        pay1 = 0; pay2 = 0;
    end
   
    m_pay1 = [m_pay1 pay1];
    m_pay2 = [m_pay2 pay2];
   
end

s_pay1 = sum(m_pay1)
s_pay2 = sum(m_pay2)