CodeGym/Java Blogu/Rastgele/CodeGym'deki Oyunlar bölümü: Oyun motoru
John Squirrels
Seviye
San Francisco

CodeGym'deki Oyunlar bölümü: Oyun motoru

grupta yayınlandı
CodeGym'den "Oyunlar", popüler bilgisayar oyunları yazmayı içeren büyük görevler içeren yeni bir bölümdür. Oluşturmaları göründüğünden daha kolaydır: her proje yirmi alt göreve bölünmüştür. Görevleri adım adım tamamlayarak kendi oyununuzu yazacaksınız ve ardından benzersiz özellikler ekleyip arkadaşlarınızla paylaşabileceksiniz. CodeGym'deki "Oyunlar" bölümü: Oyun motoru - 1Oyunlar, basit CodeGym oyun motorunu kullanır . Bu yazıda, temel özelliklerini ve oyun yazma sürecinin nasıl olduğunu açıklayacağız .

1. Giriş

Geliştirici için bir bilgisayar oyununun uygulanmasının üç aşaması vardır:
  1. Oyun başlatma — Bu aşama hazırlık eylemlerinden oluşur: oyun alanının boyutunu belirleme, oyun alanını çizme, oyun nesneleri oluşturma ve bunları ilk konumlarına koyma ve oyunun başında gerçekleştirilmesi gereken diğer eylemler.

  2. Oyun süreci. Bu aşama, hareket eden oyun nesneleri, oyuncu eylemleri, skor tutma ve belirli bir sıklıkta veya düğmelere basıldığında gerçekleştirilmesi gereken diğer eylemleri içerir.

  3. Oyun tamamlama. Bu aşama, animasyonu durdurmayı, bir galibiyet veya kaybı bildirmeyi ve oyunun sonunda gerçekleştirilmesi gereken diğer eylemleri içerir.

2. Oyun başlatma

Oyun başlatma yalnızca iki adımdan oluşur: Adım 1: Oyunun ana sınıfını oluşturun. GameCodeGym oyun motorunu kullanarak kendi oyununuzu geliştirmek için, sınıfı miras alan bir sınıf (com.codegym.engine.cell.Game) oluşturmanız gerekir . Bu, sınıfınıza oyun motorunun yöntemlerini çağırma yeteneği verir ve motora da sizin yöntemlerinizi çağırma yeteneği verir. Örneğin:
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}
Adım 2: Başlatma yöntemini() geçersiz kılın. Oyunu başlatmak için gereken tüm eylemler bu yöntemde gerçekleşecektir: oyun alanı oluşturmak, oyun nesneleri oluşturmak vb. Bu yöntemi, sınıfı miras alan sınıfta bildirmeniz yeterlidir Game. Örneğin:
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        // Here we perform all actions to initialize the game and its objects
    }
}
Yöntem initialize(), yönteme benzer main(): oyun için yazılan tüm kodların başlangıç ​​noktasıdır.

3. Bir oyun alanı oluşturmak

Bir oyun alanı oluşturmak da sadece iki adımdan oluşur. Adım 1: Oyun alanını hücrelere bölün. Tüm oyun alanı, oyun motoru tarafından hücrelere ayrılmıştır. Minimum boyut 3x3'tür; maksimum 100x100'dür. Oyun ekranının boyutları sabittir. Farklı sayıda hücreye bölünebilir. Örneğin, 7 hücre genişliğinde ve 9 hücre yüksekliğinde: CodeGym'deki "Oyunlar" bölümü: Oyun motoru - 2Hücrelerin sol üst köşeden başlayarak numaralandırıldığına dikkat edin. Oyun alanının boyutunu ayarlamak için yöntemi kullanın void setScreenSize(int width, int height). Oyun alanının boyutunu ayarlar. Parametreleri, yatay (genişlik) ve dikey (yükseklik) hücre sayısını temsil eder. Oyun başladığında genellikle bir kez çağrılır. Örneğin:
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       // Set the field size to 7 cells x 9 cells
       setScreenSize(7, 9);
        ...
    }
}
Bir oyun yazarken, oyun alanının mevcut genişliğini ve yüksekliğini almanız gerekebilir. Bunu yapmak için int getScreenWidth()ve int getScreenHeight()yöntemleri kullanışlı olacaktır. Adım 2: Izgarayı açın veya kapatın (isteğe bağlı). Oyun alanında hücreleri ayıran siyah ızgarayı beğenmediyseniz kapatabilirsiniz. Yöntem void showGrid(boolean isShow)ızgarayı açar ve kapatır. Varsayılan olarak ızgara görüntülenir. Kapatmak için, bu yöntemi argüman olarak false ile çağırın:
showGrid(false);
Sonuç: CodeGym'deki "Oyunlar" bölümü: Oyun motoru - 3Şebekeyi tekrar açmak için şu numarayı arayın:
showGrid(true);

4. İlkel bir program

İşte bir program örneği:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        // Create a playing field that is 3 cells x 3 cells
        setScreenSize(3, 3);
        // Turn off the grid
        showGrid(false);
        // Change the background of the center cell to blue, and display an "X" in it.
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
Bu örnekte, oyun alanı 3x3 olarak ayarlanmıştır, ızgara kapatılmıştır ve merkez hücrede mavi bir arka plan üzerinde hücre boyutunun yarısı kadar turuncu bir "X" ayarlanmıştır. Bu, oyuncunun oyun başladığında gördüğü ilk şey olacaktır.

5. Oyun alanındaki hücrelerle çalışma

Oyun alanını hücrelere ayırabilmemiz harika, ama hücrelerin kendisiyle ne yapabiliriz? Oyun alanının her hücresi için aşağıdaki özellikleri ayarlayabilirsiniz:
  • hücre rengi (hücre arka plan rengi);
  • metin (metin veya sayı);
  • metin rengi;
  • hücre boyutunun yüzdesi olarak metin boyutu.
Oyun alanındaki hücrelerle çalışma yöntemlerine bir göz atalım :
  1. void setCellColor(int x, int y, Color color)— hücrenin rengini koordinatlarla (x, y) ayarlar:

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

  2. Color getCellColor(int x, int y)— hücrenin rengini koordinatlarla (x, y) döndürür:

    Color myColor = getCellColor(2, 0);

  3. void setCellValue(int x, int y, String value)— koordinatları (x, y) ile değer parametresindeki dizeye eşit olan hücrenin metnini ayarlar:

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

  4. String getCellValue(int x, int y)— hücrede bulunan metni koordinatlarla (x, y) döndürür:

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

  5. void setCellTextSize(int x, int y, int size)— hücre içeriğinin boyutunu koordinatlarla (x, y) ayarlar. size parametresi, hücre yüksekliğinin yüzdesi olarak metin yüksekliğidir:

    setCellTextSize(2 , 0, 70); // 70% of the cell height

  6. int getCellTextSize(int x, int y)— hücre içeriğinin boyutunu (x, y) koordinatlarıyla döndürür:

    int size = getCellTextSize(2 , 0);

  7. void setCellNumber(int x, int y, int value)— koordinatları (x, y) ile değer parametresindeki sayıya eşit olan hücrenin metnini ayarlar:

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

  8. int getCellNumber(int x, int y)— hücrede bulunan sayıyı koordinatlarla (x, y) döndürür. Hücre bir sayı içermiyorsa, 0 döndürür:

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

  9. void setCellTextColor(int x, int y, Color color)— hücrenin içeriğinin (metnin) rengini koordinatlarla (x, y) ayarlar:

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

  10. Color getCellTextColor(int x, int y)— hücrenin içeriğinin (metnin) rengini (x, y) koordinatlarıyla döndürür:

    Color textColor = getCellTextColor(1, 3);
setCellValueEx()Kolaylık sağlamak için, farklı parametre kümelerine sahip birkaç yöntem vardır :
  1. void setCellValueEx(int x, int y, Color cellColor, String value)— hücrenin arka plan rengini (cellColor) ve içeriğini (değer) koordinatlarla (x, y) ayarlar:

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

  2. void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor)— hücrenin arka plan rengini (cellColor), içeriğini (değer) ve metin rengini (textColor) koordinatlarla (x, y) ayarlar:

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

  3. void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor, int textSize)— hücrenin arka plan rengini (cellColor), içeriğini (değer), metin rengini (textColor) ve metin boyutunu (textSize) koordinatlarla (x, y) ayarlar:

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

6. Renkle çalışma

Color enumOyun motorundaki renklerden sorumludur . 148 renk için benzersiz değerlere sahiptir. Ayrıca hiçbir rengi temsil etmeyen özel bir değeri (HİÇBİRİ) vardır. İşte renkle çalışmaya bir örnek:
Color myColor = Color.WHITE;  // The myColor variable is set to white.
Color redColor = Color.RED;  // The redColor variable is set to red.
Color blueColor = Color.BLUE;  // The blueColor variable is set to light blue.
Bazen mevcut tüm renklerden oluşan bir dizi almanız gerekebilir. Bunu yapmak için values()yöntemi kullanın. Örneğin:
Color[] colors = Color.values();  // The colors variable is assigned an array containing all available colors.
Palette bir rengin indeksini almak çok kolaydır:
Color color = Color.RED;
int redIndex = color.ordinal();  // Index of red

int blueIndex = Color.BLUE.ordinal();  // Index of blue
Bir rengi indeksine göre de alabilirsiniz:
Color color = Color.values()[10];  // The color variable is assigned the color with index 10 in the Color enum.

7. İletişim kutuları

Oyunun sonunda, bir galibiyet veya mağlubiyeti oyuncuya bildirmeniz gerekir. Bunu yapmak için oyun ekranında bir iletişim kutusu görüntüleyen özel bir yöntem vardır:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Burada:
  • cellColoriletişim kutusunun arka plan rengidir;
  • messagemesajın metni;
  • textColormesaj metninin rengidir;
  • textSizemesaj metninin boyutudur.
Kullanıcı boşluk çubuğuna basarsa iletişim kutusu kendiliğinden kapanır.

8. Yardımcı yöntemler

Oyun yazarken rastgele sayılar çok kullanılır. Rastgele sayıları almayı kolaylaştırmak için oyun motorunun sağladığı aşağıdaki yardımcı yöntemleri kullanabilirsiniz:
  1. int getRandomNumber(int max)— 0 ile (maks-1) dahil olmak üzere rasgele bir tamsayı döndürür.

  2. int getRandomNumber(int min, int max)— min ile (maks-1) dahil olmak üzere rastgele bir tamsayı döndürür.

Şimdilik bu kadar! "Oyunlar" bölümü hakkında daha fazla bilgi edinmek istiyorsanız, size yardımcı olabilecek bazı yararlı belgeler aşağıda verilmiştir:
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok