如何在LiveCode中操纵字符串中的字符位置

时间:2016-05-19 04:59:55

标签: livecode

所以,我有一个非常具体的问题。我有一个随机的单词,我已经生成了。我还有一个单独的字符串,使用该字符的长度,'n'重复“_”n次到字段wordDisplay。这些计划的要素是有效的。因此,如果随机单词是“meme”,则wordDisplay上的openCard会显示“_ _ _ _”。

现在,我有一个输入按钮“a”。如果单击此按钮,它将检查randomword变量中的“a”,如果找到,则会将wordDisplay中的“_”替换为“a”。因此,如果randomword是“name”,那么在点击“a”之前,wordDisplay会显示“_ _ _ _”。点击“a”后,wordDisplay会显示“_ a _ _”。但是,如果有一个以上的“a”,它将显示所有这些。

同样值得一提的是,如果没有找到任何信件,我打算让程序做点什么。

作为LiveCode的初学者,这对我来说似乎很困惑,我真的很感谢有人分享他们如何做这样的事情的知识。谢谢!

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点,但我不会尝试在一个字段中完成所有事情。除非您使用等宽字体,否则每次交换字符和下划线时文本的宽度都会移动。

我建议使用单独的字段(或按钮或图形)来显示单词的每个字符(名称类似于letter1,letter2,letter3 ......),并在每个字段下放置一个折线图形(名为line1,line2) ,line3 ......)。创建一些与最坏情况单词长度相匹配的控件,并在每次选择新单词时隐藏不需要的控件。

通过这种方式放置控件,无论使用什么字体或者如何缩放卡,都可以保证相对一致的对齐。

现在您可以简单地切换每个"字母"的可见性。字段和每个"下划线的可见性"根据需要,通过循环控制集。有点像:

[这个秘密词是' aardvark' ]

command checkForCharacterMatch pUserChar
   local noMatch = true
   repeat with N = 1 to length(theSecretWord)
      put long id of field ("letter" & N) into theLetter
      put long id of graphic ("line" & N) into theLine
      if (the text of theLetter = pUserChar) then
         show theLetter
         hide theLine
         put false into noMatch
      end if
   end repeat
   if noMatch then
      -- DO PENALTY STUFF HERE
   end if
end checkForCharacterMatch

实际上,你甚至不需要隐藏线条,但这符合你原来的方法。