CodeGym /จาวาบล็อก /สุ่ม /ส่วนเกมใน CodeGym: Game engine
John Squirrels
ระดับ
San Francisco

ส่วนเกมใน CodeGym: Game engine

เผยแพร่ในกลุ่ม
"เกม" จาก CodeGymเป็นส่วนใหม่ที่มีงานใหญ่ที่เกี่ยวข้องกับการเขียนเกมคอมพิวเตอร์ยอดนิยม สร้างได้ง่ายกว่าที่เห็น: แต่ละโครงการแบ่งออกเป็นยี่สิบงานย่อย เมื่อทำภารกิจทีละขั้นตอน คุณจะเขียนเกมของคุณเอง จากนั้นคุณสามารถเพิ่มคุณสมบัติพิเศษและแบ่งปันกับเพื่อน ๆ ส่วน "เกม" ใน CodeGym: Game engine - 1เกมดังกล่าวใช้เครื่องมือเกม CodeGym อย่างง่าย ในบทความนี้เราจะอธิบายคุณลักษณะหลักและลักษณะของกระบวนการเขียนเกม

1. บทนำ

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

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

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

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

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

import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {
    ...
}
ขั้นตอนที่ 2: แทนที่เมธอด initialize() การกระทำทั้งหมดที่จำเป็นในการเริ่มเกมจะเกิดขึ้นในวิธีนี้: การสร้างสนามแข่งขัน การสร้างวัตถุในเกม ฯลฯ คุณเพียงแค่ต้องประกาศวิธีนี้ในคลาสที่สืบทอดGameคลาส ตัวอย่างเช่น:

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
    }
}
วิธีการ นี้initialize()คล้ายคลึงกับmain()วิธีการ: เป็นจุดเริ่มต้นสำหรับโค้ดทั้งหมดที่เขียนขึ้นสำหรับเกม

3. การสร้างสนามเด็กเล่น

การสร้างสนามเด็กเล่นประกอบด้วยสองขั้นตอนเท่านั้น ขั้นตอนที่ 1: แบ่งสนามเด็กเล่นออกเป็นเซลล์ สนามเด็กเล่นทั้งหมดถูกแบ่งออกเป็นเซลล์โดยเอ็นจิ้นเกม ขนาดต่ำสุดคือ 3x3; สูงสุดคือ 100x100 ขนาดหน้าจอเกมคงที่ สามารถแบ่งออกเป็นจำนวนเซลล์ต่างๆ ตัวอย่างเช่น กว้าง 7 เซลล์ สูง 9 เซลล์: ส่วน "เกม" ใน CodeGym: Game engine - 2โปรดทราบว่าเซลล์จะมีหมายเลขเริ่มต้นจากมุมบนซ้าย ในการกำหนดขนาดของสนามเด็กเล่นให้ใช้void setScreenSize(int width, int height)วิธีการ กำหนดขนาดของสนามแข่งขัน พารามิเตอร์แสดงถึงจำนวนเซลล์ในแนวนอน (กว้าง) และแนวตั้ง (สูง) โดยปกติจะเรียกเพียงครั้งเดียวเมื่อเริ่มเกม ตัวอย่างเช่น:

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);
        ...
    }
}
เมื่อเขียนเกม คุณอาจต้องทราบความกว้างและความสูงปัจจุบันของสนามเด็กเล่น ในการทำเช่นนี้int getScreenWidth()และint getScreenHeight()วิธีการ จะมีประโยชน์ ขั้นตอนที่ 2: เปิดหรือปิดกริด (ไม่บังคับ) หากคุณไม่ชอบเส้นตารางสีดำที่แยกเซลล์ในสนามแข่งขัน คุณสามารถปิดได้ เมธอด นี้void showGrid(boolean isShow)จะเปิดและปิดกริด ตามค่าเริ่มต้น เส้นตารางจะแสดงขึ้น หากต้องการปิด ให้เรียกเมธอดนี้โดยใช้เท็จเป็นอาร์กิวเมนต์:

showGrid(false);
ผลลัพธ์: ส่วน "เกม" ใน CodeGym: Game engine - 3หากต้องการเปิดกริดอีกครั้ง ให้โทร:

showGrid(true);

4. โปรแกรมดั้งเดิม

นี่คือตัวอย่างของโปรแกรม:

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);
    }
}
ในตัวอย่างนี้ ฟิลด์เกมถูกตั้งค่าเป็น 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% of the cell height
    

  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)— กำหนดสีพื้นหลัง (cellColor) และเนื้อหา (ค่า) ของเซลล์ด้วยพิกัด (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 value, Color textColor, int textSize)— ตั้งค่าสีพื้นหลัง (cellColor), เนื้อหา (ค่า), สีข้อความ (textColor) และขนาดข้อความ (textSize) ของเซลล์ที่มีพิกัด (x, y):

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

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

เป็นColor enumผู้รับผิดชอบสีในเครื่องยนต์เกม มีค่าที่ไม่ซ้ำกันสำหรับ 148 สี นอกจากนี้ยังมีค่าพิเศษ (ไม่มี) ที่แสดงถึงไม่มีสี นี่คือตัวอย่างการทำงานกับสี:

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.
บางครั้งคุณอาจต้องการอาร์เรย์ของสีที่มีอยู่ทั้งหมด ในการทำเช่นนี้ให้ใช้values()วิธีการ ตัวอย่างเช่น:

Color[] colors = Color.values();  // The colors variable is assigned an array containing all available colors.
ง่ายมากที่จะรับดัชนีของสีในจานสี:

Color color = Color.RED;
int redIndex = color.ordinal();  // Index of red

int blueIndex = Color.BLUE.ordinal();  // Index of blue
คุณยังสามารถรับสีได้จากดัชนี:

Color color = Color.values()[10];  // The color variable is assigned the color with index 10 in the Color enum.

7. กล่องโต้ตอบ

ในตอนท้ายของเกม คุณต้องรายงานการชนะหรือแพ้ให้ผู้เล่นทราบ ในการทำเช่นนี้ มีวิธีพิเศษที่แสดงกล่องโต้ตอบบนหน้าจอเกม:

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

8. วิธีการยูทิลิตี้

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

  2. int getRandomNumber(int min, int max)— ส่งกลับจำนวนเต็มแบบสุ่มจากขั้นต่ำถึง (สูงสุด-1) รวม

นั่นคือทั้งหมดที่สำหรับตอนนี้! หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับส่วน "เกม" ต่อไปนี้เป็นเอกสารที่มีประโยชน์ซึ่งสามารถช่วยได้:
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION