JavaRush /จาวาบล็อก /Random-TH /ส่วน "เกม" บน JavaRush: เอ็นจิ้นเกม

ส่วน "เกม" บน JavaRush: เอ็นจิ้นเกม

เผยแพร่ในกลุ่ม
“เกม” จาก JavaRushเป็นส่วนใหม่ที่มีโครงการงานขนาดใหญ่สำหรับการเขียนเกมคอมพิวเตอร์ยอดนิยม ทำให้มันง่ายกว่าที่คิด: แต่ละโครงการแบ่งออกเป็นงานย่อยสองโหล เมื่อทำภารกิจให้เสร็จสิ้นทีละขั้นตอน คุณจะเขียนเกมของคุณ จากนั้นคุณสามารถเพิ่ม "คุณสมบัติ" ที่เป็นเอกลักษณ์ให้กับเกมและแบ่งปันกับเพื่อน ๆ ได้ บทเกมดังกล่าวใช้เอ็นจิ้นเกม JavaRush ที่เรียบง่าย ในบทความนี้เราจะพูดถึงคุณสมบัติที่สำคัญและกระบวนการเขียนเกมจะเป็นอย่างไร
  1. การแนะนำ
  2. การเริ่มต้นเกม
  3. การสร้างสนามเด็กเล่น
  4. โปรแกรมเบื้องต้น
  5. การทำงานกับเซลล์ของสนามเด็กเล่น
  6. ทำงานกับสี
  7. กล่องโต้ตอบ
  8. วิธีการอรรถประโยชน์
  9. ข้อจำกัดของเอ็นจิ้นเกม

1. บทนำ

ผู้พัฒนาเกมมีสามขั้นตอน:
  1. การเริ่มต้นเกมคือการดำเนินการเตรียมการ: การกำหนดขนาดและรูปวาดของสนามแข่งขัน การสร้างและติดตั้งวัตถุในเกมในตำแหน่งเริ่มต้น รวมถึงการดำเนินการอื่น ๆ ที่ต้องทำเมื่อเริ่มเกม

  2. กระบวนการเกม ซึ่งรวมถึงการเคลื่อนไหวของวัตถุในเกม การกระทำของผู้เล่น การคำนึงถึงคะแนนที่ได้รับ เช่นเดียวกับการกระทำอื่น ๆ ที่ต้องทำในช่วงเวลาหนึ่งหรือโดยการกดปุ่ม

  3. จบเกม ซึ่งรวมถึงการหยุดแอนิเมชั่น การประกาศชัยชนะหรือความพ่ายแพ้ และการกระทำอื่นๆ ที่ต้องทำเมื่อจบเกม

2. การเริ่มต้นเกม

การเริ่มต้นเกมประกอบด้วยสองขั้นตอน:

ขั้นตอนที่ 1: สร้างคลาสเกมหลัก

ในการพัฒนาเกมของคุณโดยใช้เอ็นจิ้นเกม JavaRush คุณต้องสร้างคลาสและสืบทอดคลาสจาก คลาส Game (com.javarush.engine.cell.Game) สิ่งนี้จะทำให้คลาสของคุณสามารถเรียกเมธอดบนเอ็นจิ้นเกมได้ และความสามารถของเอ็นจิ้นในการเรียกเมธอดของคุณ ตัวอย่าง:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}

ขั้นตอนที่ 2: แทนที่วิธีการเริ่มต้น ()

ในวิธีนี้ การกระทำทั้งหมดที่จำเป็นในการเริ่มเกมจะเกิดขึ้น: การสร้างสนามเด็กเล่น การสร้างวัตถุในเกม ฯลฯ คุณเพียงแค่ต้องประกาศวิธีการ นี้ในคลาสที่สืบทอดมาจาก คลาส Game ตัวอย่าง:
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {

    @Override
    public void initialize() {
        //  Тут выполняем все действия по инициализации игры и ее an objectов
    }
}
เมธอดInitialize()เป็นแบบอะนาล็อกของ เมธอด main() : เป็นที่ที่โค้ดทั้งหมดที่เขียนสำหรับเกมเริ่มถูกดำเนินการ

3. การสร้างสนามแข่งขัน

การสร้างสนามแข่งขันประกอบด้วยสองขั้นตอนเท่านั้น

ขั้นตอนที่ 1: แบ่งสนามเด็กเล่นออกเป็นเซลล์

