O'tgan darslarda Kiber-Qahramonimiz yugurishni, sakrashni va xavfli lazerlardan qochishni o'rgandi. Ammo mukofot bo'lmasa qiyinchiliklarni yengishdan nima ma'no bor? Bugun biz o'yinga yaltirab turuvchi energiya kristallarini, ochkolar hisoblagichini (Score HUD) va o'yinchini shoshiltiruvchi 60 soniyalik teskari taymerni qo'shamiz!
Qahramon boshidan oxirigacha bo'sh yo'lakda yugurib boradi. Xaritadagi baland joylarga sakrashga hech qanday qiziqish qolmaydi.
O'yinchi baland platformaga sakrab, tikanlar ustidagi qimmatbaho 500 ballik oltin kristalni olish uchun jon kuydiradi!
const coins = [
{ x: 180, y: 320, size: 16, collected: false },
{ x: 340, y: 220, size: 16, collected: false },
{ x: 520, y: 160, size: 20, collected: false, bonus: true },
{ x: 680, y: 280, size: 16, collected: false }
];
x, y: Ekranning qaysi piksellarida turishi.size: Hajmi (oddiy 16px, yirik bonus 20px).collected: false: Bayroq: agar qahramon tegsa, true bo'ladi va o'chadi!Agar qahramonning tanasi kristal turgan maydon bilan to'qnashsa — kristal yig'ilgan hisoblanadi!
function checkCoinCollisions() {
coins.forEach(coin => {
if (!coin.collected &&
player.x < coin.x + coin.size &&
player.x + player.w > coin.x &&
player.y < coin.y + coin.size &&
player.y + player.h > coin.y) {
coin.collected = true; // Kristall yo'qoladi!
score += 100; // 100 ball qo'shiladi!
playCoinSound(); // Dzing! ovozi yangraydi!
}
});
}
function drawHUD() {
ctx.fillStyle = "#FFD700"; // Oltin rang
ctx.font = "bold 16px 'JetBrains Mono', monospace";
ctx.fillText("⭐ BALLAR: " + score, 20, 30);
}
Kristal olingan paytda qahramon boshining tepasida 1 soniyaga yorqin +100! yozuvi paydo bo'lib, yuqoriga suzib yo'qoladi. Bu o'yinga katta zavq bag'ishlaydi!
Taymersiz o'yinchi bir joyda qotib turaverishi mumkin. Teskari sanoq esa o'yinchini harakatga keltirib, hayajonni oshiradi!
let timeLeft = 60; // 60 soniya
setInterval(function() {
if (timeLeft > 0 && !gameOver) {
timeLeft--;
} else if (timeLeft === 0) {
triggerTimeOutGameOver(); // Vaqt tugadi, o'yin tugadi!
}
}, 1000);
Agar o'yinchi 4 soniya ichida ketma-ket 3 ta kristal olsa — COMBO x2 rejimi yoqiladi! Endi har bir kristal 100 emas, 200 ball beradi!
let combo = 1;
let comboTimer = null;
function addScoreWithCombo() {
score += 100 * combo;
combo++;
clearTimeout(comboTimer);
// 3 soniyada yangi kristal olinmasa kombi nolga tushadi
comboTimer = setTimeout(() => { combo = 1; }, 3000);
}
function drawCrystal(x, y, size) {
ctx.save();
ctx.fillStyle = "#00e5ff"; // Kiber moviy
ctx.shadowColor = "#00e5ff"; // Yorug'lik
ctx.shadowBlur = 12;
ctx.beginPath();
ctx.moveTo(x, y - size); // Tepasi
ctx.lineTo(x + size, y); // O'ngi
ctx.lineTo(x, y + size); // Pasti
ctx.lineTo(x - size, y); // Chapi
ctx.closePath();
ctx.fill();
ctx.restore();
}
ctx.shadowBlur = 12 kiber-shahar qorong'uligida kristallarning atrofida ko'zni quvontiruvchi neon yorug'lik halqasini hosil qiladi!
Xandaq ustidagi kristallar qahramonga qayerga sakrash kerakligini ko'rsatib turadi.
O'tkir tikanlar ustidagi kristal. Olish xavfli, ammo +300 ball beradi!
Faqat yuqori sakrab chiqiladigan eng baland tom ustidagi yashirin xazina.
Dars papkasidagi yangilangan o'yinda quyidagi sinovlar bajariladi:
game/index.html ni oching.// Xaritaga yangi mega-kristall qo'shamiz!
coins.push({
x: 450,
y: 120, // Eng balandda!
size: 24,
collected: false,
scoreValue: 500 // 500 ball!
});
VS Code da game.js faylini oching. Taymerni 30 soniya qilib "HARDCORE" rejimini yoqishingiz yoki o'zingiz istagan balandlikka yangi kristallarni joylashtirishingiz mumkin!
coins massivida yashaydi.collected = true bo'ladi va ball qo'shiladi.