Java-da veb-asosidagi poker o'yini yozish

Java-da veb-asosidagi poker o'yini yozish

Java-da veb-asosidagi poker o'yinini yozish Ushbu yozuvda men Java 5, JSP 2.0 va Hibernate-dan foydalanib yozgan ilovamni buzaman. Men hamma ishni kuzatishga harakat qilaman
08.09.2021

Bu yozuvda men Java 5, JSP 2.0 va bir oz kutish rejimidan foydalanib yozgan ilovamni buzaman. Ishonchli manba nazorat qilish tizimi yordamida amalga oshirilgan barcha ishlarni, shu jumladan o'zgarishlarni kuzatishga harakat qilaman.

Yangilanish 21.05.2005:

Mening do'stim, Piter Zaybel, Practical Common Lisp shuhrati, xatoni payqadi. Asosan, men ham qizargan, ham to'la uy yoki to'rt turdagi qo'llarni to'g'ri ajratmadim. Men xatoni tuzatdim, garchi u hech qachon 7 kartali o'yinda paydo bo'lmasa. Bir xil kostyumga ega bo'lgan 5 ta kartaga ega bo'lish uchun sizga 5 ta noyob daraja kerak bo'ladi, bunda 7 ta umumiy kartochka bilan bir qatorda uchtasi ham yaxshi bo'ladi. O'ylaymanki, men o'sha paytda bu haqda o'ylardim va uni optimallashtirish deb hisoblayman, lekin poker dvigateli umumiy bo'lishi va bu ishni ko'rib chiqishi kerak. Men Flushni topgandan keyin 7 yoki undan kam karta borligini tekshirish orqali optimallashtirishni saqlab qolishim mumkin.

Kirish

Men muhokama qilmoqchi bo'lgan dastur - bu men yaratgan onlayn o'yin. Bu, asosan, mening video pokerning ixtiro qilingan versiyasidir, lekin 5-kartali Draw emas, balki Texas Hold'em-ni asos sifatida ishlatadi. Men buni Texas Solitaire deb atayman. O'yin g'oyasi butunlay doska emas, balki haqiqiy kartalar va chiplar yordamida ishlab chiqilgan. O'yinning birinchi versiyasida amalga oshirilgan qoidalar to'g'risida qaror qabul qilishdan oldin, men turli xil variantlardan foydalanib, yuzlab qo'llarni o'ynadim. Qolaversa, do'stlarim va oilamdan ba'zi fikr -mulohazalarni olganimdan so'ng, hozir joylashtirilgan narsalarni bilish uchun elektron versiyasini o'zgartirdim.

Oyin

O'yin qoidalari quyidagicha boshlandi:

1) Siz 4 ta 2 kartali poker qo'llari bilan boshlaysiz. Siz har xil qo'llar orasidagi garovlarni butun sonli bosqichlarda tarqatish uchun jami 4 dollar olasiz. To'liq 4 dollar tikishingiz kerak.

2) "flop" hal qilinadi. Yana 3 ta karta, yuqoriga qaragan. Endi siz 1 -bosqichda tikilgan qo'llar orasidan yana 4 dollar tikishingiz kerak.

3) "burilish" hal qilinadi. Yana 1 ta karta, yuzi yuqoriga. Endi siz 1 -bosqichda qatnashadigan qo'llar orasiga yana 4 dollar tikishingiz kerak.

4) "Daryo" tarqatiladi. Har bir o'yinchi qo'li uchun eng yaxshi 5 kartali poker qo'li aniqlanadi. Agar hisob teng bo'lsa, ularning barchasi g'olib deb hisoblanadi. Siz g'alaba qozongan har bir qo'l uchun teng miqdordagi pulni yutib olasiz va qo'lingizni yo'qotib qo'ygan pulingizni yo'qotasiz.

Arxitektura

O'yinni tekshirgandan so'ng, men veb -ilovalarni yaratish bo'yicha oldingi tajribamga asoslanib, arxitektura qanday bo'lishi kerakligini o'ylab topdim. Men, shuningdek, poker dvigatelida qurilgan boshqa poker o'yinlari va o'yin uchun yaratilgan boshqa interfeyslar bo'lishi mumkinligini ham hisobga oldim, shuning uchun xavotirlar ajratilganligiga ishonch hosil qilishga harakat qildim. Mana, mening arxitekturadagi birinchi (va ma'lum bo'lishicha, yakuniy) kesim:

Agar biz View, Model va Controller o'rtasidagi farq to'g'ri bajarilgan bo'lsa, biz kelajakda bizga kerakli moslashuvchanlikni berishi kerak. Men pastdan yuqoriga qarab ishlab chiqaruvchi sifatida birinchi bo'lib poker dvigateliga o'tishga qaror qildim. Biz qilishimiz kerak bo'lgan birinchi narsa - talablarni ko'rib chiqish va uni qurishning eng oson yo'lini tanlash. Men ushbu loyiha uchun Java 5-dan foydalanishni tanladim, chunki talablarga qarab, men xavfsiz bo'lishi kerak bo'lgan ko'plab domen ob'ektlari to'plamiga ega bo'lardim va ehtimol, men optimallashtirishni tushunganimdan keyin, ehtimol, dvigatelni qayta ishlashni xohlardim. u Men tashvishlanayotgan narsalardan biri bu dvigatelning kichik qurilmalarga bo'linishini ta'minlash edi, shuning uchun u oxir -oqibat juda samarali bo'lishi kerak edi.Yaxshi qayta ishlov beriladigan tilni tanlab, men ozgina himoyaga ega bo'lardim, chunki men oldindan optimallashtirishni va moslashuvchanlikni yo'qotishni xohlamadim. Java kutubxonasini ishlab chiqish vositasi IntelliJ IDEA 4.5.4. Bu juda samarali muhit va menga refaktoring, birlik sinovlari, kodlarni tahlil qilish, chumolilarga asoslangan tuzilish va yaxshi SCM-ni qo'llab-quvvatlash imkonini beradi. Bu narsa uchun men Eclipse -ni ham ishlatgan bo'lardim, lekin men loyihaning interfeys qismi uchun IDEA -dan foydalanishimni ham bilganim uchun, u tugunni oladi.Bu narsa uchun men Eclipse -ni ham ishlatgan bo'lardim, lekin men loyihaning interfeys qismi uchun IDEA -dan foydalanishimni ham bilganim uchun, u tugunni oladi.Bu narsa uchun men Eclipse -ni ham ishlatgan bo'lardim, lekin men loyihaning interfeys qismi uchun IDEA -dan foydalanishimni ham bilganim uchun, u tugunni oladi.

Ob'ektlar

Keling, ko'pchilik loyihalar boshlanadigan joydan boshlaylik, domen obyekti modeli. Bizga o'yinda haqiqiy dunyo artefaktlarining dasturiy ta'minoti kerak bo'ladi:

Men bu erda Hand Rank -ni alohida chaqirdim, bu jismoniy domen ob'ekti emas, balki qo'llar o'rtasidagi munosabatlarni tushunish va baholash uchun aniq bo'lishi kerak bo'lgan tushuncha. Kimdir bu domen ob'ektlari modeliga tegishli emas deb bahslashishi mumkin, lekin men uni taxtaga va o'yinchilar qo'liga bog'liqligini ko'rsatish uchun qo'yaman deb o'yladim. Ma'lum bo'lishicha, Hand Rank - bu poker dvigatelining yuragi va deyarli barcha dasturlash harakatlari ushbu sinfni amalga oshirishga sarflanadi. Endi domen modelining asosiy qismlari aniqlandi. Biz ularni amalga oshirganimizda, ularning har biri o'zlarini chop etishlari kerak bo'ladi, shuning uchun toString () ni qo'llashimiz kerak. Bundan tashqari, kartalarni tez -tez taqqoslash kerak bo'ladi, shuning uchun ular solishtirishni amalga oshirishlari kerak. Kemaning o'zi kartalarni ishlay olishi, yoqishi va aralashtirishi kerak.Qo'l reytingini olish uchun har qanday qo'lni taxta bilan birlashtirish kerak. Qo'l darajalari bir -biriga o'xshash va o'zgarmas bo'lishi kerak.

