String and display help

2 ビュー (過去 30 日間)
Chris
Chris 2011 年 12 月 5 日
clear all clc
fid = fopen('hangman.txt', 'r'); if fid < 0, error('Cannot open file.'); end CC = textscan(fid, '%s'); C = CC{1}; fclose(fid); index = ceil(rand * numel(C)); word = C{index};
original='Hello World'; Word = word; Word(~isspace(Word)) = '*'
first_guess=char(input('Guess a letter \n','s'));
result1 = ~isempty(findstr(word,first_guess));
selected = first_guess; stars(original == first_guess) = first_guess
OUTPUT Word =
*******
Guess a letter i
stars =
Empty string: 1-by-0
The word is signature, but I don't unerstand how it outputs an empty string. Also, how would I get the letter to replace the asterisk after each guess? Would I end up using a while loop to keep the user guessing until the word is uncovered? This is a lot harder than I thought it would be.
  3 件のコメント
Chris
Chris 2011 年 12 月 5 日
Hangman text is just a document filled with different words.My program is supposed to be a hangman game.It chooses a random word from that document.The asterisks are there to shield the user from the answer. Although, I did figure some of the problem out, I still do not know how to get the asterisks show up with the letters if the user guesses correctly.
fid = fopen('hangman.txt', 'r');
if fid < 0, error('Cannot open file.');
end
CC = textscan(fid, '%s');
C = CC{1};
fclose(fid);
index = ceil(rand * numel(C));
word = C{index};
Word = word;
Word(~isspace(Word)) = '*'
first_guess=char(input('Guess a letter \n','s'));
result1 = ~isempty(findstr(word,first_guess));
selected = first_guess;
Progress(word == first_guess) = first_guess
OUTPUT
Word =
*********
Guess a letter
e
Progress =
e
Walter Roberson
Walter Roberson 2011 年 12 月 5 日
http://www.mathworks.com/matlabcentral/answers/13205-tutorial-how-to-format-your-question-with-markup

サインインしてコメントする。

採用された回答

Chandra Kurniawan
Chandra Kurniawan 2011 年 12 月 5 日
Hello,
So long time you have waiting. Here I give you my code.
I have 'Hangman.txt'
signature
chair
calculator
window
picture
browser
phone
book
table
glass
And this is my code :
clear; clc;
fid = fopen('Hangman.txt','r');
if fid < 0, error('Cannot open file'); end
data = textscan(fid,'%s');
data = data{1};
fclose(fid);
index = ceil(rand * numel(data));
word = data{index};
masked = word;
masked(~isspace(masked)) = '#';
complete = 0;
while complete == 0
clc;
fprintf('Word : %s\n',masked);
letter = char(input('Guess a letter : ','s'));
stat = findstr(word,letter);
if ~isempty(stat)
masked(stat) = letter;
end
if isempty(findstr(masked,'#'))
complete = 1;
end
end
clc; fprintf('Word : %s\n',masked);
Just try to run it.
  3 件のコメント
Chris
Chris 2011 年 12 月 5 日
Wow, thank you! I do have a couple more questions. How would I add a break to that after the user guesses 6 times.
Jan
Jan 2011 年 12 月 5 日
You do not need a CHAR in "char(input('Guess a letter : ','s'))".

サインインしてコメントする。

その他の回答 (1 件)

Sean de Wolski
Sean de Wolski 2011 年 12 月 5 日
Use ismember to determine if the letter 'is a member' of the word.
%Sample word, disguised word and letter guess
word = 'signature';
word_disguised = repmat('*',size(word));
letter = 'q'; %try various letters
%Engine
idx = ismember(word,letter); %index of members
if ~any(idx)
disp('Fail Lose an arm!');
else
word_disguised(idx) = letter;
end

カテゴリ

Help Center および File ExchangeCharacters and Strings についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by