Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
um jogo de Pquer
Caio Gonalves Raggi, 60849, Vincius Menezes Lourenoni, 67665
ELT 460 Inteligncia Computacional
Departamento de Engenharia Eltrica, Universidade Federal de Viosa, Viosa - MG
Resumo O presente trabalho consiste em utilizar tcnicas de
inteligncia computacional, no caso especfico, a tcnica de
inferncia fuzzy para tomada de decises em um jogo de cartas,
o Poker Texas Holdem. Afim de melhor visualizao criou-se
uma interface utilizando o software Matlab. Para testar e validar
o algoritmo desenvolvido utilizou-se o software PokerTH.
I.
III.
INTRODUO
II.
MATERIAIS E MTODOS
10
10 > > 4
4
OBJETIVOS
Muita ficha
Mdia ficha
Pouca ficha
Mo muito forte;
mo forte;
mo boa;
mo mdia;
mo fraca.
N de
jogadores
Fuzzy1
Fuzzy2
Fuzzy3
Fuzzy4
5 ou 6
Fuzzy5_6
Fold;
call/check;
raise BB;
raise 2BB;
all-in.
Entradas
Momento
Posio
FM
Stack/blind (ou
)
Ao do oponente
Variveis Lingusticas
Pr-flop, flop, turn e river
SB, BB, intermedirias e finais
Fraca, mdia, boa, forte e muito
forte
Muita ficha, mdia ficha e pouca
ficha
Fold, check, call, raise e re-raise.
Grupo
1
2
3
4
5
Jogo
Royal flush, straight flush,
four
Full house
Flush, sequncia
Trinca, dois pares
Um par, carta alta
IV.
Fora da mo
Mo muito forte
Mo forte
Mo boa
Mo mdia
Mo Fraca
RESULTADOS E DISCUSSO
Grupo
1
2
3
4
5
6
7
8
Jogo
AA, KK
QQ, JJ
TT, 99
AQ, AK, AJs, KQs, 88,
77
AJo, AT, KQo, KJs, 66,
55
A9s-A2s, KJo, KTs, QJs,
QTs, JTs, 44, 33, 22
A9o-A2o, KTo, QJo,
QTo, JTo, T9s, 98s, 87s,
76s, 65s, 54s
Demais jogos ou cartas
Fora da mo
Mo muito forte
Mo forte
Mo boa
Mo mdia
Mo Fraca
Jogador
Vitrias (%)
Call/check
Bet/raise
Aleatrio1
Aleatrio2
Fuzzy
0
0
0
0
8
Saiu depois de 3
jogadores (%)
32
36
4
16
68
CONCLUSO
Nmero de adversrios
5e6
Grupo de Mos
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
big blind
2 BB
2 BB
BB
call
call
big blind
2 BB
2 BB
BB
call
call
big blind
2 BB
2 BB
BB
call
call
big blind
2 BB
2 BB
BB
call
call
big blind
2 BB
2 BB
BB
call
call
big blind
BB
call
call
fold
fold
big blind
BB
call
call
fold
fold
big blind
BB
call
call
fold
fold
big blind
BB
call
call
fold
fold
big blind
BB
call
call
fold
fold
Nmero de adversrios
5e6
Grupo de Mos
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
big blind
2 BB
BB
BB
call
call
big blind
2 BB
BB
BB
call
call
big blind
2 BB
2 BB
BB
call
call
big blind
2 BB
2 BB
BB
call
call
big blind
2 BB
2 BB
BB
call
call
big blind
BB
call
call
fold
fold
big blind
BB
call
call
fold
fold
big blind
BB
call
call
fold
fold
big blind
BB
call
call
fold
fold
big blind
BB
call
call
fold
fold
Nmero de adversrios
5e6
Grupo de Mos
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
big blind
BB
call
call
call
call
big blind
BB
call
call
call
call
big blind
BB
call
call
call
call
big blind
2 BB
2 BB
BB
call
call
big blind
2 BB
2 BB
BB
call
call
big blind
call
call
fold
fold
fold
big blind
call
call
fold
fold
fold
big blind
call
call
fold
fold
fold
big blind
BB
call
call
fold
fold
big blind
BB
call
call
fold
fold
Nmero de adversrios
5e6
Grupo de Mos
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
final
2 BB
2 BB
BB
call
call
final
2 BB
2 BB
BB
call
call
final
2 BB
2 BB
BB
call
call
final
2 BB
2 BB
BB
call
call
final
2 BB
2 BB
BB
call
fold
final
BB
call
call
fold
fold
final
BB
call
call
fold
fold
final
BB
call
call
fold
fold
final
BB
call
call
fold
fold
final
BB
call
call
fold
fold
Nmero de adversrios
5e6
Grupo de Mos
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
final
2 BB
BB
BB
call
call
final
2 BB
BB
BB
call
call
final
2 BB
2 BB
BB
call
call
final
2 BB
2 BB
BB
call
call
final
2 BB
2 BB
BB
call
fold
final
BB
call
call
fold
fold
final
BB
call
call
fold
fold
final
BB
call
call
fold
fold
final
BB
call
call
fold
fold
final
BB
call
call
fold
fold
Nmero de adversrios
5e6
Grupo de Mos
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
Posio
Grupo 1
Grupo 2
Grupo 3
Grupo 4
Grupo 5 ou pior
final
BB
call
call
call
call
final
BB
call
call
call
call
final
BB
call
call
call
call
final
2 BB
2 BB
BB
call
call
final
2 BB
2 BB
BB
call
call
final
call
call
fold
fold
fold
final
call
call
fold
fold
fold
final
call
call
fold
fold
fold
final
BB
call
call
fold
fold
final
BB
call
call
fold
fold
INTERFACE
handles.posicao = str2double(pos(2));
guidata(hObject, handles);
function numadversarios(hObject, eventdata, handles)
numadv = get(hObject,'Tag'); % sendo as Tag's sao: AD1, AD2, AD3, AD4, AD5 e AD6
handles.numadversarios = str2double(numadv(3));
guidata(hObject, handles);
function acaooponente(hObject, eventdata, handles)
acaoop = get(hObject,'Tag'); % sendo as Tag's sao: O1_FOLD, O2_CHECK, O3_CALL O4_RAISE e
O5_RERAIS
handles.acaooponente = str2double(acaoop(2));
guidata(hObject, handles);
function edit_blind_Callback(hObject, eventdata, handles)
handles.blind = str2double(get(hObject,'string'));
assignin('base','blind',handles.blind);
if isnan(handles.blind)
errordlg('BLIND: Voc deve entrar com um valor numrico.','Invalid Input','modal')
uicontrol(hObject)
return
end
guidata(hObject, handles);
function edit_blind_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit_stack_Callback(hObject, eventdata, handles)
handles.stack = str2double(get(hObject,'string'));
assignin('base','stack',handles.stack);
if isnan(handles.stack)
errordlg('STACK: Voc deve entrar com um valor numrico.','Invalid Input','modal')
uicontrol(hObject)
return
end
guidata(hObject, handles);
function edit_stack_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function acao_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function jogo_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function pushbutton_jogar_Callback(hObject, eventdata, handles)
[FM, jogo] = qualificar(handles.cartas,handles.momento); % realiza a qualificao da
fora da mo
% e ainda retorna o jogo que temos
12
nb = divide(handles.stack,handles.blind);
set(handles.jogo, 'String', num2str(jogo)); % mostra qual jogo temos
% Se houverem 6 adversrios
if handles.numadversarios == 6
poker = readfis('poker5_6');
handles.fuzzy = evalfis([handles.momento handles.posicao FM nb
handles.acaooponente],poker,181);
if handles.fuzzy <= 1.5
agir = strcat('Fold');
elseif handles.fuzzy > 1.5 && handles.fuzzy
agir = strcat('Call/Check');
elseif handles.fuzzy > 2.5 && handles.fuzzy
agir = strcat('Call/Check');
elseif handles.fuzzy > 3.5 && handles.fuzzy
agir = strcat('Raise BB');
elseif handles.fuzzy > 4.5 && handles.fuzzy
agir = strcat('Raise 2BB');
elseif handles.fuzzy > 5.5
agir = strcat('All In');
end
set(handles.acao, 'String', num2str(agir));
% cartas = handles.cartas
% momento = handles.momento
% posicao = handles.posicao
% acao_oponente = handles.acaooponente
% Forca_mao = FM
% xBlinds = nb
end
<= 2.5
<= 3.5
<= 4.5
<= 5.5
% Se houverem 5 adversrios
if handles.numadversarios == 5
poker = readfis('poker5_6');
handles.fuzzy = evalfis([handles.momento handles.posicao FM nb
handles.acaooponente],poker,181);
if handles.fuzzy <= 1.5
agir = strcat('Fold');
elseif handles.fuzzy > 1.5 && handles.fuzzy
agir = strcat('Call/Check');
elseif handles.fuzzy > 2.5 && handles.fuzzy
agir = strcat('Call/Check');
elseif handles.fuzzy > 3.5 && handles.fuzzy
agir = strcat('Raise BB');
elseif handles.fuzzy > 4.5 && handles.fuzzy
agir = strcat('Raise 2BB');
elseif handles.fuzzy > 5.5
agir = strcat('All In');
end
set(handles.acao, 'String', num2str(agir));
% cartas = handles.cartas
% momento = handles.momento
% posicao = handles.posicao
% acao_oponente = handles.acaooponente
% Forca_mao = FM
% xBlinds = nb
end
<= 2.5
<= 3.5
<= 4.5
<= 5.5
% Se houverem 4 adversrios
if handles.numadversarios == 4
poker = readfis('poker4');
handles.fuzzy = evalfis([handles.momento handles.posicao FM nb
handles.acaooponente],poker,181);
13
<= 2.5
<= 3.5
<= 4.5
<= 5.5
% Se houverem 3 adversrios
if handles.numadversarios == 3
poker = readfis('poker3');
handles.fuzzy = evalfis([handles.momento handles.posicao FM nb
handles.acaooponente],poker,181);
if handles.fuzzy <= 1.5
agir = strcat('Fold');
elseif handles.fuzzy > 1.5 && handles.fuzzy
agir = strcat('Call/Check');
elseif handles.fuzzy > 2.5 && handles.fuzzy
agir = strcat('Call/Check');
elseif handles.fuzzy > 3.5 && handles.fuzzy
agir = strcat('Raise BB');
elseif handles.fuzzy > 4.5 && handles.fuzzy
agir = strcat('Raise 2BB');
elseif handles.fuzzy > 5.5
agir = strcat('All In');
end
set(handles.acao, 'String', num2str(agir));
% cartas = handles.cartas
% momento = handles.momento
% posicao = handles.posicao
% acao_oponente = handles.acaooponente
% Forca_mao = FM
% xBlinds = nb
end
<= 2.5
<= 3.5
<= 4.5
<= 5.5
% Se houverem 2 adversrios
if handles.numadversarios == 2
poker = readfis('poker2');
handles.fuzzy = evalfis([handles.momento handles.posicao FM nb
handles.acaooponente],poker,181);
if handles.fuzzy <= 1.5
agir = strcat('Fold');
elseif handles.fuzzy > 1.5 && handles.fuzzy <= 2.5
agir = strcat('Check');
elseif handles.fuzzy > 2.5 && handles.fuzzy <= 3.5
agir = strcat('Call');
elseif handles.fuzzy > 3.5 && handles.fuzzy <= 4.5
14
<= 2.5
<= 3.5
<= 4.5
<= 5.5
set(handles.carta23X,'Value',0);
set(handles.carta24X,'Value',0);
set(handles.carta25X,'Value',0);
set(handles.carta26X,'Value',0);
set(handles.carta27X,'Value',0);
set(handles.carta28X,'Value',0);
set(handles.carta29X,'Value',0);
set(handles.carta210,'Value',0);
set(handles.carta211,'Value',0);
set(handles.carta212,'Value',0);
set(handles.carta213,'Value',0);
% Limpa checkbox cartas PAUS
set(handles.carta31X,'Value',0);
set(handles.carta32X,'Value',0);
set(handles.carta33X,'Value',0);
set(handles.carta34X,'Value',0);
set(handles.carta35X,'Value',0);
set(handles.carta36X,'Value',0);
set(handles.carta37X,'Value',0);
set(handles.carta38X,'Value',0);
set(handles.carta39X,'Value',0);
set(handles.carta310,'Value',0);
set(handles.carta311,'Value',0);
set(handles.carta312,'Value',0);
set(handles.carta313,'Value',0);
% Limpa checkbox cartas ESPADAS
set(handles.carta41X,'Value',0);
set(handles.carta42X,'Value',0);
set(handles.carta43X,'Value',0);
set(handles.carta44X,'Value',0);
set(handles.carta45X,'Value',0);
set(handles.carta46X,'Value',0);
set(handles.carta47X,'Value',0);
set(handles.carta48X,'Value',0);
set(handles.carta49X,'Value',0);
set(handles.carta410,'Value',0);
set(handles.carta411,'Value',0);
set(handles.carta412,'Value',0);
set(handles.carta413,'Value',0);
% Zera a matriz cartas
handles.cartas = zeros(4,13);
guidata(hObject,handles)
2.
FUNES DE QUALIFICAO
end
naipado2 = lin(1) == 2 || lin(2) == 2 || lin(3) == 2 || lin(4) == 2;
mao_muito_forte = col(13) == 2 || col(12) == 2; % AA e KK
mao_forte = col(11) == 2 || col(10) == 2;% QQ e JJ
mao_boa = col(9) == 2 || col(8) == 2;% TT e 99
mao_media = col(13)+col(12) == 2 || col(13)+col(11) == 2 || ... % AK e AQ
((col(13)+col(10) == 2) && naipado2) || ((col(12)+col(11) == 2) && naipado2) ||
... % AJs e KQs
col(7) == 2 || col(6) == 2;% 88 e 77
if mao_muito_forte == 1
FM = 5;
jogo = 'AA ou KK';
elseif mao_forte == 1
FM = 4;
jogo = 'QQ ou JJ';
elseif mao_boa == 1
FM = 3;
jogo = 'TT ou 99';
elseif mao_media == 1
FM = 2;
jogo = 'AK/AQ/AJs/KQs/88/77';
else
FM = 1;
jogo = 'Mo Fraca';
end
%%%%% FIM DO PRE-FLOP %%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif momento == 2 % FLOP (5 CARTAS)
if lin(1)+lin(2)+lin(3)+lin(4) >= 6
errordlg('Mais de 5 cartas selecionadas.','ERROR!!!','modal');
elseif lin(1)+lin(2)+lin(3)+lin(4) <= 4
errordlg('Menos de 5 cartas selecionadas.','ERROR!!!','modal');
end
ordem_col = sort(col,'descend');
ordem_lin = sort(lin,'descend');
royal_flush = ((ordem_lin(1) == 5) && (col(13)+col(12)+col(11)+col(10)+col(9) ==
5));
straight_flush = ((ordem_lin(1) == 5) && ((col(12)+col(11)+col(10)+col(9)+col(8)
== 5) || ...
(col(11)+col(10)+col(9)+col(8)+col(7) ==
5) || ...
(col(10)+col(9)+col(8)+col(7)+col(6) ==
5) || ...
(col(9)+col(8)+col(7)+col(6)+col(5) ==
5) || ...
(col(8)+col(7)+col(6)+col(5)+col(4) ==
5) || ...
(col(7)+col(6)+col(5)+col(4)+col(3) ==
5) || ...
(col(6)+col(5)+col(4)+col(3)+col(2) ==
5) || ...
17
(col(5)+col(4)+col(3)+col(2)+col(1) ==
5) || ...
(col(4)+col(3)+col(2)+col(1)+col(13) ==
5)));
quadra = ordem_col(1) == 4;
full_house = ordem_col(1)+ordem_col(2) == 5;
flush = ((ordem_lin(1) == 5) && ((col(13)+col(12)+col(11)+col(10)+col(9) ~= 5) ||
...
(col(12)+col(11)+col(10)+col(9)+col(8)
~= 5) || ...
(col(11)+col(10)+col(9)+col(8)+col(7) ~=
5) || ...
(col(10)+col(9)+col(8)+col(7)+col(6) ~=
5) || ...
(col(9)+col(8)+col(7)+col(6)+col(5) ~=
5) || ...
(col(8)+col(7)+col(6)+col(5)+col(4) ~=
5) || ...
(col(7)+col(6)+col(5)+col(4)+col(3) ~=
5) || ...
(col(6)+col(5)+col(4)+col(3)+col(2) ~=
5) || ...
(col(5)+col(4)+col(3)+col(2)+col(1) ~=
5) || ...
(col(4)+col(3)+col(2)+col(1)+col(13) ~=
5)));
straight = ((ordem_lin(1) < 5) && ((col(13)==1 && col(12)==1 && col(11)== 1 &&
col(10)== 1 && col(9) == 1) || ...
(col(12)==1 && col(11)==1 && col(10)== 1 && col(9)== 1 && col(8) ==
1) || ...
(col(11)==1 && col(10)==1 && col(9)== 1 && col(8)== 1 && col(7) == 1)
|| ...
(col(10)==1 && col(9)==1 && col(8)== 1 && col(7)== 1 && col(6) == 1)
|| ...
(col(9)==1 && col(8)==1 && col(7)== 1 && col(6)== 1 && col(5) == 1)
|| ...
(col(8)==1 && col(7)==1 && col(6)== 1 && col(5)== 1 && col(4) == 1)
|| ...
(col(7)==1 && col(6)==1 && col(5)== 1 && col(4)== 1 && col(3) == 1)
|| ...
(col(6)==1 && col(5)==1 && col(4)== 1 && col(3)== 1 && col(2) == 1)
|| ...
(col(5)==1 && col(4)==1 && col(3)== 1 && col(2)== 1 && col(1) == 1)
|| ...
(col(4)==1 && col(3)==1 && col(2)== 1 && col(1)== 1 && col(13) ==
1)));
trinca = ordem_col(1) == 3;
dois_pares = (ordem_col(1) == 2) && (ordem_col(2) == 2);
um_par_maior_6 = col(13) == 2 || col(12) == 2 || col(11) == 2 || col(10) == 2 ||
...
col(9) == 2 || col(8) == 2 || col(7) == 2 || col(6) == 2;
um_par_menor_7 = col(5) == 2 || col(4) == 2 || col(3) == 2 || col(2) == 2 ||
col(1) == 2;
% restante uma carta alta
18
if royal_flush == 1
FM = 5;
jogo = 'Royal Flush';
elseif straight_flush == 1
FM = 5;
jogo = 'Straight Flush';
elseif quadra == 1
FM = 5;
jogo = 'Quadra';
elseif full_house == 1
FM = 4;
jogo = 'Full House';
elseif flush == 1
FM = 3;
jogo = 'Flush';
elseif straight == 1
FM = 3;
jogo = 'Straight';
elseif trinca == 1
FM = 2;
jogo = 'Trinca';
elseif dois_pares == 1
FM = 2;
jogo = '2 Pares';
elseif um_par_maior_6 == 1
FM = 1;
jogo = '1 Par Maior que 6';
elseif um_par_menor_7 == 1
FM = 1;
jogo = '1 Par Menor que 7';
else
FM = 1;
jogo = 'Nada Bom';
end
%%%%% FIM DO FLOP %%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif momento == 3 % TURN (6 CARTAS)
if lin(1)+lin(2)+lin(3)+lin(4) >= 7
errordlg('Mais de 6 cartas selecionadas.','ERROR!!!','modal');
elseif lin(1)+lin(2)+lin(3)+lin(4) <= 5
errordlg('Menos de 6 cartas selecionadas.','ERROR!!!','modal');
end
ordem_col = sort(col,'descend');
ordem_lin = sort(lin,'descend');
royal_flush = cartas(1,13)+cartas(1,12)+cartas(1,11)+cartas(1,10)+cartas(1,9) ==
5 || ...
cartas(2,13)+cartas(2,12)+cartas(2,11)+cartas(2,10)+cartas(2,9) ==
5 || ...
cartas(3,13)+cartas(3,12)+cartas(3,11)+cartas(3,10)+cartas(3,9) ==
5 || ...
cartas(4,13)+cartas(4,12)+cartas(4,11)+cartas(4,10)+cartas(4,9) ==
5;
straight_flush = cartas(1,12)+cartas(1,11)+cartas(1,10)+cartas(1,9)+cartas(1,8)
== 5 || ...
cartas(2,12)+cartas(2,11)+cartas(2,10)+cartas(2,9)+cartas(2,8)
== 5 || ...
cartas(3,12)+cartas(3,11)+cartas(3,10)+cartas(3,9)+cartas(3,8)
== 5 || ...
19
cartas(4,12)+cartas(4,11)+cartas(4,10)+cartas(4,9)+cartas(4,8)
== 5 || ... %
cartas(1,11)+cartas(1,10)+cartas(1,9)+cartas(1,8)+cartas(1,7) ==
5 || ...
cartas(2,11)+cartas(2,10)+cartas(2,9)+cartas(2,8)+cartas(2,7) ==
5 || ...
cartas(3,11)+cartas(3,10)+cartas(3,9)+cartas(3,8)+cartas(3,7) ==
5 || ...
cartas(4,11)+cartas(4,10)+cartas(4,9)+cartas(4,8)+cartas(4,7) ==
5 || ... %
cartas(1,10)+cartas(1,9)+cartas(1,8)+cartas(1,7)+cartas(1,6) ==
5 || ...
cartas(2,10)+cartas(2,9)+cartas(2,8)+cartas(2,7)+cartas(2,6) ==
5 || ...
cartas(3,10)+cartas(3,9)+cartas(3,8)+cartas(3,7)+cartas(3,6) ==
5 || ...
cartas(4,10)+cartas(4,9)+cartas(4,8)+cartas(4,7)+cartas(4,6) ==
5 || ... %
cartas(1,9)+cartas(1,8)+cartas(1,7)+cartas(1,6)+cartas(1,5) == 5
|| ...
cartas(2,9)+cartas(2,8)+cartas(2,7)+cartas(2,6)+cartas(2,5) == 5
|| ...
cartas(3,9)+cartas(3,8)+cartas(3,7)+cartas(3,6)+cartas(3,5) == 5
|| ...
cartas(4,9)+cartas(4,8)+cartas(4,7)+cartas(4,6)+cartas(4,5) == 5
|| ... %
cartas(1,8)+cartas(1,7)+cartas(1,6)+cartas(1,5)+cartas(1,4) == 5
|| ...
cartas(2,8)+cartas(2,7)+cartas(2,6)+cartas(2,5)+cartas(2,4) == 5
|| ...
cartas(3,8)+cartas(3,7)+cartas(3,6)+cartas(3,5)+cartas(3,4) == 5
|| ...
cartas(4,8)+cartas(4,7)+cartas(4,6)+cartas(4,5)+cartas(4,4) == 5
|| ... %
cartas(1,7)+cartas(1,6)+cartas(1,5)+cartas(1,4)+cartas(1,3) == 5
|| ...
cartas(2,7)+cartas(2,6)+cartas(2,5)+cartas(2,4)+cartas(2,3) == 5
|| ...
cartas(3,7)+cartas(3,6)+cartas(3,5)+cartas(3,4)+cartas(3,3) == 5
|| ...
cartas(4,7)+cartas(4,6)+cartas(4,5)+cartas(4,4)+cartas(4,3) == 5
|| ... %
cartas(1,6)+cartas(1,5)+cartas(1,4)+cartas(1,3)+cartas(1,2) == 5
|| ...
cartas(2,6)+cartas(2,5)+cartas(2,4)+cartas(2,3)+cartas(2,2) == 5
|| ...
cartas(3,6)+cartas(3,5)+cartas(3,4)+cartas(3,3)+cartas(3,2) == 5
|| ...
cartas(4,6)+cartas(4,5)+cartas(4,4)+cartas(4,3)+cartas(4,2) == 5
|| ... %
cartas(1,5)+cartas(1,4)+cartas(1,3)+cartas(1,2)+cartas(1,1) == 5
|| ...
cartas(2,5)+cartas(2,4)+cartas(2,3)+cartas(2,2)+cartas(2,1) == 5
|| ...
cartas(3,5)+cartas(3,4)+cartas(3,3)+cartas(3,2)+cartas(3,1) == 5
|| ...
cartas(4,5)+cartas(4,4)+cartas(4,3)+cartas(4,2)+cartas(4,1) == 5
|| ... %
cartas(1,4)+cartas(1,3)+cartas(1,2)+cartas(1,1)+cartas(1,13) ==
5 || ...
cartas(2,4)+cartas(2,3)+cartas(2,2)+cartas(2,1)+cartas(2,13) ==
5 || ...
cartas(3,4)+cartas(3,3)+cartas(3,2)+cartas(3,1)+cartas(3,13) ==
5 || ...
20
cartas(4,4)+cartas(4,3)+cartas(4,2)+cartas(4,1)+cartas(4,13) ==
5;
quadra = ordem_col(1) == 4;
full_house = (ordem_col(1)+ordem_col(2)) >= 5;
flush = ((ordem_lin(1) >= 5) && (royal_flush ~= 1 || straight_flush ~= 1));
straight = ((ordem_lin(1) < 5) && ((col(13)==1 && col(12)==1 && col(11)== 1 &&
col(10)== 1 && col(9) == 1) || ...
(col(12)==1 && col(11)==1 && col(10)== 1 && col(9)== 1 && col(8) ==
1) || ...
(col(11)==1 && col(10)==1 && col(9)== 1 && col(8)== 1 && col(7) == 1)
|| ...
(col(10)==1 && col(9)==1 && col(8)== 1 && col(7)== 1 && col(6) == 1)
|| ...
(col(9)==1 && col(8)==1 && col(7)== 1 && col(6)== 1 && col(5) == 1)
|| ...
(col(8)==1 && col(7)==1 && col(6)== 1 && col(5)== 1 && col(4) == 1)
|| ...
(col(7)==1 && col(6)==1 && col(5)== 1 && col(4)== 1 && col(3) == 1)
|| ...
(col(6)==1 && col(5)==1 && col(4)== 1 && col(3)== 1 && col(2) == 1)
|| ...
(col(5)==1 && col(4)==1 && col(3)== 1 && col(2)== 1 && col(1) == 1)
|| ...
(col(4)==1 && col(3)==1 && col(2)== 1 && col(1)== 1 && col(13) ==
1)));
trinca = (ordem_col(1) == 3);
dois_pares = (ordem_col(1) == 2) && (ordem_col(2) == 2);
um_par_maior_6 = (col(13) == 2 || col(12) == 2 || col(11) == 2 || col(10) == 2 ||
...
col(9) == 2 || col(8) == 2 || col(7) == 2 || col(6) == 2) && ordem_col(1) ==
2;
um_par_menor_7 = col(5) == 2 || col(4) == 2 || col(3) == 2 || col(2) == 2 ||
col(1) == 2;
% restante uma carta alta
if royal_flush == 1
FM = 5;
jogo = 'Royal Flush';
elseif straight_flush == 1
FM = 5;
jogo = 'Straight Flush';
elseif quadra == 1
FM = 5;
jogo = 'Quadra';
elseif full_house == 1
FM = 4;
jogo = 'Full House';
elseif flush == 1
FM = 3;
jogo = 'Flush';
elseif straight == 1
FM = 3;
jogo = 'Straight';
elseif trinca == 1
FM = 2;
21
jogo = 'Trinca';
elseif dois_pares == 1
FM = 2;
jogo = '2 Pares';
elseif um_par_maior_6 == 1
FM = 1;
jogo = '1 Par Maior que 6';
elseif um_par_menor_7 == 1
FM = 1;
jogo = '1 Par Menor que 7';
else
FM = 1;
jogo = 'Nada Bom';
end
%%%%% FIM DO TURN %%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
else % RIVER (7 CARTAS)
if lin(1)+lin(2)+lin(3)+lin(4) >= 8
errordlg('Mais de 7 cartas selecionadas.','ERROR!!!','modal');
elseif lin(1)+lin(2)+lin(3)+lin(4) <= 6
errordlg('Menos de 7 cartas selecionadas.','ERROR!!!','modal');
end
ordem_col = sort(col,'descend');
ordem_lin = sort(lin,'descend');
royal_flush = cartas(1,13)+cartas(1,12)+cartas(1,11)+cartas(1,10)+cartas(1,9) ==
5 || ...
cartas(2,13)+cartas(2,12)+cartas(2,11)+cartas(2,10)+cartas(2,9) ==
5 || ...
cartas(3,13)+cartas(3,12)+cartas(3,11)+cartas(3,10)+cartas(3,9) ==
5 || ...
cartas(4,13)+cartas(4,12)+cartas(4,11)+cartas(4,10)+cartas(4,9) ==
5;
straight_flush = cartas(1,12)+cartas(1,11)+cartas(1,10)+cartas(1,9)+cartas(1,8)
== 5 || ...
cartas(2,12)+cartas(2,11)+cartas(2,10)+cartas(2,9)+cartas(2,8)
== 5 || ...
cartas(3,12)+cartas(3,11)+cartas(3,10)+cartas(3,9)+cartas(3,8)
== 5 || ...
cartas(4,12)+cartas(4,11)+cartas(4,10)+cartas(4,9)+cartas(4,8)
== 5 || ... %
cartas(1,11)+cartas(1,10)+cartas(1,9)+cartas(1,8)+cartas(1,7) ==
5 || ...
cartas(2,11)+cartas(2,10)+cartas(2,9)+cartas(2,8)+cartas(2,7) ==
5 || ...
cartas(3,11)+cartas(3,10)+cartas(3,9)+cartas(3,8)+cartas(3,7) ==
5 || ...
cartas(4,11)+cartas(4,10)+cartas(4,9)+cartas(4,8)+cartas(4,7) ==
5 || ... %
cartas(1,10)+cartas(1,9)+cartas(1,8)+cartas(1,7)+cartas(1,6) ==
5 || ...
cartas(2,10)+cartas(2,9)+cartas(2,8)+cartas(2,7)+cartas(2,6) ==
5 || ...
cartas(3,10)+cartas(3,9)+cartas(3,8)+cartas(3,7)+cartas(3,6) ==
5 || ...
cartas(4,10)+cartas(4,9)+cartas(4,8)+cartas(4,7)+cartas(4,6) ==
5 || ... %
cartas(1,9)+cartas(1,8)+cartas(1,7)+cartas(1,6)+cartas(1,5) == 5
|| ...
22
cartas(2,9)+cartas(2,8)+cartas(2,7)+cartas(2,6)+cartas(2,5) == 5
|| ...
cartas(3,9)+cartas(3,8)+cartas(3,7)+cartas(3,6)+cartas(3,5) == 5
|| ...
cartas(4,9)+cartas(4,8)+cartas(4,7)+cartas(4,6)+cartas(4,5) == 5
|| ... %
cartas(1,8)+cartas(1,7)+cartas(1,6)+cartas(1,5)+cartas(1,4) == 5
|| ...
cartas(2,8)+cartas(2,7)+cartas(2,6)+cartas(2,5)+cartas(2,4) == 5
|| ...
cartas(3,8)+cartas(3,7)+cartas(3,6)+cartas(3,5)+cartas(3,4) == 5
|| ...
cartas(4,8)+cartas(4,7)+cartas(4,6)+cartas(4,5)+cartas(4,4) == 5
|| ... %
cartas(1,7)+cartas(1,6)+cartas(1,5)+cartas(1,4)+cartas(1,3) == 5
|| ...
cartas(2,7)+cartas(2,6)+cartas(2,5)+cartas(2,4)+cartas(2,3) == 5
|| ...
cartas(3,7)+cartas(3,6)+cartas(3,5)+cartas(3,4)+cartas(3,3) == 5
|| ...
cartas(4,7)+cartas(4,6)+cartas(4,5)+cartas(4,4)+cartas(4,3) == 5
|| ... %
cartas(1,6)+cartas(1,5)+cartas(1,4)+cartas(1,3)+cartas(1,2) == 5
|| ...
cartas(2,6)+cartas(2,5)+cartas(2,4)+cartas(2,3)+cartas(2,2) == 5
|| ...
cartas(3,6)+cartas(3,5)+cartas(3,4)+cartas(3,3)+cartas(3,2) == 5
|| ...
cartas(4,6)+cartas(4,5)+cartas(4,4)+cartas(4,3)+cartas(4,2) == 5
|| ... %
cartas(1,5)+cartas(1,4)+cartas(1,3)+cartas(1,2)+cartas(1,1) == 5
|| ...
cartas(2,5)+cartas(2,4)+cartas(2,3)+cartas(2,2)+cartas(2,1) == 5
|| ...
cartas(3,5)+cartas(3,4)+cartas(3,3)+cartas(3,2)+cartas(3,1) == 5
|| ...
cartas(4,5)+cartas(4,4)+cartas(4,3)+cartas(4,2)+cartas(4,1) == 5
|| ... %
cartas(1,4)+cartas(1,3)+cartas(1,2)+cartas(1,1)+cartas(1,13) ==
5 || ...
cartas(2,4)+cartas(2,3)+cartas(2,2)+cartas(2,1)+cartas(2,13) ==
5 || ...
cartas(3,4)+cartas(3,3)+cartas(3,2)+cartas(3,1)+cartas(3,13) ==
5 || ...
cartas(4,4)+cartas(4,3)+cartas(4,2)+cartas(4,1)+cartas(4,13) ==
5;
quadra = ordem_col(1) == 4;
full_house = (ordem_col(1)+ordem_col(2)) >= 5;
flush = ((ordem_lin(1) >= 5) && (royal_flush ~= 1 || straight_flush ~= 1));
straight = ((ordem_lin(1) < 5) && ((col(13)==1 && col(12)==1 && col(11)== 1 &&
col(10)== 1 && col(9) == 1) || ...
(col(12)==1 && col(11)==1 && col(10)== 1 && col(9)== 1 && col(8) ==
1) || ...
(col(11)==1 && col(10)==1 && col(9)== 1 && col(8)== 1 && col(7) == 1)
|| ...
(col(10)==1 && col(9)==1 && col(8)== 1 && col(7)== 1 && col(6) == 1)
|| ...
(col(9)==1 && col(8)==1 && col(7)== 1 && col(6)== 1 && col(5) == 1)
|| ...
23
nblinds = stack/blind;
if nblinds >= 10
nb = 1;
elseif (4<nblinds)&&(nblinds<10)
nb = 2;
else
nb = 3;
end
divide = nb;
end
3.
% JOGADOR ALEATRIO
clc;
A = 10*rand(1);
if A >= 20/3
acao = 'Fold'
elseif (A<(20/3) && A>(10/3))
acao = 'Call/Check'
else
acao = 'Bet/Raise'
end
25