
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 | המשתמש לחץ על Enter |
מפתח.בריחה | המשתמש לחץ על Esc |
Key.PAUSE | המשתמש לחץ על השהה |
מפתח.רווח | המשתמש לחץ על רווח |
מקש.שמאלה | המשתמש לחץ על מקש החץ שמאלה |
מפתח.ימין | המשתמש לחץ על מקש החץ ימינה |
מפתח למעלה | המשתמש לחץ על מקש החץ למעלה |
מקש.DOWN | המשתמש לחץ על מקש למטה |
מפתח.לא ידוע | המשתמש לחץ על מקש שאינו אלו שלמעלה |
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 תאים x 3 תאים. ואז התחלנו טיימר שיקרא לשיטה onTurn()
כל חצי שנייה. בכל חצי שנייה, צבע התא ישתנה, אך תוכנו לא ישתנה. לאחר 50 שניות, הצבע לא ישתנה יותר. זה הכל לעת עתה! אם אתה רוצה ללמוד עוד על הקטע "משחקים", הנה כמה תיעוד שימושי שיכול לעזור:
GO TO FULL VERSION