public Игра(ИгровоеПоле игровоеПоле, IГенераторФигур генераторФигур, IНачислительОчков начислительОчков, IРегуляторСкорости регуляторСкорости) { ИгровоеПоле = игровоеПоле ?? throw new ArgumentNullException(nameof(игровоеПоле)); ГенераторФигур = генераторФигур ?? throw new ArgumentNullException(nameof(генераторФигур)); НачислительОчков = начислительОчков ?? throw new ArgumentNullException(nameof(начислительОчков)); егуляторСкорости = регуляторСкорости ?? throw new ArgumentNullException(nameof(регуляторСкорости)); }
void IИгра.Старт(CancellationToken cancellationToken) { ИгровоеПоле.Очистить(); СтатистикаИгры.Сбросить(); while (true) { var удалосьСоздать = СоздатьНовуюФигуру(); if (!удалосьСоздать) { return; } СтатистикаИгры.СледующийХод(); СтатистикаИгры.УстановитьСкорость(егуляторСкорости.ассчитать(СтатистикаИгры)); do { ОжиданиеСледующегоХода(); if (cancellationToken.IsCancellationRequested) { return; } } while (ОпуститьФигуруВниз()); lock (SyncRoot) { Фигура = null; var редуцированныеРяды = ИгровоеПоле.едуцироватьФундамент(); var добавочныеОчки = НачислительОчков.ассчитать(редуцированныеРяды); СтатистикаИгры.ДобавитьОчки(добавочныеОчки); } } }