O'tgan darsda trassada tikan va lazer bor edi — lekin ular qimirlamaydi, o'ylamaydi. Bugun biz trassaga tirik dushman qo'yamiz: u patrul qiladi, qahramonni ko'radi va ortidan quvadi. Dushmanning "miyasi" — bu sehr emas, bu uchta oddiy qoida, va siz ularni bugun o'zingiz sozlaysiz.
Bir joyda turadi. Siz yo'lni yodlab olasiz va 3-urinishda muammosiz o'tasiz. Qiziqish 2 daqiqada tugaydi.
Harakatlanadi, lekin doim bir xil. Ritmni poylash kerak. Bu allaqachon qiziqroq, ammo lazer sizni ko'rmaydi.
Sizga qarab o'zgaradi. Yashirinsangiz — qidiradi. Yugursangiz — quvadi. Har o'yin boshqacha chiqadi. Mana shuning uchun Mario, Roblox va Among Us zerikarli emas.
Dushman qahramonni ko'rmayapti. U o'z yo'lida sokin yuradi: chapga, o'ngga, chapga... Ustida belgi yo'q.
Qahramon ko'rish radiusiga kirdi! Dushman to'xtaydi va 0.5 soniya o'ylaydi. Ustida sariq ? chiqadi. Bu sizga qochish uchun berilgan fursat.
Dushman qizil ! bilan qahramon tomon yuguradi. Tezligi oshadi. Tegib ketsa — 1 jon ketadi (o'tgan darsdagi HP tizimi).
Bu uchta kayfiyatning almashuvi — holat mashinasi (state machine). Xuddi shu narsa svetoforni ham boshqaradi: qizil → sariq → yashil. Dunyodagi deyarli barcha o'yin dushmanlari shu tamoyilda ishlaydi.
// dushman.yon: 1 = o'ngga, -1 = chapga
dushman.x = dushman.x + dushman.yon * dushman.tezlik;
if (dushman.x > dushman.ongChegara) {
dushman.yon = -1; // burildi
}
if (dushman.x < dushman.chapChegara) {
dushman.yon = 1; // yana burildi
}
Patrul kengligi slayderi — chegaralar orasidagi masofa. Tor qilsangiz dushman bir joyda tebranadi, keng qilsangiz butun xonani aylanadi.
Kompyuter dushman bilan qahramon orasidagi masofani o'lchaydi. Agar masofa ko'rish radiusidan kichik bo'lsa — birinchi shart bajarildi. Bu xuddi sizning atrofingizdagi ko'rinmas doira.
Dushmanning orqa ko'zi yo'q! U faqat o'zi qarab turgan tomonni ko'radi. Agar qahramon orqada bo'lsa — dushman uni sezmaydi. Mana shuning uchun o'yinlarda dushman orqasidan o'tish mumkin.
masofa = |qahramon.x - dushman.x|;
oldindami = (qahramon.x - dushman.x) * dushman.yon > 0;
if (masofa < korishRadiusi && oldindami) {
dushman.kayfiyat = 'SEZDI'; // ❓ sariq belgi
}
Agar dushman devor orqali ham ko'raversa, o'yinchi hech qayerga yashirina olmaydi — va o'yin adolatsiz bo'lib qoladi. Yashirinish imkoni — o'yinni qiziqarli qiladigan asosiy narsa.
U dushmanning ko'zidan qahramongacha ko'rinmas nur (ray) tortadi. Agar nur yo'lda biror devorga urilsa — demak ko'rinmaydi. Bu usul Line of Sight (ko'rish chizig'i) deb ataladi.
Tugmani bosing va maydon o'rtasida ustun paydo bo'ladi. Ustun orqasiga turib ko'ring — dushmanning sariq konusi devorda kesiladi va siz ko'rinmay qolasiz. Keyin tugmani o'chiring va farqni his qiling.
if (qahramon.x > dushman.x) {
dushman.yon = 1; // o'ngga yugur
} else {
dushman.yon = -1; // chapga yugur
}
dushman.x += dushman.yon * dushman.taqibTezligi;
Ha, shundoq xolos. Dunyodagi eng mashhur o'yin dushmanlarining ko'pi aynan shu to'rt qator bilan quvadi. Murakkab "sun'iy intellekt" emas — oddiy taqqoslash. Aqlli ko'rinish esa ko'rish radiusi va kechikish hisobiga paydo bo'ladi.
Darhol unutadi va patrulga qaytadi. O'yinchi bir qadam orqaga tisarilib, dushmanni cheksiz aldayveradi. Zerikarli.
Hech qachon unutmaydi va o'yin oxirigacha quvadi. O'yinchi hech qachon dam ololmaydi. Asabiylashtiradi.
3 soniya eslab turadi. Qahramon ko'rinmay qolganda dushman yana 3 soniya o'sha tomonga yuradi, keyin "hm, yo'qoldi" deb patrulga qaytadi. Mana bu tirik tuyuladi.
0 soniya → aqlsiz dushman. 10 soniya → shafqatsiz dushman. Eng qiziqarli qiymatni o'zingiz toping va varaqaga yozib qo'ying.
Stendda Dushman tezligi slayderini qahramon tezligidan yuqoriga ko'taring va 30 soniya o'ynab ko'ring. His qilasiz: o'yin darhol yoqimsiz bo'lib qoladi. Keyin pastga tushiring — qiziqish qaytadi. Mana shu o'yin dizayneri ishi.
Dushman teskari tomonga qaragan paytni poylang va orqasidan sekin o'ting. Muvaffaqiyat bo'lsa — varaqaga ✔ qo'ying.
"Devor" tugmasini yoqing. Ustun ortida turib, dushmanning konusi qanday kesilishini kuzating. Radiusni o'lchab yozing.
Dushmanni ta'qibga qo'zg'ating, keyin yashirining. Necha soniyadan keyin u patrulga qaytdi? Sekundomer bilan o'lchang.
Uchta slayderni shunday sozlangki, o'yin qiyin, lekin halol bo'lsin. Uchta raqamni varaqaga ko'chiring — bu sizning shaxsiy retseptingiz.
1) У меня 2D-игра на JavaScript. Враг патрулирует между двумя точками. Подскажи, какую скорость врага поставить, если скорость героя = 4, чтобы игра была сложной, но честной? 2) Добавь врагу состояние "ПОДОЗРЕНИЕ": он останавливается на 0.5 сек и показывает знак ? перед тем, как начать погоню. 3) Объясни простыми словами, что такое Line of Sight в играх, для ученика 6 класса.