JavaRush /Java Blog /Random-TK /JavaRush-da "Oýunlar" bölümi: Oýun dwigateli

JavaRush-da "Oýunlar" bölümi: Oýun dwigateli

Toparda çap edildi
JavaRush-dan “Oýunlar”, meşhur kompýuter oýunlaryny ýazmak üçin uly meseleler taslamalaryny öz içine alýan täze bölüm. Olary ýasamak, görünişinden has aňsat: her taslama iki onlarça subtaska bölünýär. Wezipeleri ädimme-ädim ýerine ýetirip, oýnuňyzy ýazarsyňyz, soň bolsa özboluşly “aýratynlyklary” goşup, dostlaryňyz bilen paýlaşyp bilersiňiz. BapOýunlar ýönekeý JavaRush oýun hereketlendirijisini ulanýarlar . Bu makalada onuň esasy aýratynlyklary we oýun ýazmagyň prosesi barada gürleşeris .
  1. Giriş
  2. Oýun başlangyjy
  3. Oýun meýdançasyny döretmek
  4. Ilkinji maksatnama
  5. Oýun meýdançasynyň öýjükleri bilen işlemek
  6. Reňk bilen işlemek
  7. Dialog gutulary
  8. Peýdaly usullar
  9. Oýun motorynyň çäklendirmeleri

1. Tanyşdyryş

Öndüriji tarapyndan kompýuter oýnuny durmuşa geçirmegiň üç basgançagy bar:
  1. Oýunyň başlangyjy taýýarlyk çäreleri: oýun meýdançasynyň ululygyny we çyzuwyny kesgitlemek, oýun obýektlerini başlangyç ýagdaýda döretmek we gurmak, şeýle hem oýnuň başynda edilmeli beýleki hereketler.

  2. Oýun prosesi. Bu oýun obýektleriniň hereketini, oýunçynyň hereketlerini, gazanylan ballary hasaba almagy, şeýle hem belli aralyklarda ýa-da düwmelere basyp ýerine ýetirilmeli beýleki hereketleri öz içine alýar.

  3. Oýun gutarmak Bu animasiýalary duruzmagy, ýeňiş ýa-da ýeňlişi habar bermegi we oýnuň ahyrynda ýerine ýetirilmeli beýleki hereketleri öz içine alýar.

2. Oýun başlangyjy

Oýun başlamak diňe iki ädimden ybarat:

1-nji ädim: esasy oýun synpyny dörediň.

JavaRush oýun hereketlendirijisine esaslanýan oýnuňyzy ösdürmek üçin bir synp döretmeli we Oýun synpyndan miras almaly (com.javarush.engine.cell.Game). Bu, synpyňyza oýun dwigatelinde usullary çagyrmak we hereketlendirijiniň usullaryňyza jaň etmek ukybyny berer. Mysal:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

2-nji ädim: başlangyç () usulyny ýok et.

Bu usulda, oýny başlamak üçin zerur bolan ähli hereketler bolar: oýun meýdançasyny döretmek, oýun obýektlerini döretmek we ş.m. Bu usuly diňe Oýun synpyndan miras galan synpda yglan etmeli . Mysal:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее an objectов
    }
}
Başlangyç () usuly esasy () usulyň meňzeşidir : oýun üçin ýazylan ähli kodlar ýerine ýetirilip başlanýar.

3. Oýun meýdançasyny döretmek

Oýun meýdançasyny döretmek hem diňe iki ädimden ybarat.

1-nji ädim: oýun meýdançasyny öýjüklere bölüň.

Tutuş oýun meýdançasy oýun dwigateli bilen öýjüklere bölünýär. Iň pes ululygy 3x3, iň ýokary ululygy 100x100. Oýun ekrany hemişe ululykda. Dürli öýjüklere bölmek mümkin. Mysal üçin, ini 7 we beýikligi 9:
Bap
Öýjük belgileriniň çep ýokarky burçdan başlaýandygyny ýadyňyzdan çykarmaň. Oýun meýdançasynyň ululygyny kesgitlemek üçin boş setScreenSize (int ini, int beýikligi) usulyny ulanyň . Oýun meýdançasynyň ululygyny kesgitleýär. Parametr hökmünde öýjükleriň sanyny keseligine (ini) we dikligine (beýikligi) alýar. Adatça oýun başlanda bir gezek diýilýär. Mysal:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
Oýun ýazanyňyzda, oýun meýdançasynyň häzirki giňligini we beýikligini almaly bolmagyňyz mümkin. Int getScreenWidth () we int getScreenHeight () usullary munuň üçin peýdalydyr .

2-nji ädim: Paneli açyň ýa-da öçüriň (islege görä).

Oýun meýdançasyndaky öýjükleri bölýän gara gözenegi halamaýan bolsaňyz, ony öçürip bilersiňiz. Boş showGrid (boolean isShow) usuly öýjükleri bölýän paneli açýar we öçürýär. Düzgüne görä, gözenek görkezilýär. Öçürmek üçin bu usuly ýalňyş parametr bilen çagyryň:
showGrid(false);
Netije:
Bap
Paneli açmak üçin jaň ediň:
showGrid(true);

4. Ilkinji maksatnama

Mysal üçin programma:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        //  Выключаем отображение сетки
        showGrid(false);
        //  Меняем фон центральной клетки на синий, и отображаем в ней “Х”
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
Bu mysalda oýun meýdançasynyň ululygy 3x3, gözenegiň ekrany öçürilýär we merkezde gök fonda mämişi ýarym öýjükli “X” nyşany goýulýar. Bu, oýun başlanda oýunçynyň ilkinji görýän zady bolar.

5. Oýun meýdançasynyň öýjükleri bilen işlemek

Oýun meýdançasyny öýjüklere bölüp biljekdigimiz gaty gowy, ýöne öýjükleriň özleri bilen näme edip bileris? Oýun meýdançasynyň her öýjügi düzülip bilner:
  • öýjük reňki (öýjük fon reňki);
  • tekst (tekst ýa-da san);
  • tekstiň reňki;
  • öýjügiň ululygyna görä göterim hökmünde tekst ululygy.
Oýun meýdançasynyň öýjükleri bilen işlemegiň usullaryna seredeliň :
  1. boş setCellColor (int x, int y, Reňk reňki) - öýjügiň reňkini koordinatlar (x, y) bilen kesgitleýär:

    setCellColor(0, 0, Color.RED);
    setCellColor(3, 6, Color.BLACK);
    setCellColor(6, 8, Color.NONE);

  2. Reňk getCellColor (int x, int y) - öýjügiň reňkini koordinatlar (x, y) bilen gaýtarýar:

    Color myColor = getCellColor(2, 0);

  3. void setCellValue (int x, int y, Setir bahasy) - tekstiň bahasyny koordinatalar (x, y) bilen öýjüge ýerleşdirýär:

    setCellValue(3, 3, "text");
    setCellValue(0, 8, "W");
    setCellValue(4, 1, "2222");
    setCellValue(6, 6, "");

  4. Setir getCellValue (int x, int y) - öýjükdäki teksti koordinatlar (x, y) bilen gaýtarýar:

    String s = getCellValue(3, 3);
    System.out.println(getCellValue(4, 1));

  5. void setCellTextSize (int x, int y, int size) - öýjükdäki mazmunyň ululygyny koordinatlar (x, y) bilen kesgitleýär. ululygy - öýjügiň beýikliginiň göterimi hökmünde tekst beýikligi:

    setCellTextSize(2 , 0, 70); //  70% высоты клетки

  6. int getCellTextSize (int x, int y) - öýjükdäki mazmunyň ululygyny koordinatlar (x, y) bilen yzyna berýär:

    int size = getCellTextSize(2 , 0);

  7. boş setCellNumber (int x, int y, int value) - öýjükdäki san bahasyny koordinatlar (x, y) bilen ýerleşdirýär:

    setCellNumber(3, 3, 40);
    setCellNumber(0, 8, -8);
    setCellNumber(4, 1, 2222);
    setCellNumber(6, 6, 0);

  8. int getCellNumber (int x, int y) - öýjükdäki sanlary koordinatlar (x, y) bilen gaýtarýar. Öýjükde san ýok bolsa, 0:

    int i = getCellNumber(3, 3);
    System.out.println(getCellNumber(4, 1));

  9. boş setCellTextColor (int x, int y, Reňk reňki) - öýjükdäki mazmunyň (tekstiň) reňkini koordinatlar (x, y) bilen kesgitleýär:

    setCellTextColor(2, 1, Color.GREEN);
    setCellTextColor(0, 1, Color.NONE);

  10. Reňk getCellTextColor (int x, int y) - koordinatlar (x, y) bilen öýjükdäki mazmunyň (tekstiň) reňkini görkezýär:

    Color textColor = getCellTextColor(1, 3);
Amatlylyk üçin dürli parametrler toplumy bolan birnäçe setCellValueEx () usuly bar :
  1. boş setCellValueEx (int x, int y, Reňk öýjük reňki, setir bahasy) - öýjügi koordinatlar (x, y) fon reňk öýjügi Reňk we mazmun bahasy bilen kesgitleýär:

    setCellValueEx(0, 2, Color.BLUE, "56");

  2. boş setCellValueEx (int x, int y, Reňk öýjük reňki, Setir bahasy, Reňk tekst reňki) - öýjügi koordinatlar (x, y) fon reňk öýjügi Reňk, mazmun bahasy we mazmun reňk teksti Reňk:

    setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN);

  3. boş setCellValueEx (int x, int y, Reňk öýjük reňki, Setir bahasy, Reňk tekst reňk, int textSize); - öýjügi koordinatlar (x, y) fon reňkli öýjük reňki, mazmunyň bahasy, mazmun reňkiniň teksti Reňk we mazmunyň ululygy tekstiSize:

    setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN, 70);

6. Reňk bilen işlemek

Oýun dwigatelindäki reňkler , 148 reňk üçin özboluşly bahalary öz içine alýan Reňk enumy tarapyndan dolandyrylýar. Şeýle hem NONE aýratyn bahasy - reňkiň ýoklugy. Reňk bilen işlemegiň mysaly:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
Käwagt ähli bar bolan reňkleriň toplumyny almak isläp bilersiňiz. Munuň üçin bahalar () usulyny ulanyň . Mysal üçin:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
Palitrada reňk belgisini almak gaty ýönekeý:
Color color = Color.RED;
int redIndex = color.ordinal(); //  Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); //  Номер синего цвета
Şeýle hem, onuň belgisi boýunça reňk alyp bilersiňiz:
//  переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];

7. Dialog gutulary

Oýun gutarandan soň, oýnaýja ýeňiş ýa-da ýeňiş hakda habar berilmelidir. Oýun ekranynda gepleşik penjiresini görkezýän munuň üçin ýörite usul bar:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Ine:
  • cellColor - gepleşik penjiresiniň fon reňki;
  • habar - habar teksti;
  • textColor - habaryň tekst reňki;
  • textSize - habaryň tekst ölçegi.
Ulanyjy boşluk düwmesini bassa, gepleşik öz-özünden ýapylýar.

8. Peýdaly usullar

Oýun ýazylanda tötänleýin sanlar köplenç ulanylýar. Tötänleýin sanlary almagy aňsatlaşdyrmak üçin, hereketlendirijiniň galyndy usullaryny ulanyp bilersiňiz:
  1. int getRandomNumber (int max) - tötänleýin bitewi 0-dan (max - 1) öz içine alýar.

  2. int getRandomNumber (int min, int max) - tötänleýin bitin san min-dan (max - 1) öz içine alýar.

9. Oýun motorynyň çäklendirmeleri

Sahypada oýunlary işletmek üçin serwerdäki JavaScript-e terjime edilýär. Bu meselede käbir çäklendirmeler ýüze çykýar. Hususan-da, JavaRush hereketlendirijisini ulanyp oýun ýazanyňyzda, häzirkiTimeMillis () , setOut () , setErr () , massiw () -den başga faýllar bilen işläp ýa-da Ulgam synpynyň ähli usullaryny ulanyp bilmersiňiz . Şeýle hem ýalňyş we daşarky meýdanlary ulanyp bilersiňiz . Bu çäklendirmeleri bozup, oýun, elbetde, düzülip we işledilip bilner, ýöne çap etmek mümkin bolmaz. Şeýle hem, çäksiz aýlawly oýun çap edip bilmersiňiz. Bu hemmesi! Oýunlar bölümi barada has giňişleýin öwrenmek isleseňiz, kömek edip biljek käbir peýdaly resminamalar:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION