Mundarija:
- 1 -qadam: materiallar
- 2 -qadam: Dastur - doska bilan tanishing
- 3 -qadam: Dastur bilan tanishing - Tile
- 4 -qadam: Dastur - O'yin bilan tanishing
- 5 -qadam: Muhim usullar - harakat
Video: O'zingizning 2048 o'yinini W/Java bilan dasturlashtiring: 8 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:22
PranP1My (tugallanmagan) SiteFollow tomonidan muallifning yana:
Men o'yinni yaxshi ko'raman 2048. Shunday qilib, men o'z versiyamni dasturlashga qaror qildim.
Bu haqiqiy o'yinga juda o'xshaydi, lekin uni o'zim dasturlashim menga xohlagan narsani o'zgartirish huquqini beradi. Agar men odatdagi 4x4 o'rniga 5x5 o'yinni xohlasam, "Board" konstruktoridan foydalangan holda oddiy o'zgarish qilishimga imkon beradi. Ayting -chi, men o'yinni tasodifiy emas, balki o'yinchi uchun eng murakkab holga keltiradigan qismlarni qo'shib, o'yinni qiyinlashtirmoqchiman. Oddiy algoritmdan foydalanib, men buni qila olaman. Men ushbu ko'rsatmalarda bu o'zgarishlarning barchasini qamrab olmagan bo'lsam -da, men borgan sari ko'proq qo'shishni rejalashtirmoqdaman.
Hozircha, biz sizning 2048 yilgi odatiy o'yiningizni dasturlashtiramiz.
Qani boshladik!
(Yon eslatma: bu ko'rsatma dasturlash bo'yicha o'rtacha ma'lumotni talab qiladi - ayniqsa Java bilan)
1 -qadam: materiallar
Bu loyiha uchun sizga ko'p narsa kerak bo'lmaydi, chunki bu shunchaki dasturlash usuli.
Materiallar:
- Noutbuk
- Tutilish (yoki siz tanlagan IDE)
Ha. Bo'ldi shu.
2 -qadam: Dastur - doska bilan tanishing
Men barcha kodimni GitHub -ga yukladim - bu erda tekshiring:
Men o'yinni 3 sinfga ajratdim: taxta, kafel va o'yin.
Kengash:
Tavsif: Kengash klassi o'yin taxtasi bilan shug'ullanadi, "Tile" elementlari majmuasini o'rnatadi, joriy ball va eng yuqori plitkani oladi va qatorni qatorga qo'yadi (keyinchalik "O'yin" da ishlatiladi). Mantiqning ko'p qismi ham shu erda, tasodifiy joylarda 2 va 4 -chi urug'larni o'stirish, yuqoriga, pastga, chapga va o'ngga siljish va o'yin tugagandan so'ng o'yinchilarga xabar berish usullarini ta'minlaydigan sinf.
Konstruktorlar:
/ * Kengash uchun standart konstruktor - 4x4 matritsani o'rnatadi */
jamoatchilik kengashi () {…}
/ * Kengash konstruktori - belgilangan katak o'lchamiga ega matritsani o'rnatadi */
jamoatchilik kengashi (int tarmoqlari) {…}
Usullari:
/ * Kengashni qaytaradigan Getter usuli */
umumiy kafel getBoard () {…}
/ * Hisobni qaytaradigan Getter usuli */
public int getScore () {…}
/ * Taxtadagi eng baland plitkani topib, qaytaradi */
public int getHighTile () {…}
/ * Sinov maqsadida taxtani konsolga chop etadi */
public void print () {…}
/ * Kengashni String sifatida qaytaradi - GUIda ishlatiladi */
public String toString () {…}
/ * Harakat paytida bo'sh joyda 2 (yoki 4) ni tug'diradi */
ommaviy bo'shliq paydo bo'lishi () {…}
/ * Kengash to'liq qoralanganligini tekshiradi va agar shunday bo'lsa, u o'yinchilarni qayta ishga tushirishga undaydi */
ommaviy boolean blackOut () {…}
/ * O'yin tugaganmi yoki yo'qligini tekshiradi - taxta qorong'i bo'lganda va plitalarning hech biri birlashtira olmaydi */
ommaviy boolean o'yinOver () {…}
/ * "W" yoki yuqoriga o'q bosilganda chaqiriladi - "yuqoriga" parametri bo'lgan taxtadagi har bir plitka uchun 'vertikalMove' chaqiriladi */
ommaviy bo'shliq () {…}
/ * 'S' yoki pastga o'qi bosilganda chaqiriladi - 'vertikal' */public void down () {…} parametrli har bir plitka uchun 'vertikalMove' chaqiriladi.
/ * 'D' yoki o'ng o'qi bosilganda chaqiriladi - 'o'ng' */public void right () {…} parametrli har bir plitka uchun 'GorizontalMove' chaqiriladi.
/ * 'A' yoki chap o'q bosilganda chaqiriladi - 'chap' parametri bo'lgan taxtadagi har bir plitka uchun 'GorizontalMove' chaqiriladi */
umumiy bo'sh joy chap () {…}
/* Ikkita kafelning qiymatlarini birgalikda taqqoslaydi va agar ular bir xil bo'lsa yoki 0 ga teng bo'lsa (oddiy plitka) - ularning qiymatlari qo'shiladi (agar biz taqqoslayotgan plitalar ikki xil plitka bo'lsa va ular to'g'ri yo'nalishga qarab harakatlansa). - rekursiv ravishda qator bo'ylab harakatlanadi */
umumiy bo'shliq GorizontalMove (int qator, int col, String yo'nalishi) {…}
/* Ikkita kafelning qiymatlarini birgalikda taqqoslaydi va agar ular bir xil bo'lsa yoki 0 ga teng bo'lsa (oddiy plitka) - ularning qiymatlari qo'shiladi (agar biz taqqoslayotgan plitalar ikki xil plitka bo'lsa va ular to'g'ri yo'nalishga qarab harakatlansa). - rekursiv ravishda ustun bo'ylab harakatlanadi */
public void verticalMove (int qator, int col, String yo'nalishi) {…}
Ha, bu juda ko'p usullar, lekin xavotir olmang, aksariyatini tushunish juda oson. Buning ustiga, "Board" klassi eng murakkab, shuning uchun bundan keyin hamma narsa nisbatan sodda bo'ladi.
3 -qadam: Dastur bilan tanishing - Tile
Plitka:
Tavsif: "Plitka" klassi alohida plitalar bilan shug'ullanadi va barcha sinflarning eng kichigi hisoblanadi. Har bir kafel butun sonli qiymat va rangga ega. U 0 (standart) yoki #qiymatli plitkalarni yaratadigan ikkita konstruktorga ega. Usullar, asosan, o'z -o'zidan tushunarli bo'lib, "getter" va "setter" usullari umumiy miqdorni tashkil qiladi.
Konstruktorlar:
/ * 0 * qiymatli asosiy kafelni quradi.
umumiy kafel () {…}
/ * Raqam qiymatiga ega kafel yasaydi */
umumiy kafel (int raqami) {…}
Usullari:
/ * Plitka qiymatini oladi */
public int getValue () {…}
/ * Plitka qiymatini belgilaydi - ikkita plitkani bir -biriga qo'shganda ishlatiladi */
public void setValue (int qiymati) {…}
/ * Plitkani String sifatida ifodalaydi - GUIda ishlatiladi */
public String toString () {…}
/ * Plitka rangini uning qiymatiga qarab belgilaydi */
umumiy bo'shliq setColor () {…}
/ * Plitka rangini oladi */
public void getColor () {…}
4 -qadam: Dastur - O'yin bilan tanishing
O'yin
Tavsif: O'yin sinfida asosiy usul, GUI usullarining aksariyati va asosiy o'zaro ta'sirlar mavjud. Bu "Tile" va "Board" sinflarini oladi va birgalikda ishlashga imkon beradi.
Konstruktorlar:
Hech kim
Usullari:
/ * kerakli o'lchamdagi GUIni o'rnatadi va kalit tinglovchini qo'shadi */
umumiy statik bo'shlik setUpGUI () {…}
/ * Vard yoki o'q tugmachalari bosilganligini tekshiradi va tegishli amallarni bajaradi - JFrame -ni har bir harakat bilan yangilaydi */
public void keyPressed (KeyEvent e) {…}
/ * GUI -ni bir qator chiziqlar, taxtalar, plitkalar bilan bo'yaydi va o'yin tugagandan so'ng ularni qayta bo'yashini ta'minlaydi */
ommaviy bo'sh bo'yoq (Grafika g) {…}
/ * individual kafelni chizadi - bo'yoq usulidan chaqiriladi */
umumiy bo'sh joy DrawTiles (Grafika g, Tile kafel, int x, int y) {…}
/ * Asosiy usul - GUIni o'rnatadi va o'yinni boshlaydi */
umumiy statik void asosiy (String args) {…}
5 -qadam: Muhim usullar - harakat
Harakat usullarini tushunish eng muhim, lekin xushxabar - vertikal harakatlarni tushunganingizdan so'ng, siz buni gorizontal harakatlarga qo'llashingiz mumkin. Aslida, uchta vertikal harakat usuli uchta gorizontal usul harakati bilan bir xil, faqat bitta satr bo'ylab, ikkinchisi esa ustunlar bo'ylab. Shuning uchun, keling, vertikal harakat usullariga to'xtalib o'tamiz.
private void verticalMove (int qator, int col, String yo'nalishi)
{Tile boshlang'ich = taxta [chegara] [col]; Tile solishtirish = taxta [qator] [col]; if (initial.getValue () == 0 || initial.getValue () == solishtirish.getValue ()) {if (qator> chegara || (yo'nalish. teng ("pastga") && (qator <chegara))) {int addScore = initial.getValue () + solishtirish.getValue (); if (initial.getValue ()! = 0) {ball += addScore; } initial.setValue (addScore); solishtiring. setValue (0); }} else {if (direction.equals ("pastga")) {chegara--; } boshqa {chegara ++; } verticalMove (qator, ustun, yo'nalish); }}
Yuqoridagi vertikalMove usuli "yuqoriga" va "pastga" usullari bilan chaqiriladi. Keling, "yuqoriga" usulini ko'rib chiqaylik.
ommaviy bo'shliq ()
{for (int i = 0; i <grids; i ++) {border = 0; for (int j = 0; j <grids; j ++) {if (board [j] .getValue ()! = 0) {if (border <= j) {verticalMove (j, i, "up"); }}}}}
Bu usul butun taxtadan o'tadi va "yuqoriga" parametrli har bir plitka uchun verticalMove -ni chaqiradi. vertikal ravishda "j" va "i" pozitsiyalaridagi plitkani "chegara" va "i" pozitsiyasidagi plitka bilan taqqoslaydi. Agar ikkalasi teng bo'lsa, ular birlashtiriladi. Agar ular bo'lmasa, chegara katakchasi 1 ga ko'payadi (chunki parametr "yuqoriga") va verticalMove yana chaqiriladi.
Tavsiya:
O'zingizning Arduino -ni IP -tarmog'iga ulash uchun o'zingizning WIFI shlyuzingizni qanday qilish kerak?: 11 qadam (rasmlar bilan)
Qanday qilib o'zingizning Arduino -ni IP -tarmog'iga ulash uchun o'zingizning WIFI shlyuzingizni yaratishingiz mumkin?: Ko'p odamlar sizning fikringizcha, Arduino uyni avtomatlashtirish va robotlashtirish uchun juda yaxshi echimdir! Men robot ustida ishlayapman, u doimiy ravishda ishlaydigan server bilan bog'lanishi kerak
Java -da poker o'yinini qanday qilish kerak: 4 qadam
Java -da poker o'yinini qanday qilish kerak: Java -ni biladigan va Java -da poker o'yini yaratmoqchi bo'lganlar uchun bu ko'rsatma. Avvalo, sizga Java -dan foydalanishga imkon beradigan kodlash ilovasi yoki veb -sayti bo'lgan kompyuter kerak bo'ladi. Men DrJ -dan foydalanishni tavsiya qilaman
Kod o'yinini buzish, Arduino asosidagi jumboq qutisi: 4 qadam (rasmlar bilan)
Kod o'yinini buzish, Arduino -ga asoslangan jumboq qutisi: Ushbu yo'riqnomada men sizga o'z kodingizni o'yinchini qanday yaratishni ko'rsatmoqchiman, siz tasodifiy yaratilgan kodni seyfga taxmin qilish uchun aylanuvchi kodlovchi terish vositasidan foydalanasiz. Seyfning old tomonida 8 ta svetodiod o'rnatilgan bo'lib, ular sizga qancha
Yumshoq o'yinchoqli Bluetooth zarlari va Android o'yinini MIT App Inventor yordamida ishlab chiqish: 22 qadam (rasmlar bilan)
Yumshoq o'yinchoqli Bluetooth zarlari va Android o'yinini MIT App Inventor yordamida ishlab chiqish: zar o'yinining boshqa uslubi bor 1) an'anaviy yog'och yoki guruch zarlar bilan o'ynash 2) mobil yoki kompyuterda tasodifiy zar yoki zarracha qiymati bilan o'ynang. zarni jismonan o'ynang va tangani mobil yoki kompyuterda harakatlantiring
Kompyuteringizni avtomatik ravishda o'chirishni dasturlashtiring, buni xohlagan vaqtingizni belgilang: 4 qadam
Siz xohlagan vaqtni belgilash orqali shaxsiy kompyuteringizni avtomatik ravishda o'chirishni dasturlashtiring: ha, bu mening kundalik hayotimdan olingan yana bir ko'rsatma … oxirgi marta men kompyuterimga ko'plab dasturiy ta'minotni yuklaganman va men uni yuklashga ruxsat bergandim. Bir kecha -kunduzda, men yuklashni tugatgandan so'ng va kompyuterni tun bo'yi yoqishni xohlamadim