о другой шарик, и тогда меняют направление движения
двигаются навстречу и встают на одно и то же место
Это две противоречащих фразы. Так всё-таки они отталкиваются или проходят сквозь друг друга?
И как вообще можно пропустить строку if(cells[this.position+this.direction]==1)?
Вы слишком помешаны на принципах программирования. Это хорошо только в "тяжёлых" больших проектах, но сильно портит маленькие приложения. Любые конструкции нужно вводить по мере необходимости, а не потому что так красиво и правильно.
Микропрограмма, это когда машинный код семейства процессоров компилируется в машинный код конкретной модели процессора. То есть программа переводится в микропрограмму. Таким образом поддерживается совместимость с "старевшими" программами.
20% времени занимают все самые важные, полезные и интересные штуки. Остальные 80% - тестирование, верстка, оптимизация и прочие скучные рутинные занятия.