สนามเด็กเล่นทั้งหมดถูกแบ่งออกเป็นเซลล์โดยเอ็นจิ้นเกม ขนาดขั้นต่ำคือ 3x3 ขนาดสูงสุดคือ 100x100 หน้าจอเกมมีขนาดคงที่ สามารถแบ่งออกเป็นหลายเซลล์ได้ ตัวอย่างเช่น กว้าง 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(boolean isShow)จะเปิดและปิดกริดที่แยกเซลล์ ตามค่าเริ่มต้น ตารางจะแสดงขึ้น หากต้องการปิด ให้เรียกเมธอดนี้พร้อมกับพารามิเตอร์ false:
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. เป็นโมฆะ setCellColor(int x, int y, สีสี) — ตั้งค่าสีของเซลล์ด้วยพิกัด (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. เป็นโมฆะ setCellValue(int x, int y, ค่าสตริง) - วางค่าข้อความในเซลล์ด้วยพิกัด (x, y):

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

  4. สตริง getCellValue(int x, int y) - ส่งคืนข้อความที่อยู่ในเซลล์ที่มีพิกัด (x, y):

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

  5. เป็นโมฆะ 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. เป็นโมฆะ 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. เป็นโมฆะ 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. เป็นโมฆะ setCellValueEx(int ​​​​x, int y, Color cellColor, ค่าสตริง) - ตั้งค่าเซลล์ด้วยพิกัด (x, y) เซลล์สีพื้นหลังสีและค่าเนื้อหา:

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

  2. เป็นโมฆะ setCellValueEx(int ​​​​x, int y, เซลล์สี, ค่าสตริง, สีข้อความสี) - ตั้งค่าเซลล์ด้วยพิกัด (x, y) สีพื้นหลัง เซลล์สีค่าเนื้อหาและสีของเนื้อหา textColor:

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

  3. เป็นโมฆะ setCellValueEx (int ​​x, int y, เซลล์สี, ค่าสตริง, สีข้อความสี, int textSize); — ตั้งค่าเซลล์ด้วยพิกัด (x, y) สีพื้นหลังของเซลล์สี ค่าเนื้อหา สีข้อความ สีข้อความ และขนาดเนื้อหา ขนาดข้อความ:

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

6. การทำงานกับสี

สีในเอ็นจิ้นเกมถูกควบคุมโดยColor enumซึ่งมีค่าเฉพาะสำหรับ 148 สี และยังมีค่าพิเศษ NONE - ไม่มีสีอีกด้วย ตัวอย่างการทำงานกับสี:
Color myColor = Color.WHITE;  //  переменной myColor присваивается белый цвет.
Color redColor = Color.RED; //  переменной redColor присваивается красный цвет.
Color blueColor = Color.BLUE; //  переменной blueColor присваивается синий цвет.
บางครั้งคุณอาจต้องการได้รับอาร์เรย์ของสีที่มีอยู่ทั้งหมด เมื่อต้องการทำเช่นนี้ ให้ใช้เมธอดvalue() ตัวอย่างเช่น:
//  переменной 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. กล่องโต้ตอบ

เมื่อจบเกม ผู้เล่นจะต้องได้รับแจ้งถึงชัยชนะหรือความพ่ายแพ้ มีวิธีการพิเศษในการแสดงกล่องโต้ตอบบนหน้าจอเกม:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
ที่นี่:
  • cellColor — สีพื้นหลังของกล่องโต้ตอบ
  • ข้อความ — ข้อความ;
  • textColor — สีข้อความข้อความ;
  • textSize - ขนาดตัวอักษรของข้อความ
กล่องโต้ตอบจะปิดเองหากผู้ใช้กดแป้นเว้นวรรค

8. วิธีการอรรถประโยชน์

ตัวเลขสุ่มมักใช้ในการเขียนเกม เพื่อให้ง่ายต่อการรับตัวเลขสุ่ม คุณสามารถใช้วิธี scrap engine:
  1. int getRandomNumber(int max) - คืนค่าจำนวนเต็มสุ่มตั้งแต่ 0 ถึง (สูงสุด–1)

  2. int getRandomNumber(int min, int max) - ส่งคืนจำนวนเต็มสุ่มจาก min ถึง (max–1) รวม

9. ข้อจำกัดของเอ็นจิ้นเกม

ในการรันเกมบนเว็บไซต์ เกมเหล่านั้นจะถูกแปลเป็น JavaScript บนเซิร์ฟเวอร์ ในเรื่องนี้ มีข้อจำกัดบางประการเกิดขึ้น โดยเฉพาะอย่างยิ่ง เมื่อเขียนเกมโดยใช้เอ็นจิ้น JavaRush คุณจะไม่สามารถทำงานกับไฟล์หรือใช้วิธีการทั้งหมดของ คลาส Systemยกเว้นcurrentTimeMillis() , setOut() , setErr() , arrayscopy( ) คุณยังสามารถใช้ ฟิลด์ ข้อผิดพลาดและออกได้ การละเมิดข้อจำกัดเหล่านี้ทำให้สามารถรวบรวมและรันเกมได้ แต่จะไม่สามารถเผยแพร่ได้ คุณจะไม่สามารถเผยแพร่เกมที่มีลูปไม่มีที่สิ้นสุดได้ นั่นคือทั้งหมด! หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับส่วนเกม นี่คือเอกสารที่เป็นประโยชน์บางส่วนที่สามารถช่วยได้:
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION