2014-02-12 58 views
0

我正在嘗試編寫一個hang子手遊戲的函數。該函數將接收一串猜測字和一串猜測字母。一個輸出是每個字母后的一個字符串,另一個輸出應該是與字不匹配的一串字母(我們稱之爲錯過的字母),最後一個輸出是遊戲的結果。如果我們得到六個以上的字母不匹配這個詞,那麼輸出結果就是'你輸了!',如果這些字母在六次錯誤猜測之前匹配,那麼輸出結果就是'你贏了!'。如果錯過的字母數量未達到6,則輸出結果應該是'您有剩餘的生命<#'。猜出的字母總是會被放在較低的位置,並且被猜出的字可以是大寫和小寫的組合。因此,如果字是字的Matlab'和猜測字母是「aeiot」輸出應該是 輸入迭代後打印每一行

word='MatLab' 
letter='aeiot' 

輸出

board=['_''a''_''_''a''_'; 
     '_''a''_''_''a''_'; 
     '_''a''_''_''a''_'; 
     '_''a''_''_''a''_'; 
     '_''a''t''_''a''_'] 

missed='eio' 
result='You have 3 lives left.' 

當我寫我無法弄清楚如何功能我可以在每次迭代之後獲得板,第二件事是如何獲得錯過的信件。

這裏是我的功能

function [boards, missed, result]=playHangman(word,letter) 

for ind=1:length(letter) 
    compare=((word==letter(ind))|(word==(char(double(letter(ind)-32))))); 
end 
boards=word; 
boards(~compare)='_'; 
missed=**??** 
if strcmp(word,boards) 
    result='You win!'; 
elseif strcmp(word,boards)==false||6-length(missed)==0 
    result='You lose!'; 
else 
    result=sprintf('You have %d lives left.',6-length(missed)); 
end 
end 

任何幫助將不勝感激。謝謝

回答

1

我不知道這是你想要的。 board可以使用ismember輕鬆otained,並使用setdiffmissed

word = 'MatLab'; %// data 
letter = 'aeiot'; %// data 

N = numel(letter); 
board = cell(N,1); 
missed = cell(N,1); 
for n=1:N 
    board{n} = word; 
    board{n}(~ismember(lower(word),letter(1:n))); = '_' %// hide letters not hit 
    missed{n} = setdiff(letter(1:n),word); %// letters not present in word 
end 

結果:

board = 
    '_a__a_' 
    '_a__a_' 
    '_a__a_' 
    '_a__a_' 
    '_at_a_' 

missed = 
    [] 
    'e' 
    'ei' 
    'eio' 
    'eio' 
+0

這是非常接近我想要的東西。我們希望將所有棋盤的結果存儲在一個輸出中。它應該處理串聯。我知道如何連接。但是,我不知道如何在循環中做到這一點。在while和while循環中,我很不清楚。不管怎麼說,還是要謝謝你! – user3226108

+0

@ user3226108請參閱更新。我使用單元格數組來存儲每個迭代的結果 –

+0

我們還沒有教過單元數組。這對我來說是個問題。但是,代碼適用於電路板。而錯過我們只需要錯過的信件。爲此,我們可以使用你的第一個代碼「missed = setdiff(letter,word)」。不需要使用單元陣列。但是,我嘗試了不同的輸入。它給出正確的錯過信件,但不保持其外觀順序。 – user3226108