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

Как да напишете своя сапьор в Java за 15 минути

Имаме нужда от:

  • Свободно време 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 () просто ще се обадя шоу () метод във всяка клетка, показвайки по този начин цялата област:

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