1. Pambuka
A engine game bakal sethitik nggunakake yen kita mung bisa nggunakake kanggo tarik soko ing layar. Kanggo nulis game lengkap, kita kudu sesambungan karo pangguna! Kanggo luwih tepat, program kita kudu nglacak tumindak pangguna lan nanggapi.
Kanggo nindakake iki, mesin game CodeGym duwe cara khusus sing diarani nalika pangguna ngeklik tombol mouse utawa tombol keyboard.
Titik kelas sing nulis cara iki dhewe, lan banjur mesin game CodeGym tanggung jawab kanggo nelpon. Sampeyan mung kudu ngumumake metode kasebut ing kode sampeyan. Iki luwih gampang kanggo nindakake saka muni.
2. Nggarap mouse
Mesin game duwe rong cara kanggo nggarap mouse:
void onMouseLeftClick(int x, int y)
void onMouseRightClick(int x, int y)
Sampeyan mung ngumumake metode kasebut ing kelas sampeyan dhewe sing marisi Game
kelas kasebut. Banjur tulis kode apa wae sing dikarepake ing metode kasebut. Mesin game bakal nelpon cara kasebut nalika pangguna ngeklik tombol mouse.
onMouseLeftClick(int x, int y)
disebut dening engine nalika tombol mouse kiwa diklik. Parameter kasebut minangka koordinat sel ing lapangan dolanan ing ngendi klik ana. Koordinat sel kiwa ndhuwur yaiku (0,0)
. Kanggo nggunakake metode iki, sampeyan kudu ngilangi, nyelehake @Override
anotasi sadurunge jeneng metode.
onMouseRightClick(int x, int y)
diarani nalika tombol mouse tengen diklik. Kerjane padha karo onMouseLeftClick(int x, int y)
cara.
Conto nggunakake cara iki:
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) {
// Put a "X" in the cell that was clicked with the left mouse button
setCellValue(x, y, "X");
}
@Override
public void onMouseRightClick(int x, int y) {
// Clear the cell that was clicked with the right mouse button
setCellValue(x, y, "");
}
}
Ing conto ing ndhuwur, kita nyatakake loro cara: onMouseLeftClick()
lan onMouseRightClick()
. Cara pisanan bakal diarani nalika pangguna ngeklik tombol mouse kiwa ing sel ing lapangan dolanan. Cara kapindho bakal diarani nalika tombol mouse tengen diklik.
Minangka bantahan, mesin game CodeGym bakal ngliwati (x, y)
koordinat sel ing lapangan dolanan ing ngendi mouse diklik.
3. Nggarap keyboard
Mesin game duwe rong cara kanggo nggarap keyboard:
void onKeyPress(Key key);
void onKeyReleased(Key key);
Yen sampeyan pengin nindakake soko nalika pangguna mencet tombol, sampeyan mung kudu wara-wara cara iki ing kelas sing oleh warisan kelas Game
.
Sampeyan nulis kode ing cara iki, lan mesin game bakal nelpon nalika pangguna mencet (utawa ngeculake) tombol.
onKeyPress(Key key)
diarani nalika sembarang tombol ditekan . Nilai tombol sing dipencet (utawa ) diterusake menyang metode minangka parameter. Kanggo nggunakake metode iki, sampeyan kudu ngilangi, nyelehake anotasi sadurunge jeneng metode.Key.UNKNOWN
key
@Override
onKeyReleased(Key key)
diarani nalika sembarang tombol dirilis . Nilai saka tombol sing cocog (utawa ) bakal ditugasake menyang parameter. Kanggo nggunakake metode iki, sampeyan kudu ngilangi, nyelehake anotasi sadurunge jeneng metode.Key.UNKNOWN
key
@Override
Conto nggunakake cara iki:
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 spacebar is pressed, the center cell turns yellow
if (key == Key.SPACE) {
setCellColor(1, 1, Color.YELLOW);
}
}
@Override
public void onKeyReleased(Key key) {
// When the spacebar is released, the center cell returns to white
if (key == Key.SPACE) {
setCellColor(1, 1, Color.WHITE);
}
}
}
4. Dhaptar kabeh tombol didhukung
Nalika mesin CodeGym nelpon onKeyPress()
lan onKeyReleased()
cara, iku liwat informasi kanggo wong-wong mau bab tombol dipencet (dirilis). Kanggo nindakake iki, mesin CodeGym duwe jinis khusus sing diarani Key
.
Ing versi mesin saiki, Key
jinis mung ndhukung set winates 9 nilai:
Nilai | Apa pangguna dipencet |
---|---|
|
Pangguna menet tombol Enter |
|
Pangguna menet tombol Esc |
|
Pangguna menet tombol Ngaso |
|
Pangguna menet tombol Space |
|
Pangguna menet tombol Panah Kiri |
|
Pangguna menet tombol Panah Kanan |
|
Pangguna menet tombol panah munggah |
|
Pangguna menet tombol panah mudhun |
|
Tombol apa wae kajaba sing kasebut ing ndhuwur |
Yen pamuter menet spasi, banjur onKeyPress()
cara bakal disebut Key.SPACE
minangka parameter. Yen pangguna menet panah kiwa, parameter kasebut bakal dadi Key.LEFT
. Yen pangguna mencet tombol apa wae sing ora ana ing dhaptar ing ndhuwur, metode kasebut onKeyPress()
bakal diarani Key.UNKNOWN
minangka parameter.
Masalah ing kene yaiku game CodeGym sing wis ana dirancang kanggo mbukak ing telpon. Tinimbang keyboard standar, kita duwe 8 tombol virtual:
5. Nggarap timer
Akeh game njupuk Panggonan ing wektu nyata, IE pangguna bisa nindakake apa-apa, nanging acara tartamtu isih dumadi ing game. Kanggo ngidini sampeyan ngleksanakake game kasebut, kita nambahake timer menyang mesin game.
Mangkene cara kerjane: sampeyan nguripake timer lan nyetel wektu sawise iku kudu micu. Contone, 500 ms. Banjur, saben setengah detik, mesin game CodeGym bakal nelpon onTurn()
cara kasebut. Kaping pirang-pirang tanpa wates — nganti timer dipateni.
Kepiye cara nggunakake timer?
1. Nguripake timer
Kanggo nguripake timer, kita duwe void setTurnTimer(int timeMs)
cara. Cara kasebut njupuk minangka argumen durasi (ing milidetik utawa 1/1000 detik) interval antarane callback. Sampeyan mung kudu nelpon cara iki sapisan, lan mesin game bakal miwiti nelpon onTurn()
cara saben timeMs
milliseconds.
2. Ngganti onTurn(int)
cara
Kanggo nindakake iki, sampeyan kudu ngumumake void onTurn(int step)
metode ing kelas sing marisi Game
kelas kasebut. Mesin game bakal nelpon cara iki. Kanthi saben telpon, mesin ngliwati nomer urut-urutan sing ngenali panggilan metode ( 1
, 2
, 3
, ...).
3. Pateni timer
Yen timer ora dibutuhake maneh, contone amarga pangguna wis rampung game, banjur bisa dipateni. Kanggo nindakake iki, mung nelpon stopTurnTimer()
cara.
4 Nyepetake/ngganti wektu
Ing sawetara game, frekuensi acara mundhak kanthi reguler, saengga luwih trep yen bisa nyepetake wektu, yaiku nyuda wektu ing antarane panggilan balik. Lan ora ana sing luwih gampang - mung nelpon setTurnTimer(int timeMs)
maneh kanthi nilai anyar, lan wektu antarane telpon bakal onTurn()
ganti.
Tuladha:
import com.codegym.engine.cell.Color;
import com.codegym.engine.cell.Game;
public class MySuperGame extends Game {
...
@Override
public void initialize() {
// Create a 3x3 playing field
setScreenSize(3, 3);
showGrid(false);
setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
setTurnTimer(500); // Turn on the timer. The interval between callbacks is 500ms.
}
@Override
public void onTurn(int step) {
if (step == 100) {
stopTurnTimer(); // If this is the 100th callback, then turn off the timer
}
if (step % 2 == 1) {
// If this is an odd calllback, then set the cell background to red
setCellColor(1, 1, Color.RED);
} else {
// If this is an even callback, then set the cell background to blue
setCellColor(1, 1, Color.BLUE);
}
}
...
}
Ing conto prasaja iki, kita nggawe lapangan sing 3 sel dening 3 sel. Banjur kita nguripake timer sing bakal nelpon onTurn()
cara saben setengah detik.
Ing kene, warna sel tengah bakal ganti saben setengah detik. Teks sel ora bakal diganti. Sawise 50 detik (100 callback), werna bakal mandheg ganti lan timer bakal mati.
GO TO FULL VERSION