Author Topic: Рандомное прокликивание поля из нескольких клеток  (Read 2220 times)

0 Members and 1 Guest are viewing this topic.

Kedrick

  • Освоившийся
  • **
  • Posts: 70
    • View Profile
С массивами я вообще никогда не работал и даже после изучения статьи и справки не могу внятно сообразить что делать. Прошу помощи.
В игре 3 раза в сутки появляется на несколько минут мини-игра, руками я успеваю поймать только один заход, и хочется чтобы кликер остальные разы отрабатывал без меня. Победа приятна но не критична, награда прокачивается за количество попыток а не побед.
Имеется поле из 6х4 клеток. На нем есть 5 нужных клеток (ключи), 6 вредных (зеленые пятна) и 13 нейтральных (желтые пятна).
Соответственно количество кликов не ограничено. Для выигрыша надо найти 5 полезных клеток. При попадании на 5 вредных, игра заканчивается проигрышем. Но выигрыш не критичен, поэтому я хочу просто рандомно прокликивать игровое поле пока не найдется 5 ключей или 5 зеленых клякс. Победу или поражение (для остановки кликов) я смогу проконтролировать сам по верхней части картинки где все отображается


Написать нужную мне подпрограмму я смогу и через жопу, с обьявлением кучи переменных с координатами и рандомным выбором из них нужных. Но это будет неоптимально и содержит много букв.
Прошу показать пример работы с массивом если такое возможно.
Поочередную выборку координат из стэка я нашел в примере, но не знаю как сделать произвольную и не повторяющую уже кликанные.
Координаты всех клеток поля всегда одинаковы, такчто массив можно заполнить и из заранее заготовленного файла.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Можешь и через массив, можешь через строки.
Вот массив
Code: (clickermann) [Select]
LOGCLEAR
$count1 = 0 // начальное число
$count2 = 23 // конечное число
$startX = 454  // координаты центра первой клетки
$startY = 503

IF(ARRSIZE($ARR) = 0)
   WHILE($count1 < $count2+1)
      ARRPUSH($ARR,$count1)
      INC($count1,1)
   END_CYC
END_IF

$ARR_SIZE = ARRSIZE($ARR)
FOR ($i, $i<$ARR_SIZE*2)
   $n1 = RND(0,$ARR_SIZE-1)
   $n2 = RND(0,$ARR_SIZE-1)
   $R = $ARR[$n1]
   $ARR[$n1] = $ARR[$n2]
   $ARR[$n2] = $R
END_CYC

//FOR($INARR=0,$INARR<ARRSIZE($ARR))
//   LOGWRITE ("[",$INARR,"] = ",$ARR[$INARR])
//END_CYC
//LOGWRITE (" ")

FOR($i=0,$i < 5)   // пять твоих случайных клеток
   $r = ARRPOP($ARR)
   $X = $startX + ($r - INT($r/6)*6)*45
   $Y = $startY + INT($r/6)*45
   LOGWRITE ("Клетка № ",$r+1, "  x/y: ",$X, "/", $Y)
   MOVE($X,$Y)
   WAIT(3)   
END_CYC

HALT


Kedrick

  • Освоившийся
  • **
  • Posts: 70
    • View Profile
Спасибо.
Для меня это филькина грамота с парой знакомых букв, буду разбираться по уже готовому рабочему примеру.  8)
Чуть позже выложу тут то что намучу под конкретное место.