2014-02-12 2 views
0

Я пытаюсь написать функцию для игры в палач. Функция примет строку угаданного слова и строку угаданных букв. Один вывод представляет собой строку платы после попытки каждой буквы, другой вывод должен быть строкой букв, которая не соответствует слову (который мы называем пропущенными буквами), а последний результат - результат игры. Если мы получим более шести букв, которые не совпадают со словом, результатом вывода будет «Вы проиграете!», Если буквы совпадают до шести неправильных угадок, выход не будет «Вы победите!». Если количество пропущенных букв не достигает 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 можно легко otained с помощью ismember и missed с помощью setdiff:

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

Это очень близко к тому, что я хочу. Мы хотим сохранить все результаты платы в одном выходе. Он должен иметь дело с конкатенацией. Я знаю, как конкатенировать. Однако я не знаю, как это сделать в цикле. Я был очень неясен в классе for и while loop. Спасибо, в любом случае! – user3226108

+0

@ user3226108 Пожалуйста, ознакомьтесь с обновлением. Я использую массивы ячеек, чтобы сохранить результат каждой итерации –

+0

, пока мы не участвуем в массивах ячеек. Это проблема для меня. Однако код работает для платы. И для пропущенных нам нужно только пропущенное письмо. Для этого мы можем использовать ваш первый код «missed = setdiff (letter, word)». Не нужно использовать массив ячеек. Тем не менее, я пробовал использовать разные входы. Он дает правильное пропущенное письмо, но не поддерживает порядок их появления. – user3226108

Смежные вопросы