JavaRush /Java блогу /Random-KY /JavaRush боюнча "Оюндар" бөлүмү: Оюн кыймылдаткычы

JavaRush боюнча "Оюндар" бөлүмү: Оюн кыймылдаткычы

Группада жарыяланган
JavaRushтан "Оюндар" - бул популярдуу компьютердик оюндарды жазуу үчүн чоң тапшырма-долбоорлорду камтыган жаңы бөлүм. Аларды жасоо көрүнгөндөн оңой: ар бир долбоор эки ондогон кошумча тапшырмаларга бөлүнөт. Этап-этабы менен тапшырмаларды аткаруу менен, сиз өз оюнуңузду жазасыз, андан кийин ага уникалдуу "функцияларды" кошуп, досторуңуз менен бөлүшө аласыз. бөлүмОюндар жөнөкөй JavaRush оюн кыймылдаткычын колдонушат . Бул макалада биз анын негизги өзгөчөлүктөрү жана оюнду жазуу жараяны кандай болот жөнүндө сүйлөшөбүз .
  1. Киришүү
  2. Оюнду инициализациялоо
  3. Оюн талаасын түзүү
  4. Примитивдик программа
  5. Оюн талаасынын клеткалары менен иштөө
  6. Түс менен иштөө
  7. Диалог кутучалары
  8. Пайдалуу методдор
  9. Оюн кыймылдаткычынын чектөөлөрү

1. Киришүү

Иштеп чыгуучу тарабынан компьютердик оюнду ишке ашырууда үч этап бар:
  1. Оюнду инициализациялоо – бул даярдык аракеттери: оюн талаасынын өлчөмүн жана чиймесин орнотуу, оюн an objectтерин баштапкы абалга келтирүү жана орнотуу, ошондой эле оюндун башында аткарылууга тийиш болгон башка аракеттер.

  2. Оюн процесси. Бул оюн an objectилеринин кыймылын, оюнчунун аракеттерин, топтолгон упайларды эсепке алууну, ошондой эле белгилүү бир аралыкта же баскычтарды басуу менен аткарылышы керек болгон башка аракеттерди камтыйт.

  3. Оюнду бүтүрүү. Бул анимацияларды токтотуу, жеңиш же жеңилүү жөнүндө жарыялоо жана оюндун аягында аткарылышы керек болгон башка аракеттерди камтыйт.

2. Оюнду инициализациялоо

Оюнду баштоо эки эле кадамдан турат:

1-кадам: негизги оюн классын түзүү.

JavaRush оюн кыймылдаткычынын негизинде оюнуңузду өнүктүрүү үчүн класс түзүп, аны Оюн классынан (com.javarush.engine.cell.Game) мурасташыңыз керек . Бул сиздин классыңызга оюн кыймылдаткычында ыкмаларды чакыруу мүмкүнчүлүгүн жана кыймылдаткычка сиздин ыкмаларыңызды чакыруу мүмкүнчүлүгүн берет. Мисал:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

2-кадам: initialize() ыкмасын жокко чыгарыңыз.

Бул ыкмада оюнду баштоо үчүн зарыл болгон бардык аракеттер ишке ашат: оюн талаасын түзүү, оюн an objectтерин түзүү ж.б. Сиз жөн гана бул ыкманы Game классынан мураска алган класста жарыялооңуз керек . Мисал:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее an objectов
    }
}
initialize() методу main() методунун аналогу болуп саналат : бул жерде оюн үчүн жазылган бардык code аткарыла баштайт.

3. Оюн талаасын түзүү

Оюн талаасын түзүү да эки гана кадамдан турат.

1-кадам: оюн талаасын клеткаларга бөлүңүз.

Бүт оюн талаасы оюн кыймылдаткычы менен клеткаларга бөлүнгөн. Минималдуу өлчөмү 3х3, эң чоңу 100х100. Оюндун экраны туруктуу өлчөмгө ээ. Аны ар кандай сандагы клеткаларга бөлүүгө болот. Мисалы, туурасы 7 жана бийиктиги 9:
бөлүм
Уячаларды номерлөө жогорку сол бурчтан башталарын эске алыңыз. Оюн талаасынын өлчөмүн коюу үчүн, void setScreenSize(int width, int height) ыкмасын колдонуңуз . Ал оюн талаасынын өлчөмүн белгилейт. Ал параметр катары горизонталдуу (туурасы) жана вертикалдуу (бийиктиги) боюнча клеткалардын санын алат. Ал, адатта, оюн башталганда бир жолу чакырылат. Мисал:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
       //  задали размер поля 7x9 клеток
       setScreenSize(7, 9);
        ...
    }
}
Оюнду жазып жатканда, сиз оюн талаасынын учурдагы туурасын жана бийиктигин алышыңыз керек болушу мүмкүн. Бул үчүн int getScreenWidth() жана int getScreenHeight() ыкмалары пайдалуу .

2-кадам: торду күйгүзүңүз же өчүрүңүз (милдеттүү эмес).

Эгер сизге оюн талаасындагы уячаларды бөлүп турган кара тор жакпаса, анда аны өчүрө аласыз. Void showGrid(логикалык isShow) ыкмасы уячаларды бөлүүчү торлорду күйгүзөт жана өчүрөт. Демейки боюнча, сетка көрсөтүлөт. Аны өчүрүү үчүн, бул ыкманы жалган параметр менен чакырыңыз:
showGrid(false);
Натыйжа:
бөлүм
Торду кайра иштетүү үчүн чалыңыз:
showGrid(true);

4. Примитивдик программа

Мисал программа:
public class MySuperGame extends Game {

    @Override
    public void initialize() {

        //  Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        //  Выключаем отображение сетки
        showGrid(false);
        //  Меняем фон центральной клетки на синий, и отображаем в ней “Х”
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
    }
}
Бул мисалда оюн талаасынын өлчөмү 3x3 болуп коюлган, тор дисплей өчүрүлгөн жана көк фондо борбордо кызгылт сары жарым клетка өлчөмүндөгү "X" белгиси коюлган. Бул оюнчу оюнду баштаганда биринчи көргөн нерсе болот.

5. Оюн талаасынын клеткалары менен иштөө

Оюн талаасын клеткаларга бөлгөнүбүз абдан жакшы, бирок клеткалардын өздөрү менен эмне кылсак болот? Оюн талаасынын ар бир уячасын коюуга болот:
  • клетка түсү (клетканын фонунун түсү);
  • текст (текст же сан);
  • текст түсү;
  • тексттин өлчөмү клетканын өлчөмүнө карата пайыз катары.
Оюн талаасынын клеткалары менен иштөө ыкмаларын карап көрөлү :
  1. void setCellColor(int x, int y, Color color) — уячанын түсүн координаттары (x, y) менен белгилейт:

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

  2. Color getCellColor(int x, int y) - координаттары (x, y) менен уячанын түсүн кайтарат:

    Color myColor = getCellColor(2, 0);

  3. void setCellValue(int x, int y, String value) - тексттин маанисин координаттары (x, y) менен уячага жайгаштырат:

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

  4. String getCellValue(int x, int y) - координаттары (x, y) менен уячадагы текстти кайтарат:

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

  5. void setCellTextSize(int x, int y, int size) - уячадагы мазмундун өлчөмүн координаттары (x, y) менен белгилейт. өлчөмү – тексттин бийиктиги уячанын бийиктигинин пайызы катары:

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

  6. int getCellTextSize(int x, int y) - координаттары (x, y) менен уячадагы мазмундун өлчөмүн кайтарат:

    int size = getCellTextSize(2 , 0);

  7. void setCellNumber(int x, int y, int value) - сандын маанисин координаттары (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) - координаттары (x, y) менен уячада камтылган санды кайтарат. Эгер уячада сан жок болсо, 0 кайтарат:

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

  9. void setCellTextColor(int x, int y, Color color) — уячадагы мазмундун (тексттин) түсүн координаттары (x, y) менен белгилейт:

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

  10. Color getCellTextColor(int x, int y) - координаттары (x, y) менен уячадагы мазмундун (тексттин) түсүн кайтарат:

    Color textColor = getCellTextColor(1, 3);
Ыңгайлуулук үчүн, ар кандай параметрлер топтому менен бир нече setCellValueEx() ыкмалары бар :
  1. void setCellValueEx(int x, int y, Color cellColor, String value) — уячаны координаттары менен (x, y) фондо түстүү клетканынТүс жана мазмун маанисин орнотот:

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

  2. void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor) — уячаны координаттары (x, y) фонунун түсү клеткасыТүс, мазмундун мааниси жана мазмундун түсү текстТүсү менен белгилейт:

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

  3. void setCellValueEx(int ​​x, int y, Color cellColor, String мааниси, Color textColor, int textSize); — уячаны координаттары (x, y) фон түсү уячасыТүсү, мазмундун мааниси, мазмундун түсү текстиТүсү жана мазмундун өлчөмүн белгилейт.

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

6. Түс менен иштөө

Оюн кыймылдаткычындагы түстөр 148 түс үчүн уникалдуу маанилерди камтыган Color enum тарабынан башкарылат. Ошондой эле өзгөчө баалуулук ЖОК - түстүн жоктугу. Түс менен иштөөнүн мисалы:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
Кээде сиз учурдагы бардык түстөрдүн массивдерин алгыңыз келиши мүмкүн. Бул үчүн, values ​​​​() ыкмасын колдонуңуз . Мисалы:
//  переменной colors присваивается массив, содержащий все доступные цвета.
Color[] colors = Color.values();
Палитрадагы түс номерин алуу абдан жөнөкөй:
Color color = Color.RED;
int redIndex = color.ordinal(); //  Номер красного цвета

int blueIndex = Color.BLUE.ordinal(); //  Номер синего цвета
Сиз ошондой эле анын саны боюнча түс ала аласыз:
//  переменной color присваивается цвет с индексом 10 из enum Color.
Color color = Color.values()[10];

7. Диалог кутучалары

Оюндун аягында оюнчуга жеңиш же жеңилүү тууралуу маалымат берorши керек. Бул үчүн оюн экранында диалог кутучасын көрсөткөн атайын ыкма бар:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Бул жерде:
  • cellColor — диалог терезесинин фон түсү;
  • билдирүү — билдирүү тексти;
  • textColor — билдирүү текстинин түсү;
  • textSize — билдирүү текстинин өлчөмү.
Колдонуучу боштук тилкесин басса, диалог өзү жабылат.

8. Пайдалуу методдор

Оюндарды жазууда кокус сандар көп колдонулат. Кокус сандарды алууну жеңилдетүү үчүн, сиз кыймылдаткычтын сынык ыкмаларын колдонсоңуз болот:
  1. int getRandomNumber(int max) - 0дөн (макс–1) камтылган кокус бүтүн санды кайтарат.

  2. int getRandomNumber(int min, int max) - минден (макс–1) камтылган кокус бүтүн санды кайтарат.

9. Оюн кыймылдаткычынын чектөөлөрү

Сайтта оюндарды иштетүү үчүн алар serverде JavaScript тorне которулат. Буга байланыштуу кээ бир чектөөлөр пайда болот. Атап айтканда, JavaRush кыймылдаткычын колдонуу менен оюндарды жазганда, сиз файлдар менен иштей албайсыз, ошондой эле учурдагыTimeMillis() , setOut() , setErr() , arrayscopy() дан башка System классынын бардык ыкмаларын колдоно албайсыз . Ката жана чыгуу талааларын да колдонсоңуз болот . Бул чектөөлөрдү бузуу менен, оюн, албетте, түзүлүп, иштетorши мүмкүн, бирок аны жарыялоо мүмкүн эмес. Ошондой эле чексиз циклдер менен оюнду жарыялай албайсыз. Баары болду! Эгер сиз Оюндар бөлүмү жөнүндө көбүрөөк билгиңиз келсе, бул жерде жардам бере турган кээ бир пайдалуу documentтер бар:
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION