Простая версия может быть реализована без особых проблем в свободную пятницу вечером (как я только что сделал). Просто создайте программу с двумерным массивом (байтов, целых чисел и т. Д.), Представляющим ваше поле. В каждом тике повторяйте все элементы и проверяйте:
- Если поле ниже (массив [x] [y + 1]) пусто, переместите 1 место вниз (= установите [x] [y] пустым, [x] [y + 1] занятым)
- Иначе, если [x-1] [y + 1] пусто, идите туда.
- Иначе, если [x + 1] [y + 1] пусто, идите туда.
Это основы. Затем вы должны добавить проверки, например, не «повторять» вычисления для зерна (установите флаг в новой позиции, которая проверяется на следующих итерациях).
Я следовал этому учебнику, он довольно хорош, не слишком длинный, но все же указывает на типичные подводные камни и тому подобное.