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.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 را فشار داد |
کلید.فرار | کاربر دکمه Esc را فشار داد |
کلید. مکث | کاربر روی دکمه Pause کلیک کرد |
کلید.فضا | کاربر Space را فشار داد |
کلید.چپ | کاربر فلش چپ را فشار داد |
کلید.راست | کاربر فلش راست را فشار داد |
Key.UP | کاربر فلش رو به بالا را فشار داد |
کلید. پایین | کاربر فلش رو به پایین را فشار داد |
کلید.ناشناخته | هر کلیدی به جز موارد ذکر شده در بالا |
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