CodeGym /Blog Java /Ngẫu nhiên /Phần trò chơi trên CodeGym: Xử lý sự kiện
John Squirrels
Mức độ
San Francisco

Phần trò chơi trên CodeGym: Xử lý sự kiện

Xuất bản trong nhóm
"Trò chơi" từ CodeGym là một phần mới với các nhiệm vụ lớn thú vị, nơi bạn tạo các phiên bản trò chơi phổ biến của riêng mình. Thật đơn giản: mỗi dự án trò chơi được chia thành các nhiệm vụ phụ. Hoàn thành từng cái một và trò chơi đã hoàn thành. Bạn có thể chia sẻ nó trên các mạng xã hội và mời bạn bè của bạn chơi. Phần "Trò chơi" trên CodeGym: Xử lý sự kiện - 1Trong bài viết này, chúng tôi sẽ mô tả chi tiết các phương pháp xử lý sự kiện được sử dụng để viết trò chơi.

1. Thao tác với chuột

Công cụ trò chơi có hai phương pháp để làm việc với chuột:
  • void onMouseLeftClick(int x, int y);

  • void onMouseRightClick(int x, int y);

Bạn chỉ cần khai báo các phương thức này trong lớp kế thừa Gamevà thêm bất kỳ mã nào bạn muốn vào chúng. Công cụ trò chơi sẽ gọi chúng khi người dùng nhấp vào nút chuột.
  1. onMouseLeftClick(int x, int y)- được gọi bởi động cơ khi nhấp vào nút chuột trái. Các tham số của nó là tọa độ của ô của sân chơi nơi nhấp chuột xảy ra. Ô trên cùng bên trái có tọa độ (0, 0). Bạn cần ghi đè phương thức này để sử dụng nó.

  2. onMouseRightClick(int x, int y)— được gọi khi nút chuột phải được nhấp. Phương pháp này hoạt động giống như onMouseLeftClick(int x, int y)phương pháp.

Đây là một ví dụ về việc sử dụng các phương pháp này:

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Set the size of the playing field to 3x3
        setScreenSize(3, 3);

        // Paint the playing field white
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 3; y++) {
                setCellColor(x, y, Color.WHITE);
            }
        }
    }

    @Override
    public void onMouseLeftClick(int x, int y) {
        // Set "X" in the cell where the left mouse click occurred
        setCellValue(x, y, "X");
    }

    @Override
    public void onMouseRightClick(int x, int y) {
        // Clear the cell where the right mouse click occurred
        setCellValue(x, y, "");
    }
}

2. Thao tác với bàn phím

Công cụ trò chơi có hai phương pháp để làm việc với bàn phím:
  • void onKeyPress(Key key);

  • void onKeyReleased(Key key);

Nếu bạn muốn điều gì đó xảy ra khi người dùng nhấn một phím, hãy khai báo các phương thức này trong lớp kế thừa Trò chơi của bạn và thêm mã của bạn vào chúng. Công cụ trò chơi sẽ gọi chúng khi người dùng nhấn hoặc thả một phím.
  1. onKeyPress(Key key)— được gọi khi bất kỳ phím nào được nhấn. Tham số phím là phím được nhấn (hoặc Key.UNKNOWN).

  2. onKeyReleased(Key key)- được gọi khi bất kỳ phím nào được phát hành. Tham số chính là khóa tương ứng (hoặc Key.UNKNOWN).

Đây là một ví dụ về việc sử dụng các phương pháp này:

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
import com.codegym.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Set the size of the playing field to 3x3
        setScreenSize(3, 3);

        // Paint the playing field white
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 3; y++) {
                setCellColor(x, y, Color.WHITE);
            }
        }
    }

    @Override
    public void onKeyPress(Key key) {
        // When the space bar is pressed, the center cell turns yellow
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.YELLOW);
        }
    }

    @Override
    public void onKeyReleased(Key key) {
        // When the space bar is released, the center cell changes back to white
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.WHITE);
        }
    }
}
Quan trọng! Trong phiên bản hiện tại của công cụ trò chơi, loại Khóa có một bộ chín giá trị giới hạn:
Giá trị Phím do người dùng nhấn
Khóa.ENTER Người dùng nhấn Enter
Khóa.ESCAPE Người dùng nhấn Esc
Khóa.TẠM DỪNG Người dùng nhấn Tạm dừng
Khóa.SPACE Người dùng nhấn Space
Phím.LEFT Người dùng nhấn phím mũi tên trái
Khóa.RIGHT Người dùng nhấn phím mũi tên phải
Key.UP Người dùng nhấn phím mũi tên lên
Phím.DOWN Người dùng nhấn phím xuống
Key.UNKNOWN Người dùng đã nhấn một phím khác với những phím trên

3. Làm việc với bộ đếm thời gian

Nhiều trò chơi diễn ra trong thời gian thực, tức là ngay cả khi người dùng không làm gì, các sự kiện vẫn diễn ra trong trò chơi. Để cho phép bạn triển khai các trò chơi như vậy, chúng tôi đã thêm bộ đếm thời gian vào công cụ trò chơi. Nó hoạt động như thế này: bạn bật bộ hẹn giờ và đặt khoảng thời gian cho bộ hẹn giờ. Ví dụ: 500 mili giây. Sau đó, cứ sau nửa giây, công cụ trò chơi lại gọi onTurnTimer()phương thức này. Lặp đi lặp lại mãi mãi — cho đến khi tắt đồng hồ hẹn giờ. Vì vậy, làm thế nào để bạn sử dụng bộ đếm thời gian?
  1. Bật hẹn giờ.

    Để làm điều này, có một phương pháp đặc biệt. Phương thức lấy đối số là khoảng thời gian giữa các lần gọi tính bằng mili giây (1 mili giây = 1/1000 giây). Bạn chỉ cần gọi nó một lần và công cụ trò chơi sẽ bắt đầu gọi phương thức này sau mỗi mili giây.void setTurnTimer(int timeMs)onTurn()

  2. Ghi đè phương thức onTurn(int).

    Để làm điều này, bạn cần khai báo một phương thức trong lớp kế thừa . Phương pháp này sẽ được gọi bởi công cụ trò chơi. Hơn nữa, với mỗi lệnh gọi, công cụ trò chơi sẽ chuyển cho phương thức một mã định danh tuần tự cho lệnh gọi (1, 2, 3,…).void onTurn(int step)Game

  3. Tắt hẹn giờ.

    Nếu bộ hẹn giờ không còn cần thiết, chẳng hạn như khi người dùng hoàn thành trò chơi, bạn có thể tắt nó đi. Để làm điều này, bạn chỉ cần gọi phương thức.stopTurnTimer()

  4. Tăng tốc hoặc thay đổi bộ đếm thời gian.

    Trong một số trò chơi, tốc độ xảy ra các sự kiện liên tục tăng nhanh, do đó, sẽ rất thuận tiện để tăng tốc bộ hẹn giờ của chúng tôi (giảm thời gian giữa các cuộc gọi). Không gì có thể dễ dàng hơn: gọi lại setTurnTimer(int timeMs)một lần nữa với giá trị mới và thời gian giữa onTurn()các lần gọi sẽ thay đổi.

Ví dụ:

import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;

public class MySuperGame extends Game {
    …
    @Override
    public void initialize() {
    	// Create a playing field that is 3 cells x 3 cells
        setScreenSize(3, 3);
        showGrid(false);
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);

        setTurnTimer(500);   // Turn on the timer, the interval between calls is 500ms.
    }

    @Override
    public void onTurn(int step) {
        if(step == 100) {
            stopTurnTimer();  // If 100 calls have been made, turn off the timer
        }

        if (step % 2 == 1) {
            // If this call is odd, set the cell background to red
            setCellColor(1, 1, Color.RED);
        } 
        else {
            // If this call is even, set the cell background to blue
            setCellColor(1, 1, Color.BLUE);

        }
    }
    …
}
Trong ví dụ đơn giản này, chúng tôi đã tạo một trường có 3 ô x 3 ô. Sau đó, chúng tôi bắt đầu một bộ đếm thời gian sẽ gọi onTurn()phương thức cứ sau nửa giây. Cứ sau nửa giây, màu ô sẽ thay đổi, nhưng nội dung của nó sẽ không thay đổi. Sau 50 giây, màu sẽ không thay đổi nữa. Đó là tất cả cho bây giờ! Nếu bạn muốn tìm hiểu thêm về phần "Trò chơi", đây là một số tài liệu hữu ích có thể giúp:
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION