mavhum sinf Parcha {
// ... moveTo ( lavozim : Position ) { bu . pozitsiya = pozitsiya
}
mavhum canMoveTo ( pozitsiya : Lavozim ) : mantiqiy }
Bizning parcha sinfimiz:
berilgan imzo bilan mos keluvchi canMoveTo deb nomlangan usulni amalga oshirishlari kerakligini aytadi . Agar sinf Piece-ni kengaytirsa , lekin mavhum canMoveTo usulini qo'llashni unutib qo'ysa, bu kompilyatsiya vaqtida xatolikdir: mavhum sinfni qo'llaganingizda, uning mavhum usullarini ham amalga oshirishingiz kerak.
MoveTo uchun standart dastur bilan birga keladi (uning pastki sinflari xohlasa, bekor qilishi mumkin). Biz moveTo ga kirish modifikatorini oʻrnatmadik , shuning uchun u sukut boʻyicha hammaga ochiq , yaʼni u boshqa har qanday koddan oʻqilishi va yozilishi mumkin.
canMoveTo ni amalga oshirish uchun Kingni yangilaymiz . Qulaylik uchun biz masofadan turib funksiyasini ham amalga oshiramiz, shuning uchun ikki qism orasidagi masofani osongina hisoblashimiz mumkin:
// ...
sinf Lavozim {
// ... masofaFrom ( lavozim : Pozitsiya ) {
qaytish {
daraja : Math.abs ( pozitsiya . daraja - bu . daraja ),
fayl : Math.abs ( pozitsiya . fayl . charCodeAt ( 0 ) - bu . fayl . charCodeAt ( 0 ))
}
}
}
sinf Qirol uzaytiradi Piece { canMoveTo ( pozitsiya : Position ) {
ruxsat bering masofa = bu . pozitsiyasi . masofaFrom ( pozitsiya ) qaytish masofa . daraja < 2 && masofa . fayl < 2
}
}
Yangi o'yin yaratganimizda, biz avtomatik ravishda taxta va ba'zi qismlarni yaratamiz:
// ...
sinf O'yin { shaxsiy dona = O'yin . makePieces ()
xususiy statik makePieces() { qaytish [
// Shohlar
yangi King ( 'Oq' , 'E' , 1 ), yangi King ( 'Qora' , 'E' , 8 ),
// Qirolichalar yangi Qirolicha ( 'Oq' , 'D' , 1 ),
Do'stlaringiz bilan baham: |