Oʻyin dvigateli

All lectures for UZ purposes
Daraja, Dars
Mavjud
Oʻrta darajadagi loyihalar — bu yangi turdagi vazifalar. JavaRush-Universitetining dastlabki ikki modulida bu mashhur kompyuter oʻyinlarini yozish uchun katta loyihalar boʻladi. Ularni qilish osonroq: har bir loyiha ko'plab kichik vazifalarga bo'lingan. Vazifalarni bir qadamda bajaring, oʻzingizning oʻyiningizni yozasiz. Bo'lim Oʻyinlar oddiy JavaRush o'yin dvigateli dan foydalanadi. Ushbu materialda uning asosiy imkoniyatlarini va oʻyinni yozish jarayoni qanday boʻlishini tushuntiramiz.
  1. Tanishtirish
  2. O'yin initisializatsiyasi
  3. O'yin maydonini yaratish
  4. Oddiy dastur
  5. O'yin maydonining hujayralari bilan ishlash
  6. Rang bilan ishlash
  7. Dialog oynalari
  8. Utilit metodlar

1. Tanishtirish

Kompyuter o'yinini ishlab chiquvchi nuqtai nazaridan amalga oshirilishida uch bosqich mavjud:
  1. O'yin initisializatsiyasi — bu tayyorlov harakatlari: o'yin maydonining oʻlchamini oʻrnatish va chizish, o'yin obyektlarini yaratilishi va boshlang'ich joyiga oʻrnatilishi, shuningdek, o'yinning boshida bajarilishi kerak bo'lgan boshqa harakatlar.

  2. O'yin jarayoni. Bunga o'yin obyektlarining harakati, o'yinchi harakatlari, to'plangan ochkolar hisobini yuritish va tugmalar bosilishi yoki ma'lum vaqt oralig'ida bajarilishi kerak bo'lgan boshqa harakatlar kiradi.

  3. O'yinning tugallanishi. Bunga animatsiyaning to'xtatilishi, g'alaba yoki yutqazish xabari va o'yinning oxirida bajarilishi kerak bo'lgan boshqa harakatlar kiradi.

2. O'yin initisializatsiyasi

O'yin initisializatsiyasi atigi ikki qadamdan iborat:

Qadam 1: o'yinning asosiy sinfini yaratamiz.

JavaRush o'yin dvigateliga asoslangan o'yinni ishlab chiqish uchun sinf yaratishingiz va uni Game (com.javarush.engine.cell.Game) sinfdan meros qilib olishingiz kerak. Bu sinfga o'yin dvigatelining metodlarini chaqirish imkonini beradi va dvigatelga siz yozgan metodlarni chaqirish imkonini beradi. Misol:

import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

Qadam 2: initialize() metodini qayta yozamiz.

Bu metodda o'yinning boshlanishi uchun zarur bo'lgan barcha harakatlar sodir bo'ladi: o'yin maydonini yaratish, o'yin obyektlarini yaratish va hokazo. Bu metodni Game sinfidan meros qilib olingan sinfda e'lon qilishingiz kerak. Misol:

import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Bu erda o'yin va uning obyektlarini initisializatsiya qilish uchun barcha harakatlar amalga oshiriladi
    }
}
initialize() metodi — bu main() metodining analogi: o'yin uchun yozilgan barcha kod uning bilan boshlanadi.

3. O'yin maydonini yaratish

O'yin maydonini yaratish ham faqat ikkita qadamdan iborat.

Qadam 1: o'yin maydonini hujayralarga boʻlamiz.

O'yin maydonining barchasi o'yin dvigateli tomonidan hujayralarga boʻlinadi. Eng kichik hajmi - 3x3, eng kattasi - 100x100. O'yin ekraniga doimiy hajm ajratilgan. Uni turli miqdordagi hujayralarga boʻlish mumkin. Masalan, kenglik 7 va balandlik 9:
Bo'lim
E'tibor bering, hujayralar soni yuqori chap burchakdan boshlanadi. O'yin maydonining o'lchamini belgilash uchun void setScreenSize(int width, int height) metodidan foydalaning. U o'yin maydonining o'lchamini o'rnatadi. Parametrlar sifatida gorizontal (width) va vertikal (height) bo'yicha hujayralar sonini qabul qiladi. Odatda, u o'yin boshlanishida bir marta chaqiriladi. Misol:

import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  7x9 hujayra hajmini oʻrnatdik
       setScreenSize(7, 9);
        ...
    }
}
O'yin yozishda mavjud o'yin maydonining kengligi va balandligini olish kerak bo'lishi mumkin. Buning uchun int getScreenWidth() va int getScreenHeight() metodlari yordam beradi.

Qadam 2: panjarani yoqamiz yoki o'chiramiz (ixtiyoriy).

Agar sizga o'yin maydonida hujayralarni ajratib turuvchi qora panjara ko'rsatilishi yoqmasa, uni o'chirib qo'yishingiz mumkin. void showGrid(boolean isShow) metodi hujayralarni ajratib turuvchi panjarani yoqadi va o'chiradi. Standart bo'yicha panjara koʻrsatiladi. Uni o'chirish uchun bu metodni false parametri bilan chaqiring:

showGrid(false);
Natija:
Bo'lim
Panjara qayta yoqish uchun chaqirish:

showGrid(true);

4. Oddiy dastur

Dastur misoli:

public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  3x3 hujayrali o'yin maydoni hosil qilamiz
        setScreenSize(3, 3);
        //  Panjara ko'rsatishni o'chirib qo'yamiz
        showGrid(false);
        //  O'rtadagi hujayraning fonini ko'k rangga o'zgartiramiz va unda "X" ni ko'rsatamiz
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
Ushbu misolda o'yin maydoniga 3x3 o'lcham beriladi, panjara ko'rsatish o'chiriladi va markazda ko'k fonda yarim hujayra kattaligidagi to'q sariq "X" belgisi o'rnatiladi. Bu o'yinchi o'yin boshlanganda birinchi koʻradigan narsa bo'ladi.

5. O'yin maydonining hujayralari bilan ishlash

O'yin maydonini hujayralarga boʻlishimiz - bu juda yaxshi, lekin biz hujayralar bilan nimalar qilishimiz mumkin? Har bir o'yin maydoni hujayrasiga quyidagilarni belgilashingiz mumkin:
  • hujayra rangi (hujayra fonining rangi);
  • matn (matn yoki raqam);
  • matn rangi;
  • hujayra o'lchamiga nisbatan foizli matn o'lchami.
O'yin maydoni hujayralari bilan ishlash uchun metodlarni ko'rib chiqamiz:
  1. void setCellColor(int x, int y, Color color) – (x, y) koordinatalari boʻlgan hujayraga color rangini belgilaydi:

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

  2. Color getCellColor(int x, int y) — (x, y) koordinatalari boʻlgan hujayraning rangini qaytaradi:

    
    Color myColor = getCellColor(2, 0);
    

  3. void setCellValue(int x, int y, String value) — (x, y) koordinatalari boʻlgan hujayraga value matnini joylashtiradi:

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

  4. String getCellValue(int x, int y) — (x, y) koordinatalari boʻlgan hujayrada mavjud matnni qaytaradi:

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

  5. void setCellTextSize(int x, int y, int size) — (x, y) koordinatalari boʻlgan hujayradagi mazmunning o'lchamini belgilaydi. size – matn balandligi hujayra balandligining foizida:

    
    setCellTextSize(2 , 0, 70); //  Hujayraning 70% balandligi
    

  6. int getCellTextSize(int x, int y) — (x, y) koordinatalari boʻlgan hujayradagi mazmunning o'lchamini qaytaradi:

    
    int size = getCellTextSize(2 , 0);
    

  7. void setCellNumber(int x, int y, int value) — (x, y) koordinatalari boʻlgan hujayraga value raqamini joylashtiradi:

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

  8. int getCellNumber(int x, int y) — (x, y) koordinatalari boʻlgan hujayrada mavjud raqamni qaytaradi. Agar hujayrada raqam yo'q bo'lsa, 0 qaytaradi:

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

  9. void setCellTextColor(int x, int y, Color color) — (x, y) koordinatalari boʻlgan hujayradagi kontent (matn) rangini belgilaydi:

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

  10. Color getCellTextColor(int x, int y) — (x, y) koordinatalari boʻlgan hujayradagi kontent (matn) rangini qaytaradi:

    
    Color textColor = getCellTextColor(1, 3);
    
Qulaylik uchun setCellValueEx() metodning turli parametr to'plamlari bilan bir nechta versiyalari mavjud:
  1. void setCellValueEx(int x, int y, Color cellColor, String value) — (x, y) koordinatalari boʻlgan hujayraga fon rangi cellColor va kontent value ni belgilaydi:

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

  2. void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor) — (x, y) koordinatalari boʻlgan hujayraga fon rangi cellColor, kontent value va kontent rangi textColor ni belgilaydi:

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

  3. void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor, int textSize); — (x, y) koordinatalari boʻlgan hujayraga fon rangi cellColor, kontent value, kontent rangi textColor va kontent o'lchami textSize ni belgilaydi:

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

6. Rang bilan ishlash

O'yin dvigatelidagi ranglar uchun enum Color javob beradi, u 148 ta rang uchun noyob qiymatlarni o'z ichiga oladi. Shuningdek, NONE maxsus qiymati — rang yoʻqligi. Rang bilan ishlash misoli:

Color myColor = Color.WHITE;  //  myColor oʻzgaruvchisiga oq rang beriladi.
Color redColor = Color.RED; //  redColor oʻzgaruvchisiga qizil rang beriladi.
Color blueColor = Color.BLUE; //  blueColor oʻzgaruvchisiga ko'k rang beriladi.
Ba'zida mavjud barcha ranglar massivi olish kerak bo'lishi mumkin. Buning uchun values() metodidan foydalaning. Masalan:

//  colors oʻzgaruvchisiga mavjud barcha ranglarni oʻz ichiga olgan massiv beriladi.
Color[] colors = Color.values();
Paletadagi rang raqamini olish juda oson:

Color color = Color.RED;
int redIndex = color.ordinal(); //  Qizil rang raqami

int blueIndex = Color.BLUE.ordinal(); //  Ko'k rang raqami
Shuningdek, rangni uning raqamiga qarab olish mumkin:

//  color oʻzgaruvchisiga enum Color dan 10 indeksli rang beriladi.
Color color = Color.values()[10];

7. Dialog oynalari

O'yin tugagach, oʻyinchiga yutuq yoki mag'lubiyat haqida ma'lumot berish kerak. Buning uchun maxsus metod mavjud, u o'yin ekranda dialog oynasini ko'rsatadi:

void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Bu yerda:
  • cellColor — dialog oynasining fon rangi;
  • message — xabar matni;
  • textColor — xabar matnining rangi;
  • textSize — xabar matnining o'lchami.
Dialog oynasi foydalanuvchi bo'sh joy tugmasini bosganda o'z-o'zidan yopiladi.

8. Utilit metodlar

O'yinlar yozishda tez-tez tasodifiy raqamlar ishlatiladi. Tasodifiy raqamlarni olishni osonlashtirish uchun dvigatelning utilit metodlarini ishlatishingiz mumkin:
  1. int getRandomNumber(int max) — 0 dan (max–1) gacha bo'lgan tasodifiy butun sonni qaytaradi.

  2. int getRandomNumber(int min, int max) — min dan (max–1) gacha bo'lgan tasodifiy butun sonni qaytaradi.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION