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);
}
}
}
مهم! في الإصدار الحالي من محرك اللعبة، يحتوي نوع المفتاح على مجموعة محدودة من تسع قيم:قيمة | الضغط على المفتاح من قبل المستخدم |
---|---|
مفتاح.أدخل | قام المستخدم بالضغط على Enter |
مفتاح الهروب | قام المستخدم بالضغط على Esc |
مفتاح.إيقاف مؤقت | ضغط المستخدم على إيقاف مؤقت |
مفتاح الفضاء | قام المستخدم بالضغط على مسافة |
مفتاح. يسار | قام المستخدم بالضغط على مفتاح السهم الأيسر |
مفتاح.يمين | قام المستخدم بالضغط على مفتاح السهم الأيمن |
Key.UP | قام المستخدم بالضغط على مفتاح السهم لأعلى |
زر أسفل | قام المستخدم بالضغط على المفتاح لأسفل |
مفتاح.غير معروف | قام المستخدم بالضغط على مفتاح آخر غير تلك المذكورة أعلاه |
3. العمل مع الموقت
تحدث العديد من الألعاب في الوقت الفعلي، أي حتى إذا لم يفعل المستخدم شيئًا، فإن الأحداث لا تزال تحدث في اللعبة. لتمكينك من تنفيذ مثل هذه الألعاب، أضفنا مؤقتًا إلى محرك اللعبة. يعمل الأمر على النحو التالي: تقوم بتشغيل المؤقت وتعيين الفاصل الزمني للمؤقت. على سبيل المثال، 500 مللي ثانية. ثم، كل نصف ثانية، يقوم محرك اللعبة باستدعاءonTurnTimer()
الطريقة. مرارًا وتكرارًا إلى الأبد - حتى يتم إيقاف تشغيل المؤقت. إذًا كيف تستخدم المؤقت؟
-
قم بتشغيل الموقت.
للقيام بذلك، هناك
void setTurnTimer(int timeMs)
طريقة خاصة. تأخذ الطريقة كوسيطة الفاصل الزمني بين المكالمات بالمللي ثانية (1 مللي ثانية = 1/1000 ثانية). ما عليك سوى الاتصال به مرة واحدة، وسيبدأ محرك اللعبة في استدعاء الطريقةonTurn()
في كل ميلي ثانية. -
تجاوز طريقة 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