14.02.2017 Views

. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Постро<strong>е</strong>ни<strong>е</strong> бизуализатора<br />

Вот код класса Renderer. Основная форма вызыва<strong>е</strong>т<br />

м<strong>е</strong>тод R e n d e r О этого класса посл<strong>е</strong> м<strong>е</strong>тода<br />

W o r l d .G o (), чтобы отобразить на формах<br />

пч<strong>е</strong>л и цв<strong>е</strong>ты. Уб<strong>е</strong>дит<strong>е</strong>сь, что изображ<strong>е</strong>ни<strong>е</strong> цв<strong>е</strong>тка<br />

(Flower.png) такж<strong>е</strong> загруж<strong>е</strong>но в ваш про<strong>е</strong>кт.<br />

c l a s s R e n d e r e r {<br />

p r i v a t e W o r l d world;<br />

p r i v a t e H iv e F o r m hiveForm;<br />

p r i v a t e F i e l d F o r m fieldForm;<br />

H « “<br />

пч<strong>е</strong>лэл<strong>е</strong>м<strong>е</strong>нты<br />

управл<strong>е</strong>ни<strong>е</strong> и графич<strong>е</strong>ски<strong>е</strong> фрагм<strong>е</strong>нты<br />

Вс<strong>е</strong> поля визуализатора<br />

закрыты, так как други<strong>е</strong><br />

классы н<strong>е</strong> должны им<strong>е</strong>ть<br />

доступа к <strong>е</strong>го свойствам.<br />

Класс world просто вызыва<strong>е</strong>т<br />

м<strong>е</strong>тоды RenderQ<br />

и ResetQ. П<strong>е</strong>рвый рису<strong>е</strong>т<br />

графику на формах, а<br />

второй при п<strong>е</strong>р<strong>е</strong>загрузк<strong>е</strong><br />

форм удаля<strong>е</strong>т с нмх эл<strong>е</strong>м<strong>е</strong>нты<br />

управл<strong>е</strong>ния.<br />

О тсл<strong>е</strong>живани<strong>е</strong> состояния пч<strong>е</strong>л<br />

и цв<strong>е</strong>тов осущ<strong>е</strong>ствля<strong>е</strong>тся ч<strong>е</strong>р<strong>е</strong>з<br />

объ<strong>е</strong>кты В<strong>е</strong><strong>е</strong> и Flower. А ля<br />

отображ<strong>е</strong>ния цо<strong>е</strong>тод цв<strong>е</strong>тов использи использу-p<br />

r i v a t e D i c t i o n a r y < F l o w e r , P i c t u r e B o x > flowerLookup = \ Р'^^мг<strong>е</strong>Бох, й Зля<br />

n e w D i c t i o n a r y < F l o w e r , P i c t u r e B o x > () ; / ^ ^ ^ С ^ Г п р Т Т о м о ш Т Т ^<br />

p r i v a t e L i s t < F l o w e r > deadFlowers = n e w L i s t < F l o w e r > {) ; > вар<strong>е</strong>й визуализатор связыва<strong>е</strong>т<br />

^аждую ^ пч<strong>е</strong>лу ^ и г^1Л.УГк(/01Ц каждый Ц0С1/ цв<strong>е</strong>ток<br />

p r i v a t e D i c t i o n a r y < B e e , B e e C o n t r o l> beeLookup =<br />

С- с ПК UK ЭАаАЛР.ииллплл!. эл<strong>е</strong>м<strong>е</strong>нтами BeeControl , .<br />

n e w D i c t i o n a r y < B e e , B e e C o n t r o l > ( ) ;<br />

и rictureßoK.<br />

p r i v a t e L i s t < B e e > retiredBees = n e w L i s t < B e e > ( ) ;<br />

p u b l i c Renderer( W o r ld w o r l d ,<br />

}<br />

t h i s . w o r l d = w o r l d ;<br />

t h i s . h i v e F o r m = h iv e F o r m ;<br />

t h i s . f i e l d F o r m = f i e l d F o r m ;<br />

p u b l i c v o i d Render 0<br />

}<br />

D r a w B e e s ( ) ;<br />

D r a w F lo w e r s ( ) ;<br />

R e m o v e R e tir e d B e e s A n d D e a d F lo w e r s ( ) ;<br />

{<br />

J<br />

H iv e F o r m h iv e F o r m , F i e l d F o r m f i e l d F o r m )<br />

Тайм<strong>е</strong>р основной формы вызыва<strong>е</strong>т м <strong>е</strong>-<br />

— ■mod RenderQ, который обновля<strong>е</strong>т пч<strong>е</strong>л<br />

^ и цв<strong>е</strong>ты, а зат<strong>е</strong>м очища<strong>е</strong>т ик словари.<br />

A<br />

{ Когда цв<strong>е</strong>ток<br />

вян<strong>е</strong>т, а пч<strong>е</strong>ла<br />

уходит на за ­<br />

служ<strong>е</strong>нный о т ­<br />

дых, информация<br />

о ник удаля<strong>е</strong>тся<br />

из словар<strong>е</strong>й при<br />

помощи списков<br />

deadFlowers<br />

и retiredBees.<br />

p u b l i c v o i d Reset 0 {<br />

f o r e a c h ( P i c t u r e B o x f l o w e r i n f l o w e r L o o k u p . V a l u e s<br />

f i e l d F o r m . C o n t r o l s . R e m o v e ( f l o w e r ) ;<br />

f l o w e r . D i s p o s e ( ) ;<br />

}<br />

f o r e a c h ( B e e C o n t r o l b e e i n b e e L o o k u p . V a lu e s )<br />

h i v e F o r m . C o n t r o l s . R e m o v e ( b e e ) ;<br />

f i e l d F o r m . C o n t r o l s . R e m o v e ( b e e ) ;<br />

b e e . D i s p o s e 0 ;<br />

}<br />

f l o w e r L o o k u p . C l e a r ( ) ;<br />

b e e L o o k u p . C le a r 0 ;<br />

{<br />

) {<br />

При п<strong>е</strong>р<strong>е</strong>загрузк<strong>е</strong> симулятора для<br />

каждой формы вызыва<strong>е</strong>тся м<strong>е</strong>тод<br />

Controk.RemoveQ, удаляющий вс<strong>е</strong><br />

эл<strong>е</strong>м<strong>е</strong>нты управл<strong>е</strong>ния. Он находит<br />

каждый эл<strong>е</strong>м<strong>е</strong>нт в словар<strong>е</strong> и вызыва<strong>е</strong>т<br />

для н<strong>е</strong>го.м<strong>е</strong>тод PisposeQ. Посл<strong>е</strong><br />

ч<strong>е</strong>го очища<strong>е</strong>т и словари такж<strong>е</strong>.<br />

дальш<strong>е</strong> > 593

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!