迭代后打印每一行

时间:2014-02-12 22:20:22

标签: matlab

我正在尝试为刽子手游戏编写一个函数。该函数将采用一串猜测的单词和一串猜测的字母。一个输出是在尝试每个字母后的一个字符串,另一个输出应该是一个字母串与字不匹配(我们称之为错过的字母),最后一个输出是游戏的结果。如果我们得到六个以上的字母与单词不匹配,则输出结果为“你输了!”,如果字母在六个错误猜测之前匹配,则输出为“你赢了!”。如果遗漏字母的数量未达到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 个答案:

答案 0 :(得分:1)

我不确定这是不是你想要的。 board可以使用ismembermissed使用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'