JavaRush 中的「遊戲」是一個新部分,其中包含有趣的大型任務,用於創建您自己的流行遊戲版本。很簡單:每個遊戲項目都分為子任務。一一完成它們,遊戲就準備好了。您可以在社交網路上分享並邀請朋友一起玩。在這篇文章中我們將詳細討論編寫遊戲時的事件處理方法。
1. 使用滑鼠
遊戲引擎有兩種使用滑鼠的方法:void onMouseLeftClick(int x, int y);
void onMouseRightClick(int x, int y);
Game
,並在其中編寫任何程式碼即可。當使用者按下滑鼠按鈕時,遊戲引擎本身會呼叫它們。
onMouseLeftClick(int x, int y)
— 點選滑鼠左鍵時由引擎呼叫。作為參數,它接收發生點擊的運動場單元格的座標。左上角單元格的座標為 (0,0)。要使用此方法,必須重寫它。onMouseRightClick(int x, int y)
— 右鍵單擊時呼叫。工作原理與方法類似onMouseLeftClick(int x, int y)
。
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. 使用鍵盤
遊戲引擎有兩種使用鍵盤的方法:void onKeyPress(Key key);
void onKeyReleased(Key key);
onKeyPress (Key key)
— 按下任何鍵盤按鍵時調用。按下的鍵的值(或 Key.UNKNOWN)作為鍵參數傳遞給此方法。onKeyReleased (Key key)
— 釋放任何鍵盤鍵時調用。key 參數採用對應鍵的值(或 Key.UNKNOWN)。
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);
}
}
}
重要的! 在目前版本的引擎中,Key類型只能接受一組有限的值(9個):
意義 | 用戶點擊了什麼 |
---|---|
回車鍵 | 使用者按下了 Enter 按鈕 |
按鍵.ESCAPE | 使用者按下了 Esc 按鈕 |
暫停鍵 | 用戶點擊了暫停按鈕 |
空白鍵 | 使用者按下空白鍵 |
左鍵 | 使用者按下左箭頭 |
右鍵 | 使用者按下右箭頭 |
向上鍵 | 使用者按下向上箭頭 |
向下鍵 | 使用者按下向下箭頭 |
密鑰.未知 | 除上面列出的鍵之外的任何鍵 |
3. 使用定時器
許多遊戲都是即時發生的,這意味著即使用戶什麼都不做,遊戲中的事件仍然會執行。為了讓您能夠實現此類遊戲,我們在遊戲引擎中添加了計時器功能。它的工作原理是這樣的:您打開計時器並設定計時器應該關閉的時間段。例如,500 毫秒。此後,遊戲引擎每半秒調用onTurnTimer()
. 無限次,直到計時器關閉。如何使用定時器?
-
打開計時器。
為此有一個特殊的方法
void setTurnTimer(int timeMs)
。此方法採用以毫秒(1/1000 秒)為單位的呼叫之間的間隔持續時間作為參數。呼叫一次就夠了,遊戲引擎onTurn()
每隔Ms毫秒就會開始呼叫該方法。 -
重寫 onTurn(int) 方法。
為此,您需要
void onTurn(int step)
在從該類別繼承的類別中聲明一個方法Game
。該方法將由遊戲引擎調用。在這種情況下,引擎每次都會將此類呼叫的序號(1,2,3,...)傳遞給該方法。 -
關閉計時器。
如果不再需要計時器,例如當使用者完成遊戲時,可以將其關閉。為此,您只需調用
stopTurnTimer()
. -
加快速度或更改計時器。
在某些遊戲中,事件會不斷加速,因此加快計時器(減少呼叫之間的時間)會很方便。沒有什麼比這更簡單的了:使用
setTurnTimer(int timeMs)
新值再次調用,調用之間的時間onTurn()
就會改變。
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);
}
}
…
}
在這個簡單的範例中,我們建立了一個 3x3 單元格的欄位。然後我們打開一個計時器,每半秒呼叫該方法onTurn()
。每半秒單元格的顏色就會改變,但其內容不會改變。50 秒後顏色將停止變化。就這樣!如果您想了解有關遊戲部分的更多信息,這裡有一些有用的文檔可以提供幫助:
GO TO FULL VERSION