Имаме нужда от:
- Свободно време 15 минути;
- Вълната работна среда, т.е. JDK и IDE (като Eclipse);
- LWJGL библиотека (версия 2.x.x) да работи с Open GL. Моля, имайте предвид, че за LWJGL версии над 3 нужда да пишете код, който е различен от този, даден в статията;
- Иконите за клетките, т.е. фигура, знаме, знамето неправилно доставени, мина, мина избухна и самостоятелна област. Можете да символично направи себе си, или да ги изтеглите, за да използвате при писане на статията.
Работа с графики
За графика създаде отделен клас - GUI. От него, ние трябва да запишем всички графични контрол (т.е. областта на клетки), елемент от определението за които дойдоха, за да кликнете и контрол трансфер до него, на изхода на графични елементи на екрана и контрол на основните функции на OpenGL.
клас GUI полза ще си взаимодействат с графични елементи, трябва да се създаде интерфейс (класове запис мрежа, клетки и други механика че е твърде рано), които ще определят какво е то. Логика диктува, че графичните елементи трябва да бъдат:
- Външен вид (структура);
- координати;
- Размерите (ширина и височина);
- Метод, който се предава чрез кликване координати определят дали кликването е на елемент;
- Методът, който ще се занимава с натискане на елемента.
Така, пишем:
В GUI трябва да се съхранява поле на клетката. Ние ще създадем за тази цел на двумерен масив:
Сега ние трябва да се разбере с основните функции на OpenGL. На първо място, ние трябва да се инициализира.
В същото време, ние няма да се обсъди подробно, защото проучване LWJGL не е включена в настоящите ни планове. На второ място, ние трябва да се актуализира на екрана:
И накрая, ние трябва да се нарисува картина като цяло. За тази цел, то е време да завърши Enum Sprite. Елементите му ще бъдат с обвивка за текстурата разбираеми имена.
Сега можем да напишем метод за графичния интерфейс. че ще изготви елементи:
Ние просто трябва да се направи един единствен метод, за да се инициализира графики, а останалата част ще напишем в главния контролен класа, връщайки се тук, само за да се правят малки промени.
Създаване на клас Cell. GUIElement реализира интерфейса. В методите getWidth () и getHeight () върне постоянна за координатите ще създаде поле, което ще се инициализира от дизайнера. Просто дизайнер ще прехвърли състояние на клетка, "-1", ако това е мое, "-2", ако това е мой избухна, броят на мини в близост и в други случаи. За тази цел, може да се използва ENUM, но броя на минутите, е по-удобен за носене, така число, IMHO. Така че, дизайнерът:
Две други полета - булев isMarked и булеви isHidden ще бъдат отговорни за това дали клетката на знамето е посочено дали и я отвори. По подразбиране, и двете знамена са изложени на неверни.
Ние ще разберем метод getSprite ().
Ако натисна бутона, ние отново трябва да се помисли някои прости случаи:
За да може да се отвори, се добавят метод с клетъчни лезии:
За по-лесно изпълнение на генератора, добавете още и този метод:
Обработка на отговори от клетки
Връщайки се към GUI.receiveClick на метод (). Сега ние не можем просто да се върне обратно на резултата, тъй като ако резултатът от - един, тогава ние трябва да отворите съседните клетки, а основният клас контрол има нулева възвръщаемост, като знак, че всичко е вярно.
генератор писане
Тази задача не е по-трудно, отколкото да се създаде набор от случайни булеви стойности. Идеята за следното - за всяка клетка на матрицата ние генерира случайно число между 0 и 100. Ако броят им е по-малко от 15, а след това в този момент в мина рекорд масив (по този начин, възможност да се срещнат мина - 15%). Писане мина, което наричаме всички клетки около метод incNearMines (). и за тези клетки, където клетката не се създава в специална масив магазин стойност.
Главен изпълнителен клас и въвеждане в експлоатация
Главен клас ще създаде. има вход метод - публично статично невалидни основни (String [] опцията). Този метод ще трябва да направите две неща: обадете се на GUI инициализацията и циклично се обадите на методите на работа, докато не получи сигнал за затваряне (Input () GUI.draw () и GUI.update ().).
Тук ние не разполагаме с метод на въвеждане (). zaymomsya тях.
метод GUI.gameover () просто ще се обадя шоу () метод във всяка клетка, показвайки по този начин цялата област: