Deceiving_Solicitite технически правильно ... но я не чувствую, что он объяснил свой код очень хорошо и честно код в Хишам просто написано лучше, даже если это не так (только 2 мелких деталей). Теперь, когда это было сказано, можно перейти к кодированию.
Первый вопрос, который выдается мне, - это ваша команда отправки. Позволяет попытаться изменить Send, Array[rand]
к Send % Array[rand]
и теперь код работает большую часть времени ...
Но что это значит?
Отметьте % знак? То, что это делает, - принудительное выражение для команды, которая обычно не оценивает выражения. Массивы/объекты рассматриваются как таковые в AHK, и Command's не узнает их.
Это еще не объясняет, почему код только «работает большую часть времени ...»
Ну как выясняется, есть также небольшая проблема с случайными числами он порождающее. При введении значений в массив они индексируются постепенно, начиная с 1, и его случайное число иногда приводит к нулю. Таким образом, мы изменим эту строку теперь с Random, rand, 1, 3
, на этом этапе код фиксируется и работает% 100 времени.
Но что, если он хочет иметь больше оскорблений, чем 3? Должен ли он пройти через и подсчитать каждую строку и внести поправки в свою команду Random?
Это было бы глупо, так как мы можем заставить компьютер сделать это для нас, поскольку он намного быстрее при подсчете строк текста, чем мы.Таким образом, мы просто будем иметь результаты случайных результатов от 1 до Max Index нашего массива так: Random, rand, 1, % Array.MaxIndex()
. Обратите внимание на%? Мы снова принуждаем команду к оценке и выражению. Аккуратно?
Завершенный код:
Array:= Object()
Loop, Read, C:\Users\dell\Desktop\insults.txt
{
Array.Push(A_LoopReadLine)
}
::diss::
Random, rand, 1, % Array.MaxIndex()
Send % Array[rand]
Return
Я надеюсь, что вы узнали из этого.
Редактировать: Изменен Array.Insert(), deprecated, to Array.Push().
Ваш код действительно работает, если вы используете последнюю версию AHK от http://ahkscript.org/ –