барабан представляем как ленту с изображениями, их количество фиксировано одно вращение барабана - переход вправо или влево на одну позицию на ленте, начальная позиция известна в общем случае заводим массив из n элементов (значение i элемента - номер на i-ом барабане)
| Код | class game { private: vector<size_t> positions_; // позиции в барабанах size_t size_; // количество позиций в барабане private: template<char S> void rotate(size_t&); // вращать public: game(size_t size, size_t count) : positions_(size), size_(count) { for (vector<size_t>::iterator i=positions_.begin(); // по умолчанию позиция 0 i!=positions_.end(); ++i) *i=0; }
size_t play(char obj); // крутить все барабаны вправо 'R' или влево 'L' size_t play(const vector<char>& obj); // i-ый барабан крутить в obj[i] };
template<> void game::rotate<'L'>(size_t& obj) { size_t pos=obj, count=std::rand(); int k=pos-count%size_; if (k<0) obj=size_+k; else obj=k; }
size_t game::play(char obj) { for (vector<size_t>::iterator i=positions_.begin(); i!=positions_.end(); ++i) { switch (obj) { case 'R': rotate<'R'>(*i); break; case 'L': rotate<'L'>(*i); break; default: throw <какой-нибудь exception> } } // если positions_[0]=positions_[1]=...=positions_[positions_.size()-1] выиграли }
|
|