Создание лабиринта

Я пытаюсь создать лабиринт с PBE-Lighoutgame, так как мой реф без событий Click мыши У меня есть 2 класса

Оба эти класса являются подклассами RectangleMorph

 VisibleSquare>>initialize
  "Visible borders with Some Color"

другой класс

  InvisbleSquare>>initialize
   "Everything is transparent Including Borders"

Реализация класса лабиринта, который является подклассом BorderedMorph

 Maze>>initialize
 initialize
|sampleCell width height n sample|
super initialize.
self borderWidth: 0.   
n := self cellsPerSide.
sampleCell := VisibleSquare  new.
sample:= InvisibleSquare new.
width := sampleCell width.
height := sample height.
self bounds: (5@5 extent: ((width + n) @ (height + n)) + (2 * self borderWidth)).
cells := Matrix new: n tabulate: [:i :j | self newCellAt: i at: j].

другой метод

Maze>>  newCellAt: i at: j
"Create a cell for position (i,j) and add it to my on-screen
representation at the appropriate screen position. Answer the new cell"
|c origin b |
c := VisibleSquare   new.
origin := self innerBounds origin.
self addMorph: c.
c position: ((i - 1) * c width) @ ((j - 1) * c height) + origin.
 ^ c

Как я могу табулировать Matrix с VisibleSquare и InvisibleSquare так, чтобы их можно было случайно добавлять в сетку (или) Есть ли другой способ сделать это??

1 ответ

Решение

Разве генерация случайного числа не будет просто чем-то вроде этого?

rnd := (1 to: 100) atRandom.

Получив его, вы можете назначить альтернативные сообщения получателю c:

(rnd > 50) ifTrue:[c := VisibleSquare new]
(rnd < 51) ifTrue:[c := InvisibleSquare new]

... который, я думаю, можно выразить как

c := rnd > 50 ifTrue[VisibleSquare new] ifFalse:[InVisibleSquare new]

Может быть, это то, что вы хотели знать. Однако, так как это для создания макета лабиринта, вам, возможно, следует придумать что-то более сложное, чем просто случайное расположение стен. Вероятно, есть некоторые алгоритмы, которые интересно реализовать с помощью функциональных функций программирования, которыми, похоже, оснащен smalltalk. Подумайте о том, чтобы взглянуть на страницу Википедии, посвященную алгоритмам создания лабиринтов, на которой основана эта страница, с примерами кода на разных языках.

Другие вопросы по тегам