Baixe o app para aproveitar ainda mais
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
Compartilhar