JavaRush /Blog Java /Random-VI /Mục "Trò chơi" trên JavaRush: Xử lý sự kiện

Mục "Trò chơi" trên JavaRush: Xử lý sự kiện

Xuất bản trong nhóm
“Trò chơi” từ JavaRush là một phần mới với các nhiệm vụ thú vị và có quy mô lớn để tạo phiên bản trò chơi phổ biến của riêng bạn. 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 đã sẵn sàng. Bạn có thể chia sẻ nó lên mạng xã hội và mời bạn bè cùng chơi. chươngTrong tài liệu này, chúng tôi sẽ nói chi tiết về các phương pháp xử lý sự kiện khi viết trò chơi.

1. Làm việ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 trò chơi được kế thừa từ Game, và viết bất kỳ mã nào vào chúng. Và chính công cụ trò chơi sẽ gọi chúng khi người dùng nhấn nút chuột.
  1. onMouseLeftClick(int x, int y)— được gọi bởi động cơ khi bạn nhấp vào nút chuột trái. Là đối số, nó nhận tọa độ của ô của sân chơi nơi xảy ra nhấp chuột. Ô trên cùng bên trái có tọa độ (0,0). Để sử dụng phương pháp này, nó phải được ghi đè.

  2. onMouseRightClick(int x, int y)- được gọi khi bạn nhấp chuột phải. Hoạt động tương tự như phương pháp onMouseLeftClick(int x, int y).
Ví dụ về việc sử dụng các phương pháp:
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
import com.javarush.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Устанавливаем размер игрового поля 3x3
        setScreenSize(3, 3);

        // Закрашиваем игровое поле белым цветом
        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) {
        // Ставим символ "X" в клетку по которой кликнули левой кнопкой мыши
        setCellValue(x, y, "X");
    }

    @Override
    public void onMouseRightClick(int x, int y) {
        // Очищаем клетку по которой кликнули правой кнопкой мыши
        setCellValue(x, y, "");
    }
}

2. Làm việ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 các hành động xảy ra khi người dùng nhấn một nút trên bàn phím, hãy khai báo các phương thức này trong lớp trò chơi kế thừa từ Trò chơi và viết mã của bạn vào đó. Bản thân công cụ trò chơi sẽ gọi chúng khi người dùng nhấn hoặc nhả một phím trên bàn phím.
  1. onKeyPress (Key key)- được gọi khi nhấn bất kỳ phím bàn phím nào. Giá trị của phím được nhấn (hoặc Key.UNKNOWN) được truyền cho phương thức dưới dạng đối số khóa.

  2. onKeyReleased (Key key)- được gọi khi bất kỳ phím bàn phím nào được thả ra. Đối số khóa lấy giá trị của khóa tương ứng (hoặc Key.UNKNOWN).
Ví dụ về việc sử dụng các phương pháp:
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;
import com.javarush.engine.cell.Key;

public class MySuperGame extends Game {
    @Override
    public void initialize() {
        // Устанавливаем размер игрового поля 3x3
        setScreenSize(3, 3);

        // Закрашиваем игровое поле белым цветом
        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) {
        // При нажатии пробела, центральная клетка становится желтой
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.YELLOW);
        }
    }

    @Override
    public void onKeyReleased(Key key) {
        // При отпускании пробела, центральной клетке возвращается белый цвет
        if (key == Key.SPACE) {
            setCellColor(1, 1, Color.WHITE);
        }
    }
}
Quan trọng! Trong phiên bản hiện tại của động cơ, loại Khóa chỉ có thể chấp nhận một bộ giá trị giới hạn (9 chiếc):
Nghĩa Nội dung người dùng đã nhấp vào
Phím.ENTER Người dùng nhấn nút Enter
Key.ESCAPE Người dùng nhấn nút Esc
Phím.TẠM DỪNG Người dùng nhấn vào nút Tạm dừng
Khóa.SPACE Người dùng nhấn phím cách
Phím.TRÁI Người dùng nhấn Mũi tên trái
Key.RIGHT Người dùng nhấn mũi tên phải
Key.UP Người dùng nhấn Mũi tên lên
Key.DOWN Người dùng nhấn Mũi tên xuống
Key.UNKNOWN Bất kỳ khóa nào ngoại trừ những khóa được liệt kê ở 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, nghĩa là ngay cả khi người dùng không làm gì thì các sự kiện trong trò chơi vẫn được thực thi. Để bạn có thể triển khai những trò chơi như vậy, chúng tôi đã thêm chức năng hẹn giờ vào công cụ phát triển 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 sau đó nó sẽ tắt. Ví dụ: 500 mili giây. Sau đó, cứ sau nửa giây, Game Engine sẽ gọi onTurnTimer(). Vô số lần cho đến khi bộ hẹn giờ tắt. Làm thế nào để sử dụng bộ đếm thời gian?
  1. Bật bộ hẹn giờ.

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

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

    Để làm được điều này, bạn cần khai báo một phương thức void onTurn(int step)trong một lớp được kế thừa từ lớp đó Game. Phương pháp này sẽ được gọi bởi game engine. Trong trường hợp này, mỗi lần động cơ sẽ chuyển số sê-ri của lệnh gọi đó (1,2,3, ...) sang phương thức.

  3. Tắt bộ hẹn giờ.

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

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

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

Ví dụ:
import com.javarush.engine.cell.Color;
import com.javarush.engine.cell.Game;

public class MySuperGame extends Game {@Override
    public void initialize() {
    	// Создаем игровое поле 3x3 клетки
        setScreenSize(3, 3);
        showGrid(false);
        setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);

        setTurnTimer(500);   //Включаем таймер, интервал между вызовами – 500мс.
    }

    @Override
    public void onTurn(int step) {
        if(step == 100) {
            stopTurnTimer();  // если прошло 100 тактов, выключаем таймер
        }

        if (step % 2 == 1) {
            // Если данный такт нечётный, установить клетке красный фон
            setCellColor(1, 1, Color.RED);
        } else {
            //если данный такт чётный, установить клетке синий фон
            setCellColor(1, 1, Color.BLUE);

        }
    }}
Trong ví dụ đơn giản này, chúng tôi đã tạo một trường gồm các ô 3x3. Sau đó, chúng tôi bật bộ hẹn giờ sẽ gọi phương thức này cứ sau nửa giây onTurn(). Cứ sau nửa giây, màu của ô sẽ thay đổi, nhưng nội dung của ô sẽ không thay đổi. Sau 50 giây màu sẽ ngừng thay đổi. Đó là tất cả! 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ể trợ giúp:
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION