JavaRush /Java Blogu /Random-AZ /JavaRush-da "Oyunlar" bölməsi: Oyun mühərriki

JavaRush-da "Oyunlar" bölməsi: Oyun mühərriki

Qrupda dərc edilmişdir
JavaRush-dan "Oyunlar" populyar kompüter oyunlarının yazılması üçün böyük tapşırıq layihələrini ehtiva edən yeni bölmədir. Onları düzəltmək göründüyündən daha asandır: hər bir layihə iki onlarla alt tapşırığa bölünür. Tapşırıqları addım-addım yerinə yetirməklə, siz oyununuzu yazacaqsınız və sonra ona unikal "xüsusiyyətlər" əlavə edib dostlarınızla paylaşa bilərsiniz. FəsilOyunlar sadə JavaRush oyun mühərrikindən istifadə edir . Bu yazıda onun əsas xüsusiyyətləri və oyun yazma prosesinin necə göründüyü barədə danışacağıq .
  1. Giriş
  2. Oyunun işə salınması
  3. Oyun meydançasının yaradılması
  4. Primitiv proqram
  5. Oyun sahəsinin hüceyrələri ilə işləmək
  6. Rənglə işləmək
  7. Dialoq qutuları
  8. Faydalı Metodlar
  9. Oyun mühərriki məhdudiyyətləri

1. Giriş

Tərtibatçı tərəfindən kompüter oyununun həyata keçirilməsində üç mərhələ var:
  1. Oyunun başlanğıcı hazırlıq hərəkətləridir: oyun sahəsinin ölçüsünü və rəsmini təyin etmək, oyun obyektlərini ilkin vəziyyətdə yaratmaq və quraşdırmaq, həmçinin oyunun əvvəlində yerinə yetirilməli olan digər hərəkətlər.

  2. Oyun prosesi. Buraya oyun obyektlərinin hərəkəti, oyunçunun hərəkətləri, qazanılan xalların uçotu, həmçinin müəyyən fasilələrlə və ya düymələri basmaqla yerinə yetirilməli olan digər hərəkətlər daxildir.

  3. Oyunu bitirmək. Buraya animasiyaların dayandırılması, qələbə və ya məğlubiyyətin bildirilməsi və oyunun sonunda yerinə yetirilməli olan digər hərəkətlər daxildir.

2. Oyunun işə salınması

Oyunun işə salınması yalnız iki addımdan ibarətdir:

Addım 1: əsas oyun sinfini yaradın.

JavaRush oyun mühərriki əsasında oyununuzu inkişaf etdirmək üçün siz sinif yaratmalı və onu Oyun sinfindən (com.javarush.engine.cell.Game) miras almalısınız. Bu, sinifinizə oyun mühərrikində metodları çağırmaq və mühərrik üçün metodlarınızı çağırmaq imkanı verəcəkdir. Misal:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

Addım 2: initialize() metodunu ləğv edin.

Bu üsulda oyunu başlamaq üçün lazım olan bütün hərəkətlər yerinə yetiriləcək: oyun sahəsinin yaradılması, oyun obyektlərinin yaradılması və s. Siz sadəcə bu metodu Game sinfindən miras qalan sinifdə elan etməlisiniz . Misal:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее an objectов
    }
}
initialize() metodu main() metodunun analoqudur : burada oyun üçün yazılmış bütün kodlar icra olunmağa başlayır.

3. Oyun meydançasının yaradılması

Oyun meydançasının yaradılması da yalnız iki addımdan ibarətdir.

Addım 1: oyun sahəsini hüceyrələrə bölün.

Bütün oyun sahəsi oyun mühərriki ilə hüceyrələrə bölünür. Minimum ölçü 3x3, maksimum 100x100-dür. Oyun ekranının sabit ölçüsü var. Müxtəlif sayda hüceyrələrə bölünə bilər. Məsələn, eni 7 və hündürlüyü 9:
Fəsil
Nəzərə alın ki, hüceyrə nömrələnməsi yuxarı sol küncdən başlayır. Oyun sahəsinin ölçüsünü təyin etmək üçün void setScreenSize (int width, int height) metodundan istifadə edin . O, oyun sahəsinin ölçüsünü təyin edir. Parametrlər olaraq üfüqi (en) və şaquli (hündürlük) olaraq hüceyrələrin sayını qəbul edir. Oyun başlayanda adətən bir dəfə çağırılır. Misal:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
Oyun yazarkən, oyun sahəsinin cari enini və hündürlüyünü əldə etməlisiniz. Bunun üçün int getScreenWidth()int getScreenHeight() metodları faydalıdır .

Addım 2: Şəbəkəni yandırın və ya söndürün (isteğe bağlı).

Oyun sahəsindəki xanaları ayıran qara tordan xoşunuz gəlmirsə, onu söndürə bilərsiniz. Void showGrid(boolean isShow) metodu xanaları ayıran torları açır və söndürür. Varsayılan olaraq, şəbəkə göstərilir. Onu söndürmək üçün false parametri ilə bu metodu çağırın:
showGrid(false);
Nəticə:
Fəsil
Şəbəkəni yenidən yandırmaq üçün zəng edin:
showGrid(true);

4. Primitiv proqram

Nümunə proqram:
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 nümunədə oyun sahəsinin ölçüsü 3x3 olaraq təyin edilib, şəbəkə displeyi söndürülüb və mavi fonda mərkəzdə narıncı yarım xana ölçülü “X” simvolu quraşdırılıb. Bu, oyunçunun oyuna başlayarkən gördüyü ilk şey olacaq.

5. Oyun sahəsinin hüceyrələri ilə işləmək

Oyun sahəsini hüceyrələrə bölə bilməyimiz çox gözəldir, amma hüceyrələrin özləri ilə nə edə bilərik? Oyun sahəsinin hər bir hüceyrəsi təyin edilə bilər:
  • hüceyrə rəngi (hüceyrə fonunun rəngi);
  • mətn (mətn və ya nömrə);
  • mətn rəngi;
  • mətn ölçüsü hüceyrə ölçüsünə nisbətdə faiz olaraq.
Oyun sahəsinin hüceyrələri ilə işləmə üsullarını nəzərdən keçirək :
  1. void setCellColor(int x, int y, Rəng rəngi) — xananın rəngini koordinatları (x, y) ilə təyin edir:

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

  2. Color getCellColor(int x, int y) - koordinatları (x, y) olan xananın rəngini qaytarır:

    Color myColor = getCellColor(2, 0);

  3. void setCellValue(int x, int y, String value) - mətn dəyərini koordinatları (x, y) olan xanaya yerləşdirir:

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

  4. GetCellValue(int x, int y) sətri - koordinatları (x, y) olan xanada olan mətni qaytarır:

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

  5. void setCellTextSize(int x, int y, int size) - koordinatlarla (x, y) xanadakı məzmunun ölçüsünü təyin edir. size – xana hündürlüyünün faizi kimi mətn hündürlüyü:

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

  6. int getCellTextSize(int x, int y) - koordinatları (x, y) olan xanadakı məzmunun ölçüsünü qaytarır:

    int size = getCellTextSize(2 , 0);

  7. void setCellNumber(int x, int y, int value) - ədəd dəyərini koordinatları (x, y) olan xanaya yerləşdirir:

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

  8. int getCellNumber(int x, int y) - koordinatları (x, y) olan xanada olan nömrəni qaytarır. Əgər xanada nömrə yoxdursa, 0 qaytarır:

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

  9. void setCellTextColor(int x, int y, Color color) — koordinatları (x, y) olan xanadakı məzmunun (mətn) rəngini təyin edir:

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

  10. Rəng getCellTextColor(int x, int y) - koordinatları (x, y) olan xanadakı məzmunun (mətn) rəngini qaytarır:

    Color textColor = getCellTextColor(1, 3);
Rahatlıq üçün müxtəlif parametrlər dəstinə malik bir neçə setCellValueEx() metodu mövcuddur :
  1. void setCellValueEx(int ​​​​x, int y, Rəng hüceyrəsiRəng, Sətir dəyəri) — xananı koordinatları (x, y) fon rəngi hüceyrəsi Rəng və məzmun dəyəri ilə təyin edir:

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

  2. void setCellValueEx(int ​​​​x, int y, Rəng hüceyrəsiRəng, Sətir dəyəri, Rəng mətn Rəngi) — xanəni koordinatları (x, y) fon rəngi hüceyrəsiRəng, məzmun dəyəri və məzmun rəngi mətnRəngi ​​ilə təyin edir:

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

  3. void setCellValueEx(int ​​x, int y, Rəng hüceyrəsiRəng, Sətir dəyəri, Rəng mətnRəng, int mətn Ölçüsü); — xananı koordinatları (x, y) fon rəngi hüceyrəsiRəng, məzmun dəyəri, məzmun rəngi mətni Rəng və məzmun ölçüsü mətni ilə təyin edir.

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

6. Rənglə işləmək

Oyun mühərrikindəki rənglər 148 rəng üçün unikal dəyərləri ehtiva edən Rəng enum tərəfindən idarə olunur . Həm də xüsusi dəyər NONE - rəngin olmaması. Rənglə işləmə nümunəsi:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
Bəzən bütün mövcud rənglərdən ibarət bir sıra əldə etmək istəyə bilərsiniz. Bunun üçün values() metodundan istifadə edin . Misal üçün:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
Palitrada rəng nömrəsini əldə etmək çox sadədir:
Color color = Color.RED;
int redIndex = color.ordinal(); //  Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); //  Номер синего цвета
Rəngi ​​nömrəsinə görə də əldə edə bilərsiniz:
//  переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];

7. Dialoq qutuları

Oyunun sonunda oyunçuya qələbə və ya məğlubiyyət barədə məlumat verilməlidir. Bunun üçün oyun ekranında bir dialoq qutusu göstərən xüsusi bir üsul var:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Burada:
  • cellColor — dialoq qutusunun fon rəngi;
  • mesaj — mesaj mətni;
  • textColor — mesaj mətninin rəngi;
  • textSize — mesajın mətn ölçüsü.
İstifadəçi boşluq düyməsini basarsa, dialoq öz-özünə bağlanır.

8. Faydalı üsullar

Oyun yazarkən təsadüfi rəqəmlərdən tez-tez istifadə olunur. Təsadüfi nömrələri əldə etməyi asanlaşdırmaq üçün hurda mühərrik üsullarından istifadə edə bilərsiniz:
  1. int getRandomNumber(int max) - 0-dan (max–1) daxil olmaqla təsadüfi tam ədədi qaytarır.

  2. int getRandomNumber(int min, int max) - mindən (max–1) daxil olmaqla təsadüfi tam ədədi qaytarır.

9. Oyun mühərriki məhdudiyyətləri

Saytda oyunları işə salmaq üçün onlar serverdə JavaScript dilinə tərcümə edilir. Bununla bağlı bəzi məhdudiyyətlər yaranır. Xüsusilə, JavaRush mühərrikindən istifadə edərək oyunlar yazarkən siz fayllarla işləyə bilməzsiniz, həmçinin currentTimeMillis() , setOut() , setErr() , arrayscopy() istisna olmaqla, System sinifinin bütün üsullarından istifadə edə bilməzsiniz . Siz həmçinin errout sahələrindən istifadə edə bilərsiniz . Bu məhdudiyyətləri pozmaqla, oyun, əlbəttə ki, tərtib edilə və işlədilə bilər, lakin dərc etmək mümkün olmayacaq. Siz həmçinin sonsuz döngələri olan oyunu dərc edə bilməyəcəksiniz. Hamısı budur! Oyunlar bölməsi haqqında daha çox öyrənmək istəyirsinizsə, burada kömək edə biləcək bəzi faydalı sənədlər var:
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION