JavaRush /Java Blog /Random-TL /Seksyon "Mga Laro" sa JavaRush: Game engine

Seksyon "Mga Laro" sa JavaRush: Game engine

Nai-publish sa grupo
Ang "Mga Laro" mula sa JavaRush ay isang bagong seksyon na naglalaman ng malalaking gawain-proyekto para sa pagsusulat ng mga sikat na laro sa computer. Ang paggawa ng mga ito ay mas madali kaysa sa tila: ang bawat proyekto ay nahahati sa dalawang dosenang mga subtask. Sa pamamagitan ng pagkumpleto ng mga gawain nang sunud-sunod, isusulat mo ang iyong laro, at pagkatapos ay maaari kang magdagdag ng mga natatanging "feature" dito at ibahagi ito sa mga kaibigan. KabanataAng mga laro ay gumagamit ng simpleng JavaRush game engine . Sa artikulong ito ay pag-uusapan natin ang mga pangunahing tampok nito at kung ano ang hitsura ng proseso ng pagsulat ng isang laro.
  1. Panimula
  2. Pagsisimula ng laro
  3. Paglikha ng isang larangan ng paglalaro
  4. Primitive na programa
  5. Paggawa gamit ang mga cell ng playing field
  6. Paggawa gamit ang kulay
  7. Mga dialog box
  8. Mga Paraan ng Utility
  9. Mga limitasyon ng engine ng laro

1. Panimula

Mayroong tatlong yugto sa pagpapatupad ng laro sa computer sa bahagi ng developer:
  1. Ang pagsisimula ng laro ay mga aksyong paghahanda: pagtatakda ng laki at pagguhit ng larangan ng paglalaro, paglikha at pag-install ng mga bagay sa laro sa paunang posisyon, pati na rin ang iba pang mga aksyon na dapat gawin sa simula ng laro.

  2. Proseso ng laro. Kabilang dito ang paggalaw ng mga bagay sa laro, mga aksyon ng manlalaro, pag-account para sa mga puntos na nakuha, pati na rin ang iba pang mga aksyon na dapat gawin sa ilang partikular na pagitan o sa pamamagitan ng pagpindot sa mga pindutan.

  3. Pagtatapos ng laro. Kabilang dito ang paghinto ng mga animation, pag-uulat ng tagumpay o pagkatalo, at iba pang mga aksyon na kailangang gawin sa pagtatapos ng laro.

2. Pagsisimula ng laro

Ang pagsisimula ng laro ay binubuo lamang ng dalawang hakbang:

Hakbang 1: lumikha ng pangunahing klase ng laro.

Upang mabuo ang iyong laro batay sa JavaRush game engine, kailangan mong lumikha ng isang klase at magmana nito mula sa klase ng Laro (com.javarush.engine.cell.Game). Bibigyan nito ang iyong klase ng kakayahang tumawag ng mga pamamaraan sa game engine, at ng kakayahan para sa engine na tawagan ang iyong mga pamamaraan. Halimbawa:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

Hakbang 2: i-override ang initialize() na paraan.

Sa pamamaraang ito, ang lahat ng mga aksyon na kinakailangan upang simulan ang laro ay magaganap: paglikha ng larangan ng paglalaro, paglikha ng mga bagay sa laro, atbp. Kailangan mo lang ideklara ang paraang ito sa isang klase na nagmana mula sa klase ng Laro . Halimbawa:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее an objectов
    }
}
Ang initialize() method ay isang analogue ng main() method : ito ay kung saan ang lahat ng code na nakasulat para sa laro ay magsisimulang isagawa.

3. Paglikha ng isang playing field

Ang paglikha ng isang playing field ay binubuo lamang ng dalawang hakbang.

Hakbang 1: hatiin ang playing field sa mga cell.

Ang buong larangan ng paglalaro ay nahahati sa mga cell ng engine ng laro. Ang minimum na laki ay 3x3, ang maximum ay 100x100. Ang screen ng laro ay may pare-parehong laki. Maaari itong hatiin sa iba't ibang bilang ng mga cell. Halimbawa, lapad 7 at taas 9:
Kabanata
Pakitandaan na ang cell numbering ay nagsisimula sa kaliwang sulok sa itaas. Para itakda ang laki ng playing field, gamitin ang void setScreenSize(int width, int height) method . Itinatakda nito ang laki ng larangan ng paglalaro. Kinukuha bilang mga parameter ang bilang ng mga cell nang pahalang (lapad) at patayo (taas). Karaniwan itong tinatawag nang isang beses kapag nagsimula ang laro. Halimbawa:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
Kapag nagsusulat ng isang laro, maaaring kailanganin mong makuha ang kasalukuyang lapad at taas ng playing field. Ang mga pamamaraan ng int getScreenWidth() at int getScreenHeight() ay kapaki-pakinabang para dito .

Hakbang 2: I-on o i-off ang grid (opsyonal).

Kung hindi mo gusto ang itim na grid na naghihiwalay sa mga cell sa playing field, maaari mo itong i-off. Ang paraan ng void showGrid(boolean isShow) ay nag-o-on at naka-off sa grid na naghihiwalay sa mga cell. Bilang default, ipinapakita ang grid. Upang i-off ito, tawagan ang paraang ito gamit ang false parameter:
showGrid(false);
Resulta:
Kabanata
Upang i-on muli ang grid, tumawag sa:
showGrid(true);

4. Primitive na programa

Halimbawa ng programa:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        //  Выключаем отображение сетки
        showGrid(false);
        //  Меняем фон центральной клетки на синий, и отображаем в ней “Х”
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
Sa halimbawang ito, ang laki ng playing field ay nakatakda sa 3x3, ang grid display ay naka-off, at isang orange na kalahating cell na sized na "X" na simbolo ay nakatakda sa gitna sa isang asul na background. Ito ang unang makikita ng manlalaro kapag sinimulan ang laro.

5. Paggawa gamit ang mga cell ng playing field

Ang katotohanan na maaari nating hatiin ang larangan ng paglalaro sa mga cell ay mahusay, ngunit ano ang maaari nating gawin sa mga cell mismo? Ang bawat cell ng playing field ay maaaring itakda:
  • kulay ng cell (kulay ng background ng cell);
  • teksto (teksto o numero);
  • Kulay ng teksto;
  • laki ng teksto bilang isang porsyento na nauugnay sa laki ng cell.
Isaalang-alang natin ang mga pamamaraan para sa pagtatrabaho sa mga cell ng larangan ng paglalaro :
  1. void setCellColor(int x, int y, Kulay ng kulay) — nagtatakda ng kulay ng cell na may mga 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) - ibinabalik ang kulay ng cell na may mga coordinate (x, y):

    Color myColor = getCellColor(2, 0);

  3. void setCellValue(int x, int y, String value) - inilalagay ang text value sa cell na may mga 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) - ibinabalik ang text na nakapaloob sa cell na may mga coordinate (x, y):

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

  5. void setCellTextSize(int x, int y, int size) - nagtatakda ng laki ng nilalaman sa cell na may mga coordinate (x, y). laki - taas ng teksto bilang isang porsyento ng taas ng cell:

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

  6. int getCellTextSize(int x, int y) - ibinabalik ang laki ng nilalaman sa cell na may mga coordinate (x, y):

    int size = getCellTextSize(2 , 0);

  7. void setCellNumber(int x, int y, int value) - inilalagay ang halaga ng numero sa cell na may mga 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) - ibinabalik ang numerong nakapaloob sa cell na may mga coordinate (x, y). Kung ang cell ay walang numero, nagbabalik ng 0:

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

  9. void setCellTextColor(int x, int y, Kulay ng kulay) — nagtatakda ng kulay ng nilalaman (teksto) sa cell na may mga coordinate (x, y):

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

  10. Kulay getCellTextColor(int x, int y) - ibinabalik ang kulay ng nilalaman (teksto) sa isang cell na may mga coordinate (x, y):

    Color textColor = getCellTextColor(1, 3);
Para sa kaginhawahan, mayroong ilang setCellValueEx() na pamamaraan na may iba't ibang hanay ng mga parameter:
  1. void setCellValueEx(int ​​​​x, int y, Color cellColor, String value) — itinatakda ang cell na may mga coordinate (x, y) background color cellColor at content value:

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

  2. void setCellValueEx(int ​​​​x, int y, Color cellColor, String value, Color textColor) — itinatakda ang cell na may mga coordinate (x, y) background color cellColor, content value at content color textColor:

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

  3. void setCellValueEx(int ​​​​x, int y, Color cellColor, String value, Color textColor, int textSize); — itinatakda ang cell na may mga coordinate (x, y) background color cellColor, content value, content color textColor at content size textSize:

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

6. Paggawa gamit ang kulay

Ang mga kulay sa engine ng laro ay kinokontrol ng Color enum , na naglalaman ng mga natatanging halaga para sa 148 na kulay. At din ang espesyal na halaga WALA - kawalan ng kulay. Halimbawa ng pagtatrabaho sa kulay:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
Minsan maaaring gusto mong makakuha ng hanay ng lahat ng umiiral na mga kulay. Upang gawin ito, gamitin ang values() method . Halimbawa:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
Ang pagkuha ng numero ng kulay sa palette ay napakasimple:
Color color = Color.RED;
int redIndex = color.ordinal(); //  Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); //  Номер синего цвета
Maaari ka ring makakuha ng isang kulay sa pamamagitan ng numero nito:
//  переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];

7. Mga dialog box

Sa pagtatapos ng laro, dapat ipaalam sa manlalaro ang tagumpay o pagkatalo. Mayroong isang espesyal na paraan para dito na nagpapakita ng isang dialog box sa screen ng laro:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
dito:
  • cellColor — kulay ng background ng dialog box;
  • mensahe — text ng mensahe;
  • textColor — kulay ng text ng mensahe;
  • textSize — laki ng text ng mensahe.
Magsasara ang dialog kung pinindot ng user ang space bar.

8. Mga pamamaraan ng utility

Ang mga random na numero ay kadalasang ginagamit kapag nagsusulat ng mga laro. Upang gawing mas madali ang pagkuha ng mga random na numero, maaari mong gamitin ang mga pamamaraan ng scrap engine:
  1. int getRandomNumber(int max) - nagbabalik ng random na integer mula 0 hanggang (max–1) kasama.

  2. int getRandomNumber(int min, int max) - nagbabalik ng random na integer mula min hanggang (max–1) inclusive.

9. Mga limitasyon ng makina ng laro

Upang magpatakbo ng mga laro sa site, isinalin ang mga ito sa JavaScript sa server. Kaugnay nito, lumitaw ang ilang mga paghihigpit. Sa partikular, kapag nagsusulat ng mga laro gamit ang JavaRush engine, hindi ka maaaring gumana sa mga file, o gamitin ang lahat ng mga pamamaraan ng System class , maliban sa currentTimeMillis() , setOut() , setErr() , arrayscopy() . Maaari mo ring gamitin ang err at out na mga field . Sa pamamagitan ng paglabag sa mga paghihigpit na ito, ang laro, siyempre, ay maaaring i-compile at patakbuhin, ngunit hindi ito magiging posible na mai-publish. Hindi ka rin makakapag-publish ng laro na may walang katapusang mga loop. Iyon lang! Kung gusto mong matuto nang higit pa tungkol sa seksyong Mga Laro, narito ang ilang kapaki-pakinabang na dokumentasyon na makakatulong:
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION