JavaRush /Java Blog /Random-IT /Sezione "Giochi" su JavaRush: Motore di gioco

Sezione "Giochi" su JavaRush: Motore di gioco

Pubblicato nel gruppo Random-IT
"Giochi" di JavaRush è una nuova sezione che contiene grandi progetti di attività per scrivere giochi per computer popolari. Realizzarli è più semplice di quanto sembri: ogni progetto è diviso in due dozzine di sottoattività. Completando le attività passo dopo passo, scriverai il tuo gioco, quindi potrai aggiungervi "caratteristiche" uniche e condividerlo con gli amici. CapitoloI giochi utilizzano il semplice motore di gioco JavaRush . In questo articolo parleremo delle sue caratteristiche principali e di come si presenta il processo di scrittura di un gioco.
  1. introduzione
  2. Inizializzazione del gioco
  3. Creare un campo da gioco
  4. Programma primitivo
  5. Lavorare con le cellule del campo da gioco
  6. Lavorare con il colore
  7. Finestre di dialogo
  8. Metodi di utilità
  9. Limitazioni del motore di gioco

1. Introduzione

Ci sono tre fasi nella realizzazione di un gioco per computer da parte dello sviluppatore:
  1. L'inizializzazione del gioco consiste in azioni preparatorie: impostazione delle dimensioni e del disegno del campo di gioco, creazione e installazione di oggetti di gioco nella posizione iniziale, nonché altre azioni che devono essere eseguite all'inizio del gioco.

  2. Processo di gioco. Ciò include il movimento degli oggetti di gioco, le azioni dei giocatori, la contabilizzazione dei punti guadagnati e altre azioni che devono essere eseguite a determinati intervalli o premendo i pulsanti.

  3. Fine del gioco. Ciò include l'interruzione delle animazioni, l'annuncio della vittoria o della sconfitta e altre azioni che devono essere eseguite alla fine del gioco.

2. Inizializzazione del gioco

L'inizializzazione del gioco consiste in soli due passaggi:

Passaggio 1: crea la classe di gioco principale.

Per sviluppare il tuo gioco basato sul motore di gioco JavaRush, devi creare una classe ed ereditarla dalla classe Game (com.javarush.engine.cell.Game). Ciò darà alla tua classe la possibilità di chiamare metodi sul motore di gioco e la possibilità per il motore di chiamare i tuoi metodi. Esempio:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

Passaggio 2: sovrascrivere il metodo inizializza().

In questo metodo si svolgeranno tutte le azioni necessarie per iniziare il gioco: creazione del campo di gioco, creazione degli oggetti di gioco, ecc. Devi solo dichiarare questo metodo in una classe che eredita dalla classe Game . Esempio:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее an objectов
    }
}
Il metodo inizializza() è un analogo del metodo main() : è dove inizia ad essere eseguito tutto il codice scritto per il gioco.

3. Creare un campo da gioco

Anche la creazione di un campo da gioco consiste in soli due passaggi.

Passaggio 1: dividere il campo di gioco in celle.

L'intero campo di gioco è diviso in celle dal motore di gioco. La dimensione minima è 3x3, la massima è 100x100. La schermata di gioco ha una dimensione costante. Può essere diviso in diversi numeri di celle. Ad esempio, larghezza 7 e altezza 9:
Capitolo
Tieni presente che la numerazione delle celle inizia dall'angolo in alto a sinistra. Per impostare la dimensione del campo di gioco, utilizzare il metodo void setScreenSize(int larghezza, int altezza) . Imposta la dimensione del campo di gioco. Prende come parametri il numero di celle orizzontalmente (larghezza) e verticalmente (altezza). Di solito viene chiamato una volta all'inizio del gioco. Esempio:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
Quando scrivi un gioco, potresti aver bisogno di ottenere la larghezza e l'altezza attuali del campo di gioco. I metodi int getScreenWidth() e int getScreenHeight() sono utili a questo scopo .

Passaggio 2: attiva o disattiva la griglia (opzionale).

Se non ti piace la griglia nera che separa le celle sul campo di gioco, puoi disattivarla. Il metodo void showGrid(boolean isShow) attiva e disattiva la griglia che separa le celle. Per impostazione predefinita, viene visualizzata la griglia. Per disattivarlo, chiama questo metodo con il parametro false:
showGrid(false);
Risultato:
Capitolo
Per riattivare la rete chiamare:
showGrid(true);

4. Programma primitivo

Programma di esempio:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        //  Выключаем отображение сетки
        showGrid(false);
        //  Меняем фон центральной клетки на синий, и отображаем в ней “Х”
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
In questo esempio, la dimensione del campo di gioco è impostata su 3x3, la visualizzazione della griglia è disattivata e un simbolo "X" arancione delle dimensioni di una mezza cella è impostato al centro su uno sfondo blu. Questa sarà la prima cosa che il giocatore vedrà all'avvio del gioco.

5. Lavorare con le cellule del campo di gioco

Il fatto che possiamo dividere il campo di gioco in celle è fantastico, ma cosa possiamo fare con le celle stesse? Ogni cella del campo di gioco può essere impostata:
  • colore della cella (colore dello sfondo della cella);
  • testo (testo o numero);
  • colore del testo;
  • dimensione del testo come percentuale rispetto alla dimensione della cella.
Consideriamo i metodi per lavorare con le celle del campo di gioco :
  1. void setCellColor(int x, int y, Color color) — imposta il colore della cella con le coordinate (x, y):

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

  2. Color getCellColor(int x, int y) - restituisce il colore della cella con le coordinate (x, y):

    Color myColor = getCellColor(2, 0);

  3. void setCellValue(int x, int y, String value) - inserisce il valore del testo nella cella con le coordinate (x, y):

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

  4. String getCellValue(int x, int y) - restituisce il testo contenuto nella cella con coordinate (x, y):

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

  5. void setCellTextSize(int x, int y, int size) - imposta la dimensione del contenuto nella cella con le coordinate (x, y). size – altezza del testo come percentuale dell'altezza della cella:

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

  6. int getCellTextSize(int x, int y) - restituisce la dimensione del contenuto nella cella con le coordinate (x, y):

    int size = getCellTextSize(2 , 0);

  7. void setCellNumber(int x, int y, int value) - inserisce il valore numerico nella cella con le coordinate (x, y):

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

  8. int getCellNumber(int x, int y) - restituisce il numero contenuto nella cella con coordinate (x, y). Se la cella non contiene un numero, restituisce 0:

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

  9. void setCellTextColor(int x, int y, Color color) — imposta il colore del contenuto (testo) nella cella con le coordinate (x, y):

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

  10. Color getCellTextColor(int x, int y) - restituisce il colore del contenuto (testo) in una cella con coordinate (x, y):

    Color textColor = getCellTextColor(1, 3);
Per comodità, esistono diversi metodi setCellValueEx() con diversi set di parametri:
  1. void setCellValueEx(int ​​x, int y, Color cellColor, String value) — imposta la cella con le coordinate (x, y) colore di sfondo cellColor e valore del contenuto:

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

  2. void setCellValueEx(int ​​x, int y, Color cellColor, String value, Color textColor) — imposta la cella con le coordinate (x, y) colore di sfondo cellColor, valore del contenuto e colore del contenuto textColor:

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

  3. void setCellValueEx(int ​​x, int y, Color cellColor, String value, Color textColor, int textSize); — imposta la cella con le coordinate (x, y) colore di sfondo cellColor, valore del contenuto, colore del contenuto textColor e dimensione del contenuto textSize:

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

6. Lavorare con il colore

I colori nel motore di gioco sono controllati dall'enumerazione Color , che contiene valori univoci per 148 colori. E anche il valore speciale NONE: assenza di colore. Esempio di lavoro con il colore:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
A volte potresti voler ottenere una serie di tutti i colori esistenti. Per fare ciò, utilizzare il metodo valori() . Per esempio:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
Ottenere il numero del colore nella tavolozza è molto semplice:
Color color = Color.RED;
int redIndex = color.ordinal(); //  Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); //  Номер синего цвета
Puoi anche ottenere un colore tramite il suo numero:
//  переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];

7. Finestre di dialogo

Alla fine del gioco, il giocatore deve essere informato della vittoria o della sconfitta. Esiste un metodo speciale per questo che visualizza una finestra di dialogo sulla schermata di gioco:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Qui:
  • cellColor : colore di sfondo della finestra di dialogo;
  • messaggio : testo del messaggio;
  • textColor : colore del testo del messaggio;
  • textSize : dimensione del testo del messaggio.
La finestra di dialogo si chiude da sola se l'utente preme la barra spaziatrice.

8. Metodi di utilità

I numeri casuali vengono spesso utilizzati durante la scrittura di giochi. Per facilitare l'ottenimento di numeri casuali, è possibile utilizzare i metodi del motore di scarto:
  1. int getRandomNumber(int max) - restituisce un numero intero casuale da 0 a (max–1) compreso.

  2. int getRandomNumber(int min, int max) - restituisce un numero intero casuale da min a (max–1) compreso.

9. Limitazioni del motore di gioco

Per eseguire i giochi sul sito, questi vengono tradotti in JavaScript sul server. A questo proposito sorgono alcune restrizioni. In particolare, quando si scrivono giochi utilizzando il motore JavaRush, non è possibile lavorare con file, né utilizzare tutti i metodi della classe System , ad eccezione di currentTimeMillis() , setOut() , setErr() , arrayscopy() . Puoi anche utilizzare i campi err e out . Violando queste restrizioni, il gioco, ovviamente, potrà essere compilato ed eseguito, ma non sarà possibile pubblicarlo. Inoltre, non potrai pubblicare un gioco con loop infiniti. È tutto! Se vuoi saperne di più sulla sezione Giochi, ecco qualche documentazione utile che può aiutarti:
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION