JavaRush /Java blogi /Random-UZ /JavaRush-dagi "O'yinlar" bo'limi: O'yin mexanizmi

JavaRush-dagi "O'yinlar" bo'limi: O'yin mexanizmi

Guruhda nashr etilgan
JavaRush-dan "O'yinlar" - bu mashhur kompyuter o'yinlarini yozish uchun katta vazifa-loyihalarni o'z ichiga olgan yangi bo'lim. Ularni qilish tuyulganidan osonroqdir: har bir loyiha ikki o'nlab kichik vazifalarga bo'lingan. Vazifalarni bosqichma-bosqich bajarib, siz o'z o'yiningizni yozasiz va keyin unga o'ziga xos "xususiyatlar" qo'shishingiz va uni do'stlaringiz bilan baham ko'rishingiz mumkin. BobO'yinlar oddiy JavaRush o'yin mexanizmidan foydalanadi . Ushbu maqolada biz uning asosiy xususiyatlari va o'yinni yozish jarayoni qanday ko'rinishi haqida gapiramiz .
  1. Kirish
  2. O'yinni ishga tushirish
  3. O'yin maydonini yaratish
  4. Primitiv dastur
  5. O'yin maydonining hujayralari bilan ishlash
  6. Rang bilan ishlash
  7. Dialog oynalari
  8. Foydali usullar
  9. O'yin mexanizmi cheklovlari

1.Kirish

Ishlab chiquvchi tomonidan kompyuter o'yinini amalga oshirishning uchta bosqichi mavjud:
  1. O'yinni boshlash tayyorgarlik harakatlaridir: o'yin maydonining o'lchamini va chizmasini belgilash, o'yin ob'ektlarini dastlabki holatda yaratish va o'rnatish, shuningdek, o'yin boshida bajarilishi kerak bo'lgan boshqa harakatlar.

  2. O'yin jarayoni. Bunga o'yin ob'ektlari harakati, o'yinchi harakatlari, olingan ballarni hisobga olish, shuningdek, ma'lum vaqt oralig'ida yoki tugmalarni bosish orqali bajarilishi kerak bo'lgan boshqa harakatlar kiradi.

  3. O'yinni tugatish. Bunga animatsiyalarni to'xtatish, g'alaba yoki mag'lubiyat haqida xabar berish va o'yin oxirida bajarilishi kerak bo'lgan boshqa harakatlar kiradi.

2. O'yinni ishga tushirish

O'yinni boshlash faqat ikki bosqichdan iborat:

1-qadam: asosiy o'yin sinfini yarating.

Oʻyiningizni JavaRush oʻyin mexanizmi asosida ishlab chiqish uchun siz sinf yaratishingiz va uni Oʻyin sinfidan (com.javarush.engine.cell.Game) meros qilib olishingiz kerak. Bu sizning sinfingizga o'yin mexanizmidagi usullarni chaqirish qobiliyatini va vosita sizning usullaringizni chaqirish qobiliyatini beradi. Misol:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

2-qadam: initialize() usulini bekor qiling.

Ushbu usulda o'yinni boshlash uchun zarur bo'lgan barcha harakatlar amalga oshiriladi: o'yin maydonini yaratish, o'yin ob'ektlarini yaratish va hokazo. Siz shunchaki ushbu usulni Game sinfidan meros bo'lgan sinfda e'lon qilishingiz kerak . Misol:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее an objectов
    }
}
initialize() usuli main() usulining analogidir : bu yerda oʻyin uchun yozilgan barcha kodlar bajarila boshlaydi.

3. O'yin maydonini yaratish

O'yin maydonini yaratish ham faqat ikki bosqichdan iborat.

1-qadam: o'yin maydonini hujayralarga bo'ling.

Butun o'yin maydoni o'yin mexanizmi tomonidan hujayralarga bo'linadi. Minimal o'lcham - 3x3, maksimal - 100x100. O'yin ekrani doimiy o'lchamga ega. Uni har xil miqdordagi hujayralarga bo'lish mumkin. Masalan, kenglik 7 va balandlik 9:
Bob
Iltimos, hujayralarni raqamlash yuqori chap burchakdan boshlanishini unutmang. O'yin maydonining o'lchamini belgilash uchun void setScreenSize (int width, int height) usulidan foydalaning . U o'yin maydonining o'lchamini belgilaydi. U gorizontal (kenglik) va vertikal (balandlik) bo'yicha hujayralar sonini parametr sifatida oladi. Odatda o'yin boshlanganda bir marta chaqiriladi. Misol:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
O'yinni yozishda siz o'yin maydonining joriy kengligi va balandligini olishingiz kerak bo'lishi mumkin. Buning uchun int getScreenWidth() va int getScreenHeight() usullari foydalidir .

2-qadam: Tarmoqni yoqing yoki o'chiring (ixtiyoriy).

Agar sizga o'yin maydonidagi katakchalarni ajratib turuvchi qora panjara yoqmasa, uni o'chirib qo'yishingiz mumkin. Void showGrid(mantiqiy isShow) usuli ajratuvchi katakchalarni yoqadi va o'chiradi. Odatiy bo'lib, panjara ko'rsatiladi. Uni o'chirish uchun ushbu usulni noto'g'ri parametr bilan chaqiring:
showGrid(false);
Natija:
Bob
Tarmoqni qayta yoqish uchun qo'ng'iroq qiling:
showGrid(true);

4. Primitiv dastur

Misol dastur:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        //  Выключаем отображение сетки
        showGrid(false);
        //  Меняем фон центральной клетки на синий, и отображаем в ней “Х”
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
Ushbu misolda o'yin maydonining o'lchami 3x3 ga o'rnatilgan, panjara displey o'chirilgan va ko'k fonda markazda to'q sariq rangli yarim hujayra o'lchamidagi "X" belgisi o'rnatilgan. Bu o'yinchi o'yinni boshlaganda ko'rgan birinchi narsa bo'ladi.

5. O'yin maydonining katakchalari bilan ishlash

O'yin maydonini hujayralarga bo'lishimiz ajoyib, ammo hujayralarning o'zlari bilan nima qilishimiz mumkin? O'yin maydonining har bir katakchasi o'rnatilishi mumkin:
  • hujayra rangi (hujayra fon rangi);
  • matn (matn yoki raqam);
  • matn rangi;
  • matn hajmi hujayra hajmiga nisbatan foiz sifatida.
Keling, o'yin maydonining hujayralari bilan ishlash usullarini ko'rib chiqaylik :
  1. void setCellColor(int x, int y, Color color) — hujayra rangini koordinatalari (x, y) bilan o'rnatadi:

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

  2. Color getCellColor(int x, int y) - koordinatalar (x, y) bilan hujayra rangini qaytaradi:

    Color myColor = getCellColor(2, 0);

  3. void setCellValue(int x, int y, String value) - matn qiymatini koordinatalari (x, y) bilan yacheykaga joylashtiradi:

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

  4. getCellValue(int x, int y) satri - koordinatalar (x, y) bilan yacheykadagi matnni qaytaradi:

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

  5. void setCellTextSize(int x, int y, int size) - koordinatalar (x, y) bilan yacheykadagi kontent hajmini o'rnatadi. o'lcham - matn balandligi hujayra balandligining foizi sifatida:

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

  6. int getCellTextSize(int x, int y) - koordinatalar (x, y) bilan yacheykadagi kontent hajmini qaytaradi:

    int size = getCellTextSize(2 , 0);

  7. void setCellNumber(int x, int y, int value) - son qiymatini yacheykaga koordinatalari (x, y) bilan joylashtiradi:

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

  8. int getCellNumber(int x, int y) - koordinatalar (x, y) bilan yacheykadagi sonni qaytaradi. Agar hujayrada raqam bo'lmasa, 0 ni qaytaradi:

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

  9. void setCellTextColor(int x, int y, Color color) — koordinatalar (x, y) bilan yacheykadagi kontent (matn) rangini o‘rnatadi:

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

  10. Color getCellTextColor(int x, int y) - koordinatalari (x, y) bo'lgan katakdagi kontent (matn) rangini qaytaradi:

    Color textColor = getCellTextColor(1, 3);
Qulaylik uchun turli xil parametrlar to'plamiga ega bir nechta setCellValueEx() usullari mavjud :
  1. void setCellValueEx(int ​​x, int y, Color cellColor, String qiymati) — hujayrani koordinatalari (x, y) fon rangidagi katakchani o‘rnatadiRang va kontent qiymati:

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

  2. void setCellValueEx(int ​​x, int y, Color cellColor, String qiymati, Color textColor) — yacheykani koordinatalari (x, y) fon rangi katakchasiRang, kontent qiymati va kontent rangi matniRang bilan o‘rnatadi:

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

  3. void setCellValueEx(int ​​x, int y, Color cellColor, String qiymati, Color textColor, int textSize); — katakchani koordinatalari (x, y) fon rangi katakchasini o‘rnatadiRang, kontent qiymati, kontent rangi matniRang va kontent hajmi textSize:

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

6. Rang bilan ishlash

O'yin dvigatelidagi ranglar 148 rang uchun noyob qiymatlarni o'z ichiga olgan Color enum tomonidan boshqariladi. Va shuningdek, alohida qiymat YO'Q - rangning yo'qligi. Rang bilan ishlashga misol:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
Ba'zan siz barcha mavjud ranglar qatorini olishni xohlashingiz mumkin. Buning uchun values() usulidan foydalaning . Masalan:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
Palitradagi rang raqamini olish juda oddiy:
Color color = Color.RED;
int redIndex = color.ordinal(); //  Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); //  Номер синего цвета
Rangni uning raqami bo'yicha ham olishingiz mumkin:
//  переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];

7. Muloqot oynalari

O'yin oxirida o'yinchi g'alaba yoki mag'lubiyat haqida xabardor qilinishi kerak. Buning uchun o'yin ekranida dialog oynasini ko'rsatadigan maxsus usul mavjud:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Bu yerga:
  • cellColor — muloqot oynasining fon rangi;
  • xabar — xabar matni;
  • textColor — xabar matni rangi;
  • textSize — xabar matni hajmi.
Agar foydalanuvchi bo'sh joy tugmasini bossa, muloqot oynasi o'z-o'zidan yopiladi.

8. Foydali usullar

O'yin yozishda ko'pincha tasodifiy raqamlar ishlatiladi. Tasodifiy raqamlarni olishni osonlashtirish uchun siz hurda dvigatel usullaridan foydalanishingiz 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.

9. O'yin dvigatelining cheklovlari

Saytda o'yinlarni ishga tushirish uchun ular serverda JavaScript-ga tarjima qilinadi. Shu munosabat bilan ba'zi cheklovlar paydo bo'ladi. Xususan, JavaRush dvigatelidan foydalangan holda oʻyin yozishda siz fayllar bilan ishlay olmaysiz va System sinfining barcha usullaridan foydalana olmaysiz , faqat currentTimeMillis() , setOut() , setErr() , arrayscopy() . Err va out maydonlaridan ham foydalanishingiz mumkin . Ushbu cheklovlarni buzgan holda, o'yin, albatta, kompilyatsiya qilinishi va ishga tushirilishi mumkin, ammo uni nashr qilish mumkin bo'lmaydi. Shuningdek, siz cheksiz tsiklli oʻyinni nashr eta olmaysiz. Ana xolos! Oʻyinlar boʻlimi haqida koʻproq maʼlumotga ega boʻlishni istasangiz, bu yerda yordam berishi mumkin boʻlgan foydali hujjatlar mavjud:
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION