JavaRush の「ゲーム」は、人気のあるゲームの独自バージョンを作成するための興味深く大規模なタスクを含む新しいセクションです。それは簡単です。各ゲーム プロジェクトはサブタスクに分割されています。それらを 1 つずつ完了すると、ゲームの準備が整います。ソーシャルネットワークで共有したり、友達を招待してプレイすることができます。この資料では、ゲームを作成する際のイベント処理の方法について詳しく説明します。
1. マウスの操作
ゲーム エンジンには、マウスを操作するための 2 つの方法があります。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. キーボードの操作
ゲーム エンジンには、キーボードを操作するための 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);
}
}
}
重要! エンジンの現在のバージョンでは、キー タイプは限られた値のセット (9 個) のみを受け入れることができます。
意味 | ユーザーがクリックしたもの |
---|---|
Key.ENTER | ユーザーが Enter ボタンを押した |
Key.ESCAPE | ユーザーが Esc ボタンを押した |
キー.一時停止 | ユーザーが「一時停止」ボタンをクリックした |
キー.スペース | ユーザーがスペースを押した |
Key.LEFT | ユーザーが左矢印を押した |
Key.RIGHT | ユーザーが右矢印を押しました |
キー.UP | ユーザーが上矢印キーを押した |
キーダウン | ユーザーが下矢印キーを押した |
キー.不明 | 上記以外の任意のキー |
3. タイマーの操作
多くのゲームはリアルタイムで実行されます。つまり、ユーザーが何もしなくても、ゲーム内のイベントは引き続き実行されます。このようなゲームを実装できるように、ゲーム エンジンにタイマー機能を追加しました。これは次のように機能します。タイマーをオンにし、その後タイマーがオフになるまでの時間を設定します。たとえば、500 ミリ秒です。その後、ゲーム エンジンは 0.5 秒ごとにonTurnTimer()
. タイマーがオフになるまでの回数は無限です。タイマーの使い方は?
-
タイマーをオンにします。
これには特別な方法があります
void setTurnTimer(int timeMs)
。このメソッドは引数として、呼び出し間の間隔をミリ秒 (1/1000 秒) 単位で受け取ります。一度呼び出すだけで十分で、ゲーム エンジンはonTurn()
timeMs ミリ秒ごとにメソッドの呼び出しを開始します。 -
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 セルのフィールドを作成しました。次に、0.5 秒ごとにメソッドを呼び出すタイマーをオンにしましたonTurn()
。0.5 秒ごとにセルの色が変わりますが、その内容は変わりません。50秒後、色の変化は止まります。それだけです!「ゲーム」セクションについてさらに詳しく知りたい場合は、次の役立つドキュメントを参照してください。
GO TO FULL VERSION