我正在尝试为刽子手游戏编写一个函数。该函数将采用一串猜测的单词和一串猜测的字母。一个输出是在尝试每个字母后的一个字符串,另一个输出应该是一个字母串与字不匹配(我们称之为错过的字母),最后一个输出是游戏的结果。如果我们得到六个以上的字母与单词不匹配,则输出结果为“你输了!”,如果字母在六个错误猜测之前匹配,则输出为“你赢了!”。如果遗漏字母的数量未达到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
任何帮助将不胜感激。感谢
答案 0 :(得分:1)
我不确定这是不是你想要的。 board
可以使用ismember
和missed
使用setdiff
轻松获得{/ 1}}:
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'