1. Giới thiệu
Một công cụ trò chơi sẽ ít được sử dụng nếu chúng ta chỉ có thể sử dụng nó để vẽ một thứ gì đó trên màn hình. Để viết một trò chơi chính thức, chúng tôi cần nó tương tác với người dùng! Nói chính xác hơn, chương trình của chúng tôi sẽ theo dõi hành động của người dùng và phản hồi chúng.
Để làm điều này, công cụ trò chơi CodeGym có các phương thức đặc biệt mà nó gọi khi người dùng nhấp vào nút chuột hoặc phím bàn phím.
Mục đích của lớp học là bạn tự viết các phương thức này và sau đó công cụ trò chơi CodeGym chịu trách nhiệm gọi chúng. Tất cả những gì bạn cần là khai báo các phương thức này trong mã của mình. Điều này dễ thực hiện hơn âm thanh.
2. 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 của riêng bạn, lớp kế thừa Game
lớp đó. Và sau đó viết bất kỳ mã nào bạn muốn trong các phương thức này. Công cụ trò chơi sẽ gọi các phương thức này khi người dùng nhấp vào nút chuột.
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. Tọa độ của ô trên cùng bên trái là (0,0)
. Để sử dụng phương thức này, bạn cần ghi đè lên nó, đặt @Override
chú thích trước tên phương thức.
onMouseRightClick(int x, int y)
được gọi khi nhấp chuột phải . Nó hoạt động tương tự như onMouseLeftClick(int x, int y)
phương pháp.
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) {
// Put a "X" in the cell that was clicked with the left mouse button
setCellValue(x, y, "X");
}
@Override
public void onMouseRightClick(int x, int y) {
// Clear the cell that was clicked with the right mouse button
setCellValue(x, y, "");
}
}
Trong ví dụ trên, chúng tôi đã khai báo cả hai phương thức: onMouseLeftClick()
và onMouseRightClick()
. Phương thức đầu tiên sẽ được gọi khi người dùng nhấp chuột trái vào các ô của sân chơi. Phương thức thứ hai sẽ được gọi khi nhấp chuột phải.
Là đối số, công cụ trò chơi CodeGym sẽ chuyển (x, y)
tọa độ của ô của sân chơi nơi nhấp chuột.
3. 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 làm gì khi người dùng nhấn phím, bạn chỉ cần khai báo các phương thức này trong lớp kế thừa lớp của bạn Game
.
Bạn viết mã của mình theo các phương thức này và 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.
onKeyPress(Key key)
được gọi khi bất kỳ phím nào được nhấn . Giá trị của phím được nhấn (hoặc ) được truyền cho phương thức dưới dạng tham số. Để sử dụng phương thức này, bạn cần ghi đè lên nó, đặt chú thích trước tên phương thức.Key.UNKNOWN
key
@Override
onKeyReleased(Key key)
được gọi khi bất kỳ phím nào được giải phóng . Giá trị của khóa tương ứng (hoặc ) được gán cho tham số. Để sử dụng phương thức này, bạn cần ghi đè lên nó, đặt chú thích trước tên phương thức.Key.UNKNOWN
key
@Override
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 spacebar is pressed, the center cell turns yellow
if (key == Key.SPACE) {
setCellColor(1, 1, Color.YELLOW);
}
}
@Override
public void onKeyReleased(Key key) {
// When the spacebar is released, the center cell returns to white
if (key == Key.SPACE) {
setCellColor(1, 1, Color.WHITE);
}
}
}
4. Danh sách tất cả các khóa được hỗ trợ
Khi công cụ CodeGym gọi các phương thức onKeyPress()
và onKeyReleased()
, nó sẽ chuyển thông tin cho chúng về phím được nhấn (nhả). Để làm điều này, công cụ CodeGym có một loại đặc biệt được gọi là Key
.
Trong phiên bản hiện tại của công cụ, Key
loại chỉ hỗ trợ một bộ giới hạn gồm 9 giá trị:
Giá trị | Nội dung người dùng đã nhấn |
---|---|
|
Người dùng nhấn phím Enter |
|
Người dùng nhấn phím Esc |
|
Người dùng nhấn phím Tạm dừng |
|
Người dùng nhấn phím Space |
|
Người dùng nhấn phím mũi tên trái |
|
Người dùng nhấn phím mũi tên phải |
|
Người dùng nhấn phím mũi tên lên |
|
Người dùng nhấn phím mũi tên xuống |
|
Bất kỳ khóa nào khác với những khóa được liệt kê ở trên |
Nếu người chơi nhấn phím cách, thì onKeyPress()
phương thức sẽ được gọi với Key.SPACE
tham số. Nếu người dùng nhấn mũi tên trái thì tham số sẽ là Key.LEFT
. Nếu người dùng nhấn bất kỳ phím nào không có trong danh sách trên, thì phương onKeyPress()
thức sẽ được gọi với Key.UNKNOWN
tham số.
Vấn đề ở đây là các trò chơi CodeGym hiện tại được thiết kế để chạy trên điện thoại. Thay vì bàn phím tiêu chuẩn, chúng ta có 8 nút ảo:
5. 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à người dùng có thể không làm gì cả, nhưng một số sự kiện nhất định 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ộ hẹn giờ vào công cụ trò chơi.
Đây là cách nó hoạt động: bạn bật bộ hẹn giờ và đặt thời gian sau đó nó sẽ được kích hoạt. Ví dụ: 500 ms. Sau đó, cứ sau nửa giây, công cụ trò chơi CodeGym sẽ gọi onTurn()
phương thức này. Vô số lần — cho đến khi tắt bộ hẹn giờ.
Làm thế nào để bạn sử dụng một bộ đếm thời gian?
1. Bật hẹn giờ
Để bật hẹn giờ, chúng ta có void setTurnTimer(int timeMs)
phương pháp. Phương thức này lấy đối số là thời lượng (tính bằng mili giây hoặc 1/1000 giây) của khoảng thời gian giữa các lần gọi lại. Bạn chỉ cần gọi phương thức này một lần và công cụ trò chơi sẽ bắt đầu gọi onTurn()
phương thức này sau mỗi timeMs
mili giây.
2. Ghi đè onTurn(int)
phương thức
Để làm điều này, bạn phải khai báo một void onTurn(int step)
phương thức trong một lớp kế thừa Game
lớp đó. Công cụ trò chơi sẽ gọi phương thức này. Với mỗi lệnh gọi, công cụ chuyển một số thứ tự xác định lệnh gọi phương thức ( 1
, 2
, 3
, ...).
3. Hẹn giờ tắt
Nếu bộ đếm thời gian không còn cần thiết, chẳng hạn như vì người dùng đã hoàn thành trò chơi, thì có thể tắt nó đi. Để làm điều này, chỉ cần gọi stopTurnTimer()
phương thức.
4 Tăng tốc/thay đổi bộ hẹn giờ
Trong một số trò chơi, tần suất của các sự kiện tăng lên thường xuyên, vì vậy sẽ rất thuận tiện nếu chúng tôi có thể tăng tốc bộ đếm thời gian, tức là giảm thời gian giữa các lần gọi lại. Và không gì có thể dễ dàng hơn — chỉ cần gọi setTurnTimer(int timeMs)
lại với giá trị mới và thời gian giữa các lần gọi đến onTurn()
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 3x3 playing field
setScreenSize(3, 3);
showGrid(false);
setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
setTurnTimer(500); // Turn on the timer. The interval between callbacks is 500ms.
}
@Override
public void onTurn(int step) {
if (step == 100) {
stopTurnTimer(); // If this is the 100th callback, then turn off the timer
}
if (step % 2 == 1) {
// If this is an odd calllback, then set the cell background to red
setCellColor(1, 1, Color.RED);
} else {
// If this is an even callback, then 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ó kích thước 3 ô x 3 ô. Sau đó, chúng tôi bật bộ đếm thời gian sẽ gọi onTurn()
phương thức cứ sau nửa giây.
Ở đây, màu của ô trung tâm sẽ thay đổi sau mỗi nửa giây. Văn bản của ô sẽ không thay đổi. Sau 50 giây (100 lần gọi lại), màu sẽ ngừng thay đổi và bộ hẹn giờ sẽ tắt.
GO TO FULL VERSION