Я пытаюсь улучшить пример головоломки со скользящими плитками, сделав начальные позиции случайными.
Есть лучший способ сделать это --"Преобразование значений в строки и объединить их вместе, чтобы передать для оценки." -- но подход, который я избрал, состоял в том, чтобы попытаться сгенерировать исходный код Rebol3, а затем оценить его. У меня он генерируется правильно, я думаю:
random/seed now
arr: random collect [ repeat tilenum 9 [ keep tilenum ] ]
hgroup-data: copy {}
repeat pos 9 [
curtile: (pick arr pos)
append hgroup-data either curtile = 9
[ reduce "x: box tilesize gameback " ]
[ rejoin [ { p "} curtile {" } ] ]
if all [(pos // 3) = 0 pos != 9] [ append hgroup-data " return^/" ]
]
print hgroup-data
...выводит что-то вроде:
p "4" x: box tilesize gameback p "5" return
p "3" p "7" p "1" return
p "2" p "8" p "6"
... который, если я затем скопирую и вставлю в эту часть, будет работать правильно:
view/options [
hgroup [
PASTE-HERE
]
] [bg-color: gameback]
Однако, если я попытаюсь сделать это динамически:
view/options [
hgroup [
hgroup-data
]
] [bg-color: gameback]
...(также print hgroup-data
, do hgroup-data
и load hgroup-data
) я получаю эту ошибку:
** GUI ERROR: Cannot parse the GUI dialect at: hgroup-data
...(или at: print hgroup-data
и т. д., в зависимости от того, какой вариант я пробовал.)
Если я попробую load [ hgroup-data ]
, я получу:
** Script error: extend-face does not allow none! for its face argument
** Where: either if forever -apply- apply init-layout make-layout actor all foreach do-actor unless -apply- apply all build-face -apply- apply init-layout make-layout actor all foreach do-actor if build-face -apply- apply init-layout make-layout actor all foreach do-actor unless make-face -apply- apply case view do either either either -apply-
** Near: either all [
word? act: dial/1
block? body: get dial...
Однако, если я использую синтаксис hgroup do [ hgroup-data ]
, программа запускается, но кнопок нет: она выглядит как-то переоцененной, так что возвращаемые значения функций p
и box
и т. д. помещаются прямо в hgroup
как код .
Конечно, здесь мне не хватает простой синтаксической ошибки. Что это такое?