我正在试着为绞刑者游戏写一个函数。该函数将接受一串猜测的单词和一串猜测的字母。一个输出是在尝试每个字母后的棋盘字符串,另一个输出应该是与单词不匹配的字母串(我们称之为遗漏的字母),最后一个输出是游戏的结果。如果我们得到六个以上的字母与单词不匹配,输出结果是'You lest!‘,如果在六个错误猜测之前字母匹配,则输出结果是'You win!’。如果遗漏的字母数未达到6个,则输出应为“You have <#> lives left.‘”。猜测的字母总是小写,猜测的单词可以是大小写的组合。因此,如果单词是单词是'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任何帮助都将不胜感激。谢谢
发布于 2014-02-13 06:29:23
我不确定这是不是你想要的。使用ismember可以轻松获取board,使用setdiff可以轻松获取missed
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'https://stackoverflow.com/questions/21741074
复制相似问题