我正在为类似于Hangman的游戏编写iOS应用程序,不同之处在于玩家需要一次性猜出一个字母的秘密单词,从第一个字母开始。秘密字在游戏开始时在*
中显示为星号(UITextField
)。
当玩家猜到第一个字母时,程序应该将其与秘密字词进行比较,以查看该字母是否正确。如果猜测正确,应用程序应使用正确的字母替换第一个星号。如果猜测不正确,将采取其他一些措施。玩家一次一个字母地重复这个过程,直到秘密词被完全拼写出来。
以下是我目前使用的代码,用于检查针对密码字的猜测字母,但它无法正常工作。
-(void) checkGameLetter : (NSString *) letterToCheck{
bool match = NO;
NSRange gameLetterRange;
char charToCheck = [letterToCheck characterAtIndex:0];
for(int i = 0; i < self.correctWord.length; i++)
{
char tempString = [self.correctWord characterAtIndex:i];
if(charToCheck == tempString){
match = YES;
gameLetterRange = NSMakeRange(i, 1);//location, length
Screen.text =[Screen.text stringByReplacingCharactersInRange:gameLetterRange withString:letterToCheck];
}
}
答案 0 :(得分:1)
您的代码出现问题的原因是,其中没有任何内容表示我们正在检查的正确字词的字母。
例如,假设这个词是&#34; zork&#34;并且用户猜测&#34; r&#34;。你正试图走过&#34; zork&#34;寻找是否&#34; r&#34;匹配任何字母。但是根据你的规范,如果这是对第一个字母的猜测,我们应该检查第一个字母(&#34; z&#34;)和停止,因为&#34; r&#34;那个位置是错误的。
因此,您想要编写的内容比您拥有的代码简单得多。你不想要这个:
-(void) checkGameLetter : (NSString *) letterToCheck{
你想要这个:
-(void) checkGameLetter:(NSString*)letterToCheck againstPosition:(NSInteger)position {
并且没有循环:你只要看那个位置的字母,看看它们是否相同。
最后请注意这个重要事实:==
不会比较两个字符串。它询问它们是否是相同的对象,它们显然不是。你想要isEqualToString:
。