Buscar

Script de Programa com Interface Gráfica (GUI) - Jogo Mastermind (Matlab)

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

%------------------------------------Jogo "Mastermind" com interface gráfica - VP"--------------------------------------------%
%O jogo Mastermind é jogado por duas pessoas (nesse caso, uma pessoa e o
%computador): uma pessoa monta uma "senha" (um arranjo de
%cores/números/símbolos etc.), no caso o programa, e a outra pessoa (você)
%tenta adivinhar a combinação correta, através de dicas de quem montou a
%senha, em um número limitado de tentativas. As dicas dadas pelo criador da
%senha (programa) são: número de "bolas brancas" (marcador indicando
%elemento correto em posição errada, ou seja, o elemento foi utilizado, mas
%não na posição em que você propôs) e número de "bolas pretas" (marcador
%que indica que você propôs o elemento certo na posição certa), mas não
%indica qual a posição de cada marcador; você terá que adivinhar a quem
%cada marcador se refere! Você adivinhará a senha correta, portanto, quando
%todas as posições receberem uma bola preta, indicando que todos os
%elementos estão corretos e devidamente posicionados.
%Neste programa, você pode escolher entre opções pré-determinadas de
%dificuldade (quais os dígitos que farão parte da senha: de 0 a 3, de 0 a 5
%ou de 0 a 9; qual o tamanho da senha a ser adivinhada: de 4 a 10 dígitos;
%e qual o número limite de tentativas: de 6 a 15 tentativas); você pode
%reconfigurar o programa e gerar uma nova senha a qualquer momento com os
%novos parâmetros, zerar o placar livremente, e solicitar uma nova senha
%com os mesmos parâmetros (caso você tenha adivinhado a senha anterior, não
%haverá penalidades, mas caso você tenha expirado o número de tentativas ou
%tenha "desistido" de adivinhar, contará como uma derrota ("fracasso")). O
%programa também exibirá suas tentativas anteriores para a mesma senha,
%para facilitar a visualização da combinação correta. A senha gerada só
%será revelada caso você adivinhe corretamente, ou expire as tentativas
function varargout = Mastermind(varargin)
% MASTERMIND MATLAB code for Mastermind.fig
% MASTERMIND, by itself, creates a new MASTERMIND or raises the existing
% singleton*.
%
% H = MASTERMIND returns the handle to a new MASTERMIND or the handle to
% the existing singleton*.
%
% MASTERMIND('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in MASTERMIND.M with the given input arguments.
%
% MASTERMIND('Property','Value',...) creates a new MASTERMIND or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Mastermind_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Mastermind_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Mastermind
% Last Modified by GUIDE v2.5 14-Mar-2017 14:05:57
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
 'gui_Singleton', gui_Singleton, ...
 'gui_OpeningFcn', @Mastermind_OpeningFcn, ...
 'gui_OutputFcn', @Mastermind_OutputFcn, ...
 'gui_LayoutFcn', [] , ...
 'gui_Callback', []);
if nargin && ischar(varargin{1})
 gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
 gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before Mastermind is made visible.
function Mastermind_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Mastermind (see VARARGIN)
% Choose default command line output for Mastermind
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes Mastermind wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = Mastermind_OutputFcn(hObject, eventdata, handles) 
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on selection change in num_usados.
function num_usados_Callback(hObject, eventdata, handles)
global alg_max; %Declarando como variável "global" (para que outras funções consigam usar também)
% hObject handle to num_usados (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
algarismos=cellstr(get(hObject,'String')); %Analisando a opção escolhida pelo usuário ("dificuldade")
algarismos=algarismos(get(hObject,'Value')); 
if strcmp(algarismos,'0-3') %Atribuindo o valor máximo de acordo com a escolha do usuário (compara se os strings são iguais; "inconveniência" do formato cell)
 alg_max=3;
elseif strcmp(algarismos,'0-5')
 alg_max=5;
elseif strcmp(algarismos,'0-9')
 alg_max=9;
else
 alg_max=0;
end
% Hints: contents = cellstr(get(hObject,'String')) returns num_usados contents as cell array
% contents{get(hObject,'Value')} returns selected item from num_usados
% --- Executes during object creation, after setting all properties.
function num_usados_CreateFcn(hObject, eventdata, handles)
% hObject handle to num_usados (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
 set(hObject,'BackgroundColor','white');
end
% --- Executes on selection change in num_digitos.
function num_digitos_Callback(hObject, eventdata, handles)
% hObject handle to num_digitos (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global tam_senha; %Declarando como variável "global" (para que outras funções consigam usar também)
n_dig=cellstr(get(hObject,'String')); %Analisando a opção escolhida pelo usuário (número de dígitos da senha)
n_dig=n_dig(get(hObject,'Value')); 
if strcmp(n_dig,'4') %Atribuindo o valor máximo de acordo com a escolha do usuário (compara se os strings são iguais; "inconveniência" do formato cell)
 tam_senha=4;
elseif strcmp(n_dig,'5')
 tam_senha=5;
elseif strcmp(n_dig,'6')
 tam_senha=6;
elseif strcmp(n_dig,'7')
 tam_senha=7;
elseif strcmp(n_dig,'8')
 tam_senha=8;
elseif strcmp(n_dig,'9')
 tam_senha=9;
elseif strcmp(n_dig,'10')
 tam_senha=10;
else
 tam_senha=0;
end
% Hints: contents = cellstr(get(hObject,'String')) returns num_digitos contents as cell array
% contents{get(hObject,'Value')} returns selected item from num_digitos
% --- Executes during object creation, after setting all properties.
function num_digitos_CreateFcn(hObject, eventdata, handles)
% hObject handle to num_digitos (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on
Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
 set(hObject,'BackgroundColor','white');
end
% --- Executes on selection change in num_rodadas.
function num_rodadas_Callback(hObject, eventdata, handles)
% hObject handle to num_rodadas (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global rodadas; %Declarando como variável "global" (para que outras funções consigam usar também)
n_rod=cellstr(get(hObject,'String')); %Analisando a opção escolhida pelo usuário (número de rodadas)
n_rod=n_rod(get(hObject,'Value')); 
if strcmp(n_rod,'6') %Atribuindo o valor máximo de acordo com a escolha do usuário (compara se os strings são iguais; "inconveniência" do formato cell)
 rodadas=6;
elseif strcmp(n_rod,'7')
 rodadas=7;
elseif strcmp(n_rod,'8')
 rodadas=8;
elseif strcmp(n_rod,'9')
 rodadas=9;
elseif strcmp(n_rod,'10')
 rodadas=10;
elseif strcmp(n_rod,'11')
 rodadas=11;
elseif strcmp(n_rod,'12')
 rodadas=12;
elseif strcmp(n_rod,'13')
 rodadas=13;
elseif strcmp(n_rod,'14')
 rodadas=14;
elseif strcmp(n_rod,'15')
 rodadas=15;
else
 rodadas=0;
end
% Hints: contents = cellstr(get(hObject,'String')) returns num_rodadas contents as cell array
% contents{get(hObject,'Value')} returns selected item from num_rodadas
% --- Executes during object creation, after setting all properties.
function num_rodadas_CreateFcn(hObject, eventdata, handles)
% hObject handle to num_rodadas (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
 set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in placar_zero.
function placar_zero_Callback(hObject, eventdata, handles)
% hObject handle to placar_zero (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
set(handles.num_suc,'String','0'); %Atribuir 0 aos dois placares
set(handles.num_frac,'String','0');
% --- Executes on button press in conf_comb.
function conf_comb_Callback(hObject, eventdata, handles)
% hObject handle to conf_comb (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global tentativa; %Declarando como variável "global" (para que outras funções consigam usar também)
global lista_tent; %Declarando como variável "global" (para que outras funções consigam usar também)
global rodada_atual; %Declarando como variável "global" (para que outras funções consigam usar também)
global senha_revel; %Declarando como variável "global" (para que outras funções consigam usar também)
global rodadas; %Declarando como variável "global" (para que outras funções consigam usar também)
global num_b; %Declarando como variável "global" (para que outras funções consigam usar também)
global num_p; %Declarando como variável "global" (para que outras funções consigam usar também)
global tam_senha; %Declarando como variável "global" (para que outras funções consigam usar também)
if (rodada_atual<=rodadas) %"Travar" se acabarem as tentativas
excl=[]; %Auxiliar para verificação de "bolas brancas e pretas" (excluir da verificação as casas já verificadas)
num_b=0; %Contadores do número de "bolas"
num_p=0;
tentativa=num2str(tentativa); %Converter para texto
excl_p=[];
for i=1:tam_senha %Contagem de bolas pretas
 if tentativa(1,i)==senha_revel(1,i) %Verificar se os dígitos correspondem ("bolas pretas")
 num_p=num_p+1; %Fazer a contagem
 excl=[excl i]; %Marcar as casas onde ocorrem as "bolas pretas"
 excl=sort(excl); %Colocar as casas em ordem
 excl_p=excl; %Marcar a posição das "bolas pretas"
 end
end
for i=1:tam_senha %Contagem de bolas brancas
 if isempty(find(i==excl_p)) %Se o valor i não está na lista de excluídos
 for j=1:tam_senha %Percorrer a senha
 if isempty(find(j==excl)) %A casa a ser analisada não pode ter recebido nenhuma marcação
 if tentativa(1,i)==senha_revel(1,j) %Casa "livre" corresponde
 num_b=num_b+1; %Fazer a contagem
 excl=[excl j]; %Adicionar às casas marcadas e organizar o vetor
 excl=sort(excl);
 j=tam_senha; %Não permitir contar correspondências múltiplas
 end
 end
 end
 end
end
dicas=strcat(num2str(num_p),'-',num2str(num_b));
set(handles.cont_p_b,'String',dicas); %Exibir a contagem de "bolas pretas e brancas"
tent_lista=strcat(num2str(rodada_atual),'-',tentativa,'(',num2str(num_p),'-',num2str(num_b),')'); %Montar os dados da tentativa
tent_lista=cellstr(tent_lista);
lista_tent=[tent_lista lista_tent]; %Acrescentar à lista de tentativas feitas (mais recentes primeiro)
set(handles.lista_tentativas,'String',lista_tent);
if num_p<tam_senha %Se a senha ainda não foi descoberta
 rodada_atual=rodada_atual+1; %Rodada seguinte
 if rodada_atual>rodadas %A senha não foi descoberta e expirou o número de tentativas
 frac=str2num(get(handles.num_frac,'String'))+1; %Acrescentar 1 ponto ao placar de fracasso
 set(handles.num_frac,'String',frac);
 frac=0; %Zerar o auxiliar
 set(handles.exib_senha,'String',senha_revel); %Revelar a senha
 end
else %Se foi...
 rodada_atual=rodadas+1; %Travar o botão
 suc=str2num(get(handles.num_suc,'String'))+1; %Acrescentar 1 ponto ao placar de sucesso
 set(handles.num_suc,'String',suc);
 suc=0; %Zerar o auxiliar
 set(handles.exib_senha,'String',senha_revel); %Revelar a senha
end
end
% --- Executes on button press in recomecar.
function recomecar_Callback(hObject, eventdata, handles)
% hObject handle to recomecar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global lista_tent; %Declarando como variável "global" (para que outras funções consigam usar também)
global num_p; %Declarando como variável "global" (para que outras funções consigam usar também)
global num_b; %Declarando como variável "global" (para que outras funções consigam usar também)
global tam_senha; %Declarando como variável "global" (para que outras funções consigam usar também)
global rodadas; %Declarando como variável "global" (para que outras funções consigam usar também)
global alg_max; %Declarando como variável "global" (para que outras funções consigam usar também)
global rodada_atual; %Declarando como variável "global" (para que outras funções consigam usar também)
global senha_secr; %Declarando como variável "global" (para que outras funções consigam usar também)
global senha_revel; %Declarando como variável "global" (para que outras funções consigam usar também)
global dicas; %Declarando como variável "global" (para que outras funções consigam usar também)
lista_tent=[]; %Limpar a lista de tentativas
set(handles.lista_tentativas,'String',lista_tent);
if rodada_atual<=rodadas&&num_p<tam_senha %Se a pessoa não excedeu o limite de tentativas e nem conseguiu adivinhar a senha, contar como desistência (fracasso)
 frac=str2num(get(handles.num_frac,'String'))+1; %Acrescentar 1 ponto ao placar de fracasso
 set(handles.num_frac,'String',frac);
end
rodada_atual=1; %Reinicia o contador de rodadas
senha_secr=[]; %Auxiliar para contagem correta de * que substituirão os dígitos da senha
senha_revel=[]; %Auxiliar que receberá a senha gerada automaticamente
for i=1:tam_senha
 senha_secr=[senha_secr,'*'];
%Um asterisco para cada dígito da senha
 senha_revel=strcat(senha_revel,num2str(round(rand*alg_max))); %Geração da senha a ser descoberta
end
num_p=0; %Zerar a contagem de bolas para a nova tentativa
num_b=0;
dicas=strcat(num2str(num_p),'-',num2str(num_b));
set(handles.cont_p_b,'String',dicas); %Exibir a contagem de "bolas pretas e brancas"
set(handles.exib_senha,'String',senha_secr); %Fazer a exibição da senha "ocultada" ter o mesmo número de dígitos da senha real
% --- Executes on selection change in lista_tentativas.
function lista_tentativas_Callback(hObject, eventdata, handles)
% hObject handle to lista_tentativas (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global lista_tent; %Declarando como variável "global" (para que outras funções consigam usar também)
set(handles.lista_tentativas,'String',lista_tent);
% Hints: contents = cellstr(get(hObject,'String')) returns lista_tentativas contents as cell array
% contents{get(hObject,'Value')} returns selected item from lista_tentativas
% --- Executes during object creation, after setting all properties.
function lista_tentativas_CreateFcn(hObject, eventdata, handles)
% hObject handle to lista_tentativas (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: listbox controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
 set(hObject,'BackgroundColor','white');
end
function entrada_tent_Callback(hObject, eventdata, handles)
% hObject handle to entrada_tent (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global tentativa; %Declarando como variável "global" (para que outras funções consigam usar também)
tentativa=get(hObject,'String'); %Trabalhar como string; mais fácil de separar os dígitos e comparar
% Hints: get(hObject,'String') returns contents of entrada_tent as text
% str2double(get(hObject,'String')) returns contents of entrada_tent as a double
% --- Executes during object creation, after setting all properties.
function entrada_tent_CreateFcn(hObject, eventdata, handles)
% hObject handle to entrada_tent (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
 set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in conf_config.
function conf_config_Callback(hObject, eventdata, handles)
% hObject handle to conf_config (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global alg_max; %Declarando como variável "global" (para que outras funções consigam usar também)
global tam_senha; %Declarando como variável "global" (para que outras funções consigam usar também)
global rodada_atual; %Declarando como variável "global" (para que outras funções consigam usar também)
global senha_secr; %Declarando como variável "global" (para que outras funções consigam usar também)
global senha_revel; %Declarando como variável "global" (para que outras funções consigam usar também)
global lista_tent; %Declarando como variável "global" (para que outras funções consigam usar também)
global num_p; %Declarando como variável "global" (para que outras funções consigam usar também)
global num_b; %Declarando como variável "global" (para que outras funções consigam usar também)
verif1=cellstr(get(handles.num_rodadas,'String')); %Verificar a escolha do número de rodadas
verif1=verif1(get(handles.num_rodadas,'Value'));
verif2=cellstr(get(handles.num_digitos,'String')); %%Verificar a escolha do número de dígitos
verif2=verif2(get(handles.num_digitos,'Value'));
verif3=cellstr(get(handles.num_usados,'String')); %Verificar a escolha dos dígitos utilizáveis
verif3=verif3(get(handles.num_usados,'Value'));
if (strcmp(verif1,'Selecione')||(strcmp(verif2,'Selecione')))||(strcmp(verif3,'Selecione')) %verificar se o usuário selecionou todos os parâmetros
 h=msgbox('Escolha os seus parâmetros!'); %Alerta para o usuário
 else
 rodada_atual=1; %Reinicia o contador de rodadas
 senha_secr=[]; %Auxiliar para contagem correta de * que substituirão os dígitos da senha
 senha_revel=[]; %Auxiliar que receberá a senha gerada automaticamente
 for i=1:tam_senha
 senha_secr=[senha_secr,'*']; %Um asterisco para cada dígito da senha
 senha_revel=strcat(senha_revel,num2str(round(rand*alg_max))); %Geração da senha a ser descoberta
 end
 lista_tent=[]; %Limpar a lista de tentativas
 set(handles.lista_tentativas,'String',lista_tent);
 set(handles.exib_senha,'String',senha_secr); %Fazer a exibição da senha "ocultada" ter o mesmo número de dígitos da senha real
 num_p=0; %Zerar a contagem de bolas para a nova tentativa
 num_b=0;
 dicas=strcat(num2str(num_p),'-',num2str(num_b));
 set(handles.cont_p_b,'String',dicas); %Exibir a contagem de "bolas pretas e brancas"
 h=msgbox('Parâmetros configurados!'); %A escolha foi bem-sucedida!
end

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais