
- Giriş
- Oýunyň inisializasiýasy
- Oýun meýdançasyny döretmek
- Ýönekeý programma
- Oýun meýdançasyndaky hüjjerler bilen işlemeli
- Reňk bilen işlemeli
- Dialog görnüşleri
- Kepillendiriji usullar
1. Giriş
Kompýuter oýnunyň işlenişi 3 basgançakdan ybarat:- Oýunyň inisializasiýasy — başlangyç görnüşler: meýdança ölçegini we şekillendiriş, oýun obýektleriniň başlangyç ýagdaýynyň döremegi we goýulmagy, hem-de şol başlangyç hereketleriň ýerine ýetirilmegi.
- Oýun prosesi. Oýun obýektleriniň hereketi, oýunçynyň hereketleri, gazanylan nokatlaryň hasaplamasy, hem-de yzygiderli ýa-da düwmä basylanda ýerine ýetirilýän hereketleri öz içine alýar.
- Oýunyň tamamlanmagy. Animasiýanyň durmagy, ýeňiş ýa-da ýeňliş habaryny bildirmegi, hem-de oýun tamamlanyp ýerine ýetirilmeli hereketleri öz içine alýar.
2. Oýunyň inisializasiýasy
Oýunyň inisializasiýasy diňe iki ädimden ybarat:Ädim 1: oýunyň esasy synpyňy döretmeli.
JavaRush hereket motory esasynda oýun döretmek üçin, sen bir synp döretmeli we ony Game (com.javarush.engine.cell.Game) synpyndan miras almalysyň. Bu synpa hereket motorynyň metodlaýyn çagyrymasına mümkinçilik berer, we motor hem senin ýazýan metodlaryňy çagyrýar. Mysal:
import com.javarush.engine.cell.Game;
public class MySuperGame extends Game {
...
}
Ädim 2: initialize() metodyny özgeçirmeli.
Bu metod oýunyň başyna zerur bolan ähli başlangyç hereketleri ýerine ýetirer: oýun meýdançasy bilen, oýun obýektleriniň döremegi we ş.m. Sen diňe bu metody Game synpyndan miras alan synpda yglan etmeli. Mysal:
import com.javarush.engine.cell.Game;
public class MySuperGame extends Game {
@Override
public void initialize() {
// Bu ýerde oýun we obýektleriniň inisializasiýasy amala aşyrýarlar
}
}
initialize() metody,
main() metody bilen deňdir: oýun üçin ýazylan ähli kod şondan başlaýar.
3. Oýun meýdançasyny döretmek
Oýun meýdançasyny döretmek hem iki ädimden ybarat.Ädim 1: oýun meýdançasyny hüjjerlere bölmek.
Oýun meýdançasynyň ähli bölümi oýun hereket motory tarapyndan hüjjerlere bölünýär. Iň kiçi ululyk 3x3, iň ulusy 100x100. Oýun ekrany hemişelik ululyga eýe. Ol dürli mukdarda hüjjerlere bölünip bilner. Mysal üçin, ini 7 we beýiklik 9:
import com.javarush.engine.cell.Game;
public class MySuperGame extends Game {
@Override
public void initialize() {
// 7x9 ölçeginde meýdança döretdik
setScreenSize(7, 9);
...
}
}
Oýun ýazgysyny ýazanyňda häzirki oýun meýdançasynyň ini we beýikligini anyklamak gerek bolup biler. Munuň üçin
int getScreenWidth() we
int getScreenHeight() metodlary ulanylýar.
Ädim 2: toru aç/açma (iňyti däl).
Eger oýun meýdançasyndaky hüjjerleri bölýän gara toruň görkezilişi göwnüňize laýyk däl bolsa, ony öçüriň. void showGrid(boolean isShow) metody, hüjjerleri bölen toru açyp/öçürýär. Adatça tor görkezilýär. Ony öçürmek üçin, bu metody false parametri bilen çagyr:
showGrid(false);
Netije:

showGrid(true);
4. Ýönekeý programma
Programma mysaly:
public class MySuperGame extends Game {
@Override
public void initialize() {
// 3x3 hüjjerli oýun meýdançasyny döredýäris
setScreenSize(3, 3);
// Tor görkezilişini öçürýäris
showGrid(false);
// Merkezi hüjjäniň fondasynyň rengini gök edip, onda "X" görkezýäris
setCellValueEx(1, 1, Color.BLUE, "X", Color.ORANGE, 50);
}
}
Bu mysalda oýun meýdançasyna 3x3 ölçegi berilýär, toruň görkezilişi öçürilýär we merkezde gök fonda ululygyň ýarysyny alan mämişi "X" simwoly goýulýar. Bu, oýunçy oýny başlanda gören ilkinji zat bolar.
5. Oýun meýdançasyndaky hüjjerler bilen işlemeli
Biz oýun meýdançasyny hüjjerlere bölüp bilýänligimiz gowy zat, ýöne biz bu hüjjerlerde näme edip bileris? Her bir hüjjer üçin aşakdakylar niýetlenip bilner:- hüjjer reňki (font reňki);
- metin (metin ýa-da san);
- metiniň reňki;
- metiniň ululygy hüjjeriniň ululygynyň protsentinde.
void setCellColor(int x, int y, Color color) — (x, y) koordinatalarynda hüjjäniň reňkini color reňkine goýýar:
setCellColor(0, 0, Color.RED); setCellColor(3, 6, Color.BLACK); setCellColor(6, 8, Color.NONE);
Color getCellColor(int x, int y) — (x, y) koordinatalarynda hüjjäniň reňkini yzyna gaýtarýar:
Color myColor = getCellColor(2, 0);
void setCellValue(int x, int y, String value) — (x, y) koordinatalarynda hüjjä tekst value goýýar:
setCellValue(3, 3, "text"); setCellValue(0, 8, "W"); setCellValue(4, 1, "2222"); setCellValue(6, 6, "");
String getCellValue(int x, int y) — (x, y) koordinatalarynda hüjjäniň içindäki metini yzyna gaýtarýar:
String s = getCellValue(3, 3); System.out.println(getCellValue(4, 1));
void setCellTextSize(int x, int y, int size) — (x, y) koordinatalarynda hüjjäniň içindäki kontentiň ululygyny kesgitleýär. size – höjük ululygyndaky metiniň belgisiniň protsenti:
setCellTextSize(2 , 0, 70); // hüjjeriniň 70% höjük ululygy
int getCellTextSize(int x, int y) — (x, y) koordinatalarynda hüjjäniň içindäki kontentiň ululygyny yzyna gaýtarýar:
int size = getCellTextSize(2 , 0);
void setCellNumber(int x, int y, int value) — (x, y) koordinatalarynda hüjjäň içine san value ýerleşdirýär:
setCellNumber(3, 3, 40); setCellNumber(0, 8, -8); setCellNumber(4, 1, 2222); setCellNumber(6, 6, 0);
int getCellNumber(int x, int y) — (x, y) koordinatalarynda hüjjäniň içindäki san yzyna gaýtarýar. Eger hüjjäniň içindäki san däl bolsa, 0 yzyna gaýtarýar:
int i = getCellNumber(3, 3); System.out.println(getCellNumber(4, 1));
void setCellTextColor(int x, int y, Color color) — (x, y) koordinatalarynda hüjjäniň içindäki kontentiň (metiniň) reňkini kesgitleýär:
setCellTextColor(2, 1, Color.GREEN); setCellTextColor(0, 1, Color.NONE);
Color getCellTextColor(int x, int y) — (x, y) koordinatalarynda hüjjäniň içindäki kontentiň (metiniň) reňkini yzyna gaýtarýar:
Color textColor = getCellTextColor(1, 3);
void setCellValueEx(int x, int y, Color cellColor, String value) — (x, y) koordinatalarynda hüjjäniň fondynyň reňkini cellColor we kontenti value diýip kesgitleýär:
setCellValueEx(0, 2, Color.BLUE, "56");
void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor) — (x, y) koordinatalarynda hüjjäniň fondynyň reňkini cellColor, kontenti value we kontentiň reňkini textColor diýip kesgitleýär:
setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN);
void setCellValueEx(int x, int y, Color cellColor, String value, Color textColor, int textSize); — (x, y) koordinatalarynda hüjjäniň fondynyň reňkini cellColor, kontenti value, kontentiň reňkini textColor we kontentiň ululygyny textSize diýip kesgitleýär:
setCellValueEx(0, 2, Color.BLACK, "56", Color.GREEN, 70);
6. Reňk bilen işlemeli
Reňkleri hereket motorynda enum Color niýetlenýär, ol 148 reňk üçin üýtgeşik bahalary öz içine alýar. Şeýle hem NONE — reňksiizlik üçin çäklendirilýär. Reňk bilen işlemek misaly:
Color myColor = Color.WHITE; // myColor üýtgeýäni ak reňk bilen kesgitleňýär.
Color redColor = Color.RED; // redColor üýtgeýäni gyzyl reňk bilen kesgitleňýär.
Color blueColor = Color.BLUE; // blueColor üýtgeýäni gök reňk bilen kesgitleňýär.
Birden aýratyn reňkleriň ähli toparyny almak gerek bolanda,
values() metodyny ulanyň. Mysal üçin:
// colors üýtgeýäne ähli reňkler toparynyň ýerleşdirilmegi.
Color[] colors = Color.values();
Palitrada reňkiň nomerini almak örän aňsat:
Color color = Color.RED;
int redIndex = color.ordinal(); // Gyzyl reňkiň nomeri
int blueIndex = Color.BLUE.ordinal(); // Gök reňkiň nomeri
Reňkiň nomeri boýunça almak:
// color üýtgeýäne 10 nomer bilen enum Color toparynyň reňki kesgitlenilýär.
Color color = Color.values()[10];
7. Dialog görnüşleri
Oýun tamamlanandan soň, oýunçylar ýeňiş ýa-da ýeňliş habary bilen habarly edilmelidir. Bunun üçin adaty metod bardyr, ol oýun ekranına dialog görnüşini görkezýär:
void showMessageDialog(Color cellColor, String message, Color textColor, int textSize)
Bu ýerde:
- cellColor — dialog fonunyň reňki;
- message — habaryň metini;
- textColor — habaryň metin reňki;
- textSize — habaryň metin ululygy.
8. Kepillendiriji usullar
Oýun ýazgysyny ýazanyňda köplenç tötänleýin sanlar ulanylýar. Tötänleýin sanlary almak üçin hereket motorynyň utilli metodlary ulanyp boljak:- int getRandomNumber(int max) — 0-den (max–1) çenli goşmaça däl tötänleýin sany yzyna gaýtarýar.
- int getRandomNumber(int min, int max) — min-den (max–1) goşmaça däl tötänleýin sany yzyna gaýtarýar.
GO TO FULL VERSION