ПредишенСледващото

Каква беше причината за написването на тази статия?
1 на въпросите, поставени от потребителите на сайта за това как да се напише Tetris.
2 Наскоро писах не е ясно по какви причини и за какви цели Tetris. Като дете бях nebyli опити да пишат Tetris. Bit зряло реши да реализира детска мечта :)
3 и банално желание да се изявят и на света това, което съм прекрасен програмист, и така аз съм в състояние да пиша Tetris готино :)
Всичко добро дърдорене се залавяме за работа.

Първо трябва да си представите какво части ще бъдат нашата игра. Tetris има цифри (клас фигурата) и поле (клас област). И все пак ние трябва мир (клас World) той ще съдържа поле, 2 броя (инцидент и след), очила, ниво и дори някаква информация.

Нека да мислим за това, което ще бъде нашата фигура. Има няколко възможности. Ние ще изберем по-простите. Да вземем за основа, че нашата фигура е някаква матрица от N от М, съдържащ празни и пълни клетки. Сега трябва да се определи какво клетка. Всъщност от това, което трябва да знаете е пълна или не. Това означава, че за представяне на клетки от които се нуждаем само тип «BOOL». Просто фигура съдържа информация за цвета и позицията на игралното поле. това е, което в структурата на всички по-горе, получаваме:

Тук не ми харесва? Първо самата матрица. Тъй като този подход ние трябва да го направи такъв размер, че ще се вмести в него най-голямото число. Най-голямата фигура ще бъде с дължина от 4 клетки и ширина от 1 Tetris е възможно обръща цифри тук, които получаваме квадратна матрица с размери 4 на 4. Недостатък на такава матрица е "сложността" проверка за вертикални и хоризонтални движения. Това се дължи на факта, че част от фигурата ще отиде отвъд нашата област. Въз основа на този римейк нашата матрица от статични към динамични.

В този аспект, ние сме заменили тип Булева да неподписан INT Това беше направено, тъй като STL изпълнява специфична STD :: VECTOR (Това е мястото, където можете да прочетете или дали другаде). Нашата матрица е станал едномерна. Тъй като STD :: VECTOR дизайн> Изглежда малко "заплашва" ние ще трябва да го едномерна. Едно неудобство за нас, за да се получи желаният елемент на матрицата се решават много просто само чрез добавяне на малък функция:

All. Ние можем отново да работи с нашата матрица като двумерен масив.
В клас фигура случило нещо друго, което не се променя. Отнесени цвета на нашите фигури. Това ще бъде обсъдено в друга секция.

И така! Нашата област има измерение на М Н като действителната цифра. Както фигурата тя трябва да съдържа информация за празни клетки или не. Както и цвета на клетката. цвят на клетките, ние ще се кодира неподписан инт (0xAARRGGBB). Сега клетка ниша магазин и цвят, както и информация на празен или не. Ако клетката не е нула тогава той е изпълнен с нула, ако тя е празна. Ето какво ни поле:

Ти казваш, че не е много по-различна от тази цифра. И вие ще бъдете абсолютно прав. Предлагам на всички наши общи класове 2 сливат в едно цяло:

Сега ние виждаме, че нашата област и фигура наследена от GameObj. На Фигура класове и Невярно са само онези неща, които те са коренно различни един от друг. Последният клас обява фигура, Невярно очевидно, че те "магически" добавихме повече подробности. Сега нека да поговорим за тях.

Подробен анализ на фигура

Мисля, че нищо специално, за да обясни тук и всичко е ясно. Аз просто искам да отбележа, че фигура клас съдържа указател към класа на терена. Този показалец става в конструктора. С този подход, ние можем лесно да доведе до необходимите функции клас поле, което всъщност ние успешно правят.
функция RotateLeft превръща фигурата ни наляво.

Как работи. Създаване на нова фигура фигура newFigure (field_, height_, width_). Се поставя в нова форма с нашата матрица данни по отношение на въртене. Инсталирайте и проверете позицията на конфликта с терена. Ако е имало конфликт, след това завъртете фигурата не е възможно. Ако не, с чиста съвест да променяме детайлите на нашите данни за данни подслушвани.
Актуализиране тук ние се движат нашата фигура хоризонтално и вертикално, както и проверка на възможността за по-нататъшно си спад. Ако има къде да падне, след това данните се прехвърлят на нашите фигури на терена и фигурата е означена като паднал «fly_ = фалшива;»

Подробна Невярно анализ

В този клас да се говори конкретно за. Просто се изброят най-интересните функции и да каже това, което правят.
Хит - проверява дали има цифра, която попада в нея, или вече е заето пространство
Сблъсък - проверка за пресичане с областта вече заета от клетки и фигурки.
SetFigure - трансфери фигури данни на терена.
KillLine - проверка на възможността за премахване на линията. Ако има ток премахва линия на душ горните клетки надолу, трупане на точки и надбавки отстранени линии.

Всъщност, ние все още не са се докоснали на World Class. Ето го:

Не че интересно в този клас не го правят. GenerateNext функция изключение.

След като учи тази функция, ще забележите, че има по невнимание е създаден и инициализира 5 класа при споменаването на която е никъде. Нека да разгледаме какви класове. Ето един:

Ние виждаме, че той наследява от фигура, с която вече сте запознати, и се състои от един дизайнер. Това е, което се случва в конструктора:

В този конструктор и нашата фигура е създаден. Тези клетки, които са пълни с нулева ще позволи на останалите ще бъдат показани на екрана. Чрез създаването на такива класове ние създаваме различни форми. Това е всичко, приятели!

Tetris е написано тук не е завършен продукт. Тя съдържа някои грешки и недостатъци. Аз със сигурност може да го оправи, но си мислех, че няма да е толкова скучно на читателя и той може да забавлява себе си поверил задачата му, освен ако това е необходимо :) Така че отивам за него!
Трудно е да се каже дали процесът на създаване на играта става ясно от тази статия, но ако вие не разбирате изходния код, приложен към този случай.
Всички благодарение на четене до тук, и успех в трудна област;)

Свързани статии

Подкрепете проекта - споделете линка, благодаря!