
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.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) {
// Set "X" in the cell where the left mouse click occurred
setCellValue(x, y, "X");
}
@Override
public void onMouseRightClick(int x, int y) {
// Clear the cell where the right mouse click occurred
setCellValue(x, y, "");
}
}
2. کار با صفحه کلید
موتور بازی دو روش برای کار با صفحه کلید دارد:-
void onKeyPress(Key key);
-
void onKeyReleased(Key key);
-
onKeyPress(Key key)
- هنگامی که هر کلیدی فشار داده می شود، فراخوانی می شود. پارامتر کلید، کلید فشار داده شده (یا Key.UNKNOWN) است. -
onKeyReleased(Key key)
- هنگامی که هر کلیدی آزاد می شود، فراخوانی می شود. پارامتر کلید، کلید مربوطه (یا Key.UNKNOWN) است.
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 space bar is pressed, the center cell turns yellow
if (key == Key.SPACE) {
setCellColor(1, 1, Color.YELLOW);
}
}
@Override
public void onKeyReleased(Key key) {
// When the space bar is released, the center cell changes back to white
if (key == Key.SPACE) {
setCellColor(1, 1, Color.WHITE);
}
}
}
مهم! در نسخه فعلی موتور بازی، نوع Key دارای یک مجموعه محدود از نه مقدار است:ارزش | کلید توسط کاربر فشار داده شده است |
---|---|
Key.ENTER | کاربر Enter را فشار داد |
کلید.فرار | کاربر Esc را فشار داد |
کلید. مکث | کاربر Pause را فشار داد |
کلید.فضا | کاربر Space را فشار داد |
کلید.چپ | کاربر کلید فلش سمت چپ را فشار داد |
کلید.راست | کاربر کلید پیکان سمت راست را فشار داد |
Key.UP | کاربر کلید فلش رو به بالا را فشار داد |
کلید. پایین | کاربر کلید پایین را فشار داد |
کلید.ناشناخته | کاربر کلیدی غیر از موارد بالا را فشار داد |
3. کار با تایمر
بسیاری از بازی ها در زمان واقعی اتفاق می افتند، یعنی حتی اگر کاربر هیچ کاری انجام ندهد، باز هم اتفاقاتی در بازی رخ می دهد. برای اینکه بتوانید چنین بازی هایی را پیاده سازی کنید، یک تایمر به موتور بازی اضافه کردیم. چیزی شبیه به این کار می کند: شما تایمر را روشن می کنید و فاصله تایمر را تنظیم می کنید. مثلا 500 میلی ثانیه. سپس هر نیم ثانیه موتور بازیonTurnTimer()
متد را فراخوانی می کند. بارها و بارها برای همیشه - تا زمانی که تایمر خاموش شود. پس چگونه از تایمر استفاده می کنید؟
-
تایمر را روشن کنید.
برای انجام این کار، روش خاصی وجود دارد
void setTurnTimer(int timeMs)
. این روش فاصله بین تماس ها را بر حسب میلی ثانیه (1 میلی ثانیه = 1/1000 ثانیه) به عنوان آرگومان می گیرد. فقط باید یک بار آن را فراخوانی کنید و موتور بازیonTurn()
هر بار Ms میلی ثانیه شروع به فراخوانی روش می کند. -
روش onTurn(int) را لغو کنید.
برای انجام این کار، باید
void onTurn(int step)
متدی را در کلاسی که ارث بری می کند، اعلام کنیدGame
. این روش توسط موتور بازی فراخوانی خواهد شد. علاوه بر این، با هر تماس، موتور بازی یک شناسه متوالی برای تماس (1، 2، 3، ...) را به روش ارسال می کند. -
تایمر را خاموش کنید.
اگر دیگر نیازی به تایمر نیست، مثلاً وقتی کاربر بازی را کامل کرد، میتوانید آن را خاموش کنید. برای انجام این کار، فقط باید
stopTurnTimer()
متد را فراخوانی کنید. -
تایمر را تسریع یا تغییر دهید.
در برخی بازیها، سرعت رخ دادن رویدادها دائماً در حال افزایش است، بنابراین سریعتر کردن تایمر (کاهش زمان بین تماسها) راحت است. هیچ چیز نمی تواند ساده تر باشد:
setTurnTimer(int timeMs)
یک بار دیگر با یک مقدار جدید تماس بگیرید و زمان بینonTurn()
تماس ها تغییر خواهد کرد.
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
public class MySuperGame extends Game {
…
@Override
public void initialize() {
// Create a playing field that is 3 cells x 3 cells
setScreenSize(3, 3);
showGrid(false);
setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
setTurnTimer(500); // Turn on the timer, the interval between calls is 500ms.
}
@Override
public void onTurn(int step) {
if(step == 100) {
stopTurnTimer(); // If 100 calls have been made, turn off the timer
}
if (step % 2 == 1) {
// If this call is odd, set the cell background to red
setCellColor(1, 1, Color.RED);
}
else {
// If this call is even, set the cell background to blue
setCellColor(1, 1, Color.BLUE);
}
}
…
}
در این مثال ساده، یک فیلد ایجاد کردیم که 3 خانه در 3 خانه است. سپس یک تایمر را شروع کردیم که onTurn()
هر نیم ثانیه متد را فراخوانی می کند. هر نیم ثانیه، رنگ سلول تغییر می کند، اما محتوای آن تغییر نمی کند. پس از 50 ثانیه، رنگ دیگر تغییر نخواهد کرد. فعلاً همین است! اگر میخواهید درباره بخش «بازیها» اطلاعات بیشتری کسب کنید، در اینجا چند سند مفید وجود دارد که میتواند کمک کند:
GO TO FULL VERSION