Keyingi kun tartibi Texas Solitaire Game modelining dizayni bo'ladi. Aniq burilishlar, harakatlar va hodisalar bo'lgani uchun men uni oddiy boshqaruv mashinasi sifatida amalga oshirishga qaror qildim, uni keyinchalik O'yin boshqaruvchisidan haydash mumkin. Men buni juda cheklab qo'ymadim, lekin bilaman, chunki keyinroq o'zgartirishim mumkin. Bu o'yinda firstBet (), addBet (), flop (), turn (), river () va hal qilish () kabi harakatlarga mos keladigan bir qancha fe'llarga ega bo'ladi. Bu o'yin haqida juda ko'p holatlarni saqlaydi, agar kerak bo'lsa, uni ko'rish mumkin, lekin umuman yashirin qoladi.

Amalga oshirish

Endi biz amalga oshirishning jirkanch qismiga o'tamiz. Men oldinga siljishimni kuzatish uchun JUnit va EMMA dan foydalanishga qaror qildim. Menga Poker Engine qatlamini va Texas Solitaire Game modelini, testlar to'plami va munosib qamrovni amalga oshirish uchun taxminan 2 soat vaqt ketdi. Ishonchim komilki, "Hand Rank" algoritmida hali ham xatolar bor, lekin men O'yin boshqaruvchisi va Ko'rish bo'limiga o'tishga qaror qildim, shunda men bu qanday ketayotganini his qila boshlayman. Mana dunyoning holati, men o'yinning interfeys qismini boshlayman:

UMUMIY QO'SHIMCHA XULOSA

nameclass, % usul, % blok, % qator, % barcha sinflar 100 % (11/11) 84 % (48/57) 94 % (1740/1858) 94 % (306.5/326)

UMUMIY STATS XULOSA

jami paketlar: 2 ta bajariladigan fayllar: 6 ta umumiy sinflar: 11 ta umumiy usullar: 57 ta bajariladigan bajariladigan qatorlar: 326 ta

TOPLAMA YO'LIDA QO'ShIMChA

nameclass, % usul, % blok, % chiziq, % com.sampullara.poker100 % (9/9) 80 % (32/40) 93 % (1442/1547) 94 % (248.6/265) com.sampullara.poker. o'yinlar 100% (2/2) 94% (16/17) 96% (298/311) 95% (57.9/61)

Kodni qamrab olish

Qo'llarning to'g'ri baholanishini ta'minlash uchun Hand Rank -da yo'qolgan qismlar mavjud bo'lsa -da, yo'qolgan qamrovning katta qismi toString () usulidir. Masalan, agar men testlarni joriy to'plam bilan sinxronlashtirsam, lekin tizimda men tekshirgan dastlabki kodni joyida qoldirsam, biz quyidagi natijalarni olamiz:

UMUMIY QO'SHIMCHA XULOSA

nameclass, % usul, % blok, % chiziq, % barcha sinflar 100 % (11/11) 84 % (48/57) 94 % (1745/1858) 94 % (307.1/326)

UMUMIY STATS XULOSA

jami paketlar: 2 ta bajariladigan fayllar: 6 ta umumiy sinflar: 11 ta umumiy usullar: 57 ta bajariladigan bajariladigan qatorlar: 326 ta

TOPLAMA YO'LIDA QO'ShIMChA

nameclass, % usul, % blok, % chiziq, % com.sampullara.poker100 % (9/9) 80 % (32/40) 94 % (1447/1547) 94 % (249.2/265) com.sampullara.poker. o'yinlar 100% (2/2) 94% (16/17) 96% (298/311) 95% (57.9/61)

Bu holda biz faqat 5 ta kod bloklarini qamrab olamiz, lekin biz ko'rmagan 3 ta yangi xatoni ochamiz. oldin Kod qamrovining muntazam o'sishi meni bu xatolarni tuzatishga olib kelardi. Qolaversa, keyinroq biz uning sinov qobiliyatini oshirish uchun kodni qayta ishlaganimni ko'ramiz. O'yinning "Ko'rish va nazorat qilish" bo'limiga o'tishdan oldin, joriy sozlashning rasmini olishimiz mumkin:

Foydalanuvchi interfeysi

Endi foydalanuvchi interfeysi haqida. Men Java dasturidan foydalanganda men juda tozaman, shuning uchun men tanlagan veb -tizim hozirda JSP 2.0. JSP -ning eng yangi versiyasi avvalgi qo'llanmalarini bir qancha muhim usullar bilan yaxshilaydi:

1) Endi siz har bir sahifada taglib va ​​boshqa deklaratsiyalarga ega bo'lishingiz shart emas, buning o'rniga siz o'z ichiga JSP sahifalarini qo'shishingiz mumkin

2) Endi teglar kutubxonasini faqat Java-da emas, balki JSP-da belgilashingiz mumkin

3) Siz foydalanishni cheklashingiz mumkin. veb -ilovangiz ichidagi skriptlar

4) Standart JSP teglar kutubxonasi o'zingizga yozishingiz shart bo'lmagan ko'plab umumiy teglarni o'z ichiga oladi

Boshqa bir yoqimtoyi shundaki, IDEA sizning oldingizda hujjatsiz XML tavsiflovchilarini tahrir qilish uchun zarur bo'lgan XML qo'llab -quvvatlashi bilan bir qatorda juda yaxshi yadroli JSP qo'llab -quvvatlashi bilan birga keladi. Shuningdek, JSP -ni tahrirlash/yangilashni ishlab chiqish modeli sizga ishni tezda bajarishga imkon beradi. Yana bir yoqimli narsa shundaki, sizning sevimli dastur serveringizda JSP 2.0 ishlab chiqishni qo'llab -quvvatlash uchun sizga ko'p kutubxonalar kerak emas, bu sizning ilovalaringizning murakkabligini biroz kamaytiradi. Veb -ilovadagi dastlabki kesish juda qo'pol edi. Men asosan JSP -ni nazoratchi sifatida ishlatardim va o'yin haqidagi fikrim sifatida o'yin holatiga asoslangan JSP -larni ishlatardim. Bu meni tezda ishga tushirishga va IDEA -ni ishlatishga imkon berdi, men buni keyinchalik men g'ururlanadigan va saqlanadigan shaklga qaytarish juda oson bo'lishini bilardim.Bu boshlang'ich versiyada ham ballar, foydalanuvchilar va boshqalar uchun chidamlilik mexanizmi yo'q edi. U haqiqiy hayot sharoitida poker dvigatelini ishlatish usuli sifatida yaratilgan. Uning poker dvigateliga bog'liqligi veb-ilovaning WEB-INF/lib katalogiga Texas Solitaire loyihasidagi .jar faylini qo'shish orqali amalga oshirildi. Tizimning ikki qismi orasidagi bu ajratish tizimning barqarorligini biroz oshiradi. Taxminan bir soatlik ishdan keyin men ishlatgan dastlabki versiya:Tizimning ikki qismi orasidagi bu ajratish tizimning barqarorligini biroz oshiradi. Taxminan bir soatlik ishdan keyin men ishlatgan dastlabki versiya:Tizimning ikki bo'lagi orasidagi bu bo'linish tizimning barqarorligini biroz oshiradi. Taxminan bir soatlik ishdan keyin men ishlatgan dastlabki versiya:

1.0 ga o'tish

Ushbu veb -ilovada juda ko'p kamchiliklar bor, keyin men ularni tuzatishga kirishdim. Mana, vaqt o'tishi bilan qilgan ishlarim, buni ancha yaxshi qildi:

1)

Izohlar bilan Hibernate 3.0 yordamida foydalanuvchilar va kirishlar bilan doimiy yuqori ball ro'yxati qo'shildi 2) Sahifalar uchun "orqada kod" tipidagi mexanizm yordamida JSP nazoratchi kodini Filtrlarga qayta kiritdi

3) Controlletga bog'liqlikni kiritish uchun ServletContextListenerdan foydalanildi

4) Bir qator o'yin ekspluatatsiyalari o'chirildi

Men tizimni ishga tushirgandan so'ng, tizimni juda tez takrorladim va aslida Controller va tirishqoqlik uchun bir necha xil usullardan o'tdim. Men "orqadagi kod" modeliga qaror qildim, chunki bu mening tashvishlarimni aniq ajratishga juda mos edi va men moslashuvchanligi va foydalanish qulayligi tufayli Hibernate bilan bordim. Masalan, barcha qat'iylik kodi izohlarda yoki Controller tomonidan ishlatiladigan interfeyslardan to'liq chiqarib tashlangan. Aslida, agar ma'lumotlar bazasi bo'lmasa, o'yin hali ham foydalanuvchilar ro'yxatining xotirasida amalga oshiriladi. Mana o'yinning hozirgi versiyasi:

O'yin chiqarilgandan so'ng, bir nechta yangi xatolar paydo bo'ldi, ular mening sinovlarim hali ham zaif bo'lgan joyga qaytdi. Men xabar qilingan barcha xatolarni tuzatdim va ular uchun regressiya testlarini qo'shdim. Men yozishni tugatganimdan keyin dvigatelda Hand Rankdan tashqari ko'p narsa o'zgarmadi. Men uni biroz qayta ko'rib chiqdim va biroz optimallashtirdim, shuning uchun u bir xil hisoblarni ikki marta qilmagan. Yaqin dublikatning ko'p qismi o'chirildi.

Mana JUnit va EMMA yakuniy hisoboti:

UMUMIY QO'SHIMCHA XULOSA

nameclass, % usul, % blok, % chiziq, % barcha sinflar 100 % (10/10) 88 % (56/64) 96 % (1744/1823) 97 % (315.9/326)

UMUMIY STATS XULOSA

jami paketlar: 2 ta bajariladigan fayllar: 6 ta umumiy sinflar: 10 ta umumiy usullar: 64 ta bajariladigan bajariladigan qatorlar: 326 ta

TOPLAMA YO'LIDA QO'ShIMChA

nameclass, % usul, % blok, % chiziq, % com.sampullara.poker100 % (8/8) 85 % (40/47) 95 % (1450/1522) 97 % (259/268) com.sampullara.poker. o'yinlar100% (2/2) 94% (16/17) 98% (294/301) 98% (56.9/58)

Qizig'i shundaki, men ushbu kod bazasi yordamida EMMA da xato topdim. Manbada u yopilmagan deb da'vo qiladigan chiziq bor, lekin shunday. Buni tuzatish kerak!

Xulosa

Umid qilamanki, sizga Java -ga asoslangan veb -ilova qurilishining boshidan oxirigacha ushbu ko'rgazmasi yoqdi. Asosan, men odamlarga JSP -ga asoslangan juda yaxshi dasturlarni uchinchi tomon ramkalariga qaramasdan yozishingiz mumkinligini ko'rsatmoqchi edim. Bundan tashqari, men odamlar Java 5 -dagi umumiy xususiyatlar, ro'yxatlar va izohlar kabi ba'zi yangi xususiyatlarni ko'rishni xohlardim. Bundan tashqari, ushbu dasturda kutish rejimidan foydalanish EJB 3 da ko'riladigan narsalarni aks ettiradi. Bundan tashqari, ushbu dasturni Tomcat 5.5.9 kabi oddiy konteynerda ishga tushirish ham yoqimli.

Onlayn kazino
O'yin -kulgi avtomatlari
Onlaynkazino

Bizning yangiliklarimizga obuna bo'lish orqali birinchi eksklyuziv taklifni oling va eng yaxshi onlayn kazinolarda har kungi ajoyib chegirmalarimizdan foydalaning!