Vibecoding · 14-dars · 7–8-sinflar
Fan: Vibecoding · O'yin va ma'lumot Kohorta: 7–8-sinf Hafta: 3 (2-soat)

Dushmanlar, Ochko va Leaderboard: Dvigateldan O'yingacha

O'tgan darsda siz dvigatel qurdingiz: tsikl, delta time, fizika, to'qnashuv. Lekin dvigatel — bu hali o'yin emas. O'yin bo'lishi uchun maqsad, xavf va natija kerak. Bugun biz ochko tizimini, dushman to'lqinlarini va sinf reyting jadvalini quramiz — hamda nega ochkoga ishonib bo'lmasligini bilib olamiz.

Dvigatel ≠ o'yin

Harakatlanadigan kvadrat — bu hali o'yin emas

1 · MAQSAD

O'yinchi nima uchun harakat qiladi? Ochko yig'ish, omon qolish, rekord o'rnatish. Maqsadsiz o'yin — bu ekran saqlagich.

2 · XAVF

Yutqazish mumkin bo'lishi shart. Yutqazib bo'lmaydigan o'yinda g'alabaning qiymati yo'q. Xavf — bu ochkoning narxi.

3 · NATIJA

O'yin tugagach raqam qolishi kerak — va uni boshqalar bilan solishtirish mumkin bo'lsin. Mana shuning uchun leaderboard bor.

Bugungi darsning tuzilishi

Uchala element bugun quriladi: ochko (maqsad), dushman to'lqinlari (xavf) va reyting jadvali (natija). Dars oxirida sinfda bitta umumiy jadval bo'ladi va siz undagi o'rningizni ko'rasiz.

Teskari aloqa halqasi

Ochko — bu mukofot emas, bu xabar

Ochko o'yinchiga nima deydi

  • "To'g'ri qilding" — ochko o'sganda o'yinchi qaysi harakat foydali ekanini tushunadi.
  • "Xavf arziydi" — qiyinroq dushman ko'proq ochko bersa, o'yinchi xavfni tanlaydi. Bu qiziqarli qaror.
  • "Yaxshiroq bo'lyapsan" — o'z rekordini urish — eng kuchli motivatsiya.

Kombo: oddiy, lekin kuchli

// Ketma-ket urish kombo beradi
kombo = kombo + 1;
ochko = ochko + 10 * kombo;

// Xato qilsa — kombo nolga tushadi
if (jarohat) kombo = 0;

// 5 ta ketma-ket: 10+20+30+40+50 = 150
// 5 ta uzilib:    10+10+10+10+10 = 50

Nega kombo o'yinni o'zgartiradi

Kombosiz o'yinchi ehtiyotkor o'ynaydi. Kombo bilan u tavakkal qiladi — chunki uzilish og'riqli. Bitta qator kod o'yinchining butun xulq-atvorini o'zgartiradi. Mana bu — dizayn.

Qiyinlik egri chizig'i

Dushmanlar to'lqin bo'lib keladi va asta kuchayadi

Spawn — dushman qayerdan paydo bo'ladi

// Har N soniyada yangi dushman
spawnTaymer -= dt;
if (spawnTaymer <= 0){
  dushmanlar.push(yangiDushman());
  spawnTaymer = spawnOraligi;
}

// To'lqin o'sgani sayin oraliq qisqaradi
spawnOraligi = 2.0 - tolqin * 0.15;
if (spawnOraligi < 0.4) spawnOraligi = 0.4;

Qiyinlikni oshirishning 3 yo'li

  • Ko'proq dushman — eng oddiy, lekin tez zeriktiradi.
  • Tezroq dushman — yaxshiroq, reaksiyani sinaydi.
  • Boshqacha dushman — eng yaxshi: yangi xulq, yangi strategiya kerak bo'ladi.
  • Eng yomon usul: dushmanga ko'p jon berish. Bu qiyin emas, bu uzoq va zerikarli.

🎮 Stendda

Stendda har 15 soniyada yangi to'lqin boshlanadi: dushman tezligi oshadi va oraliq qisqaradi. Yuqorida joriy to'lqin raqami ko'rsatiladi. Necha to'lqingacha yetganingizni varaqaga yozing.

O'yin holat mashinasi

O'yinda uchta ekran bor — va ular chalkashmasligi kerak

MENU

Ism kiritiladi, boshlash tugmasi. O'yin tsikli ishlaydi, lekin update qahramonni qimirlatmaydi.

PLAYING

Asosiy holat: fizika, dushmanlar, ochko, to'lqinlar. Klaviatura qahramonni boshqaradi.

GAME OVER

Yakuniy ochko ko'rsatiladi, rekord saqlanadi, leaderboard yangilanadi. Space — qaytadan.

Nega bu muhim

function update(dt){
  if (holat === 'MENU')      return;          // hech narsa qilmaydi
  if (holat === 'GAMEOVER')  return;
  // faqat shu yerdan pastda o'yin mantig'i
  qahramonniYangila(dt);
  dushmanlarniYangila(dt);
}

// Holatni tekshirmasangiz: GAME OVER ekranida
// dushmanlar harakatda qoladi va ochko o'sishda davom etadi.
Ma'lumotni saqlash tili

JSON — obyektni matnga, matnni obyektga

Ikkita funksiya — hammasi shu

var natija = { ism:'Aziz', ochko:1240, tolqin:7 };

// Obyekt -> matn (saqlash uchun)
var matn = JSON.stringify(natija);
// '{"ism":"Aziz","ochko":1240,"tolqin":7}'

// Matn -> obyekt (o'qish uchun)
var qayta = JSON.parse(matn);
qayta.ochko + 10;   // 1250 — bu yana son!

Nega matnga aylantirish kerak

  • localStorage faqat matn saqlaydi — obyektni to'g'ridan-to'g'ri qo'ysangiz [object Object] chiqadi.
  • Tarmoq bo'ylab ham faqat matn uzatiladi. Server JSON qabul qiladi.
  • JSON — barcha tillar tushunadigan format: Python, Java, PHP, Swift.

⚠️ Eng ko'p uchraydigan xato

// ❌ parse ni unutish
var reyting = localStorage.getItem('top');
reyting.push(yangi);   // XATO: bu matn, massiv emas!

// ✅ To'g'ri
var reyting = JSON.parse(localStorage.getItem('top') || '[]');
reyting.push(yangi);
localStorage.setItem('top', JSON.stringify(reyting));
Massiv, sort, top-10

Reyting jadvali — uchta amaldan iborat

Uchta amal

// 1. Qo'shish
reyting.push({ ism:ism, ochko:ochko, sana:Date.now() });

// 2. Saralash — kattadan kichikka
reyting.sort(function(a, b){
  return b.ochko - a.ochko;
});

// 3. Faqat top-10 ni qoldirish
reyting = reyting.slice(0, 10);

sort() ni tushunish

  • sort ga taqqoslash funksiyasi beriladi: u ikkita elementni oladi va son qaytaradi.
  • b.ochko - a.ochkokamayish (katta birinchi). a.ochko - b.ochko → o'sish.
  • ⚠️ Funksiyasiz sort() sonlarni matn sifatida saralaydi: [100, 9, 80][100, 80, 9]. Klassik tuzoq!
Darsning eng muhim g'oyasi

Mijoz tomonidan kelgan ochkoga hech qachon ishonmang

Buzish qanchalik oson

// Brauzerda F12 -> Console va bitta qator:
localStorage.setItem('top',
  JSON.stringify([{ism:'Men', ochko:999999}]));

// Yoki to'g'ridan-to'g'ri o'zgaruvchiga:
ochko = 999999;

// Tamom. Rekord "o'rnatildi".

Nega bunday

  • Brauzerdagi butun kod o'yinchi kompyuterida ishlaydi — demak u kodni ham, xotirani ham o'zgartira oladi.
  • localStorage — bu himoya emas, bu shunchaki qulaylik. U parol bilan yopilmagan.
  • Shuning uchun jiddiy o'yinlarda ochko serverda hisoblanadi.

Real o'yinlar buni qanday hal qiladi

  • Server hisoblaydi. Mijoz faqat harakatlarni yuboradi, ochkoni server o'zi chiqaradi. Eng ishonchli, lekin qimmat.
  • Takrorlash yozuvi (replay). O'yin barcha tugma bosishlarini saqlaydi, server o'yinni qayta o'ynab tekshiradi.
  • Mantiqiy tekshiruv. "30 soniyada 999999 ochko olish mumkin emas" — shubhali natija rad etiladi.
Turnir · 12 daqiqa

Sinf turniri: lab/index.html ni oching

1 · Ism (1 daq)

Ismingizni kiriting va 2 ta mashq o'yin o'ynang. Boshqaruvni his qiling: harakat, sakrash, dushmanni bosish.

2 · Rekord (5 daq)

Eng yaxshi natijangizni qo'ying. Komboni uzmaslikka harakat qiling — aynan u eng ko'p ochko beradi.

3 · Tahlil (3 daq)

Jadvaldagi o'rningizni yozing. Birinchi o'rindagi natijadan qancha orqadasiz? Qaysi to'lqinda yutqazdingiz?

4 · Cheat (3 daq)

💀 CHEAT tugmasini bosing — jadvalga soxta rekord tushadi. Keyin 🛡 Tekshirish ni bosing va nima bo'lishini ko'ring.

🏆 Sinf chempioni

Dars oxirida o'qituvchi proyektorda jadvalni ochadi. Birinchi uch o'rin e'lon qilinadi. Lekin: avval 🛡 Tekshirish ishga tushadi va mumkin bo'lmagan natijalar o'chiriladi.

Tayyor promptlar

AI bilan ma'lumot va xavfsizlik

Nusxa oling

1) Объясни, почему нельзя доверять счёту,
   который прислал браузер игрока.
   Приведи 3 способа защиты в реальных играх.

2) Напиши функцию на JavaScript, которая
   сортирует массив {ism, ochko} по убыванию
   очков и оставляет топ-10.

3) Почему [100, 9, 80].sort() даёт
   [100, 80, 9]? Объясни и покажи, как
   исправить.

Javobni tekshirish

  • 3-promptning javobi darsdagi tuzoq bilan mos kelishi kerak — sort() sonlarni matn sifatida saralaydi.
  • AI bergan kodni stendda sinab ko'ring: jadval to'g'ri saralanyaptimi?
  • AI "localStorage xavfsiz" desa — bu xato javob. Bugun buning aksini o'z ko'zingiz bilan ko'rdingiz.
Nimani o'rgandik

Dvigateldan to'liq o'yingacha — ikki darsda

13-dars bergan narsa

  • Canvas va o'yin tsikli: CLEAR → UPDATE → DRAW.
  • Delta Time — har kompyuterda bir xil tezlik.
  • Fizika uchta qator va AABB to'qnashuv.

14-dars bergan narsa

  • Ochko, kombo va dushman to'lqinlari — o'yin dizayni.
  • Holat mashinasi: MENU → PLAYING → GAME OVER.
  • JSON, sort va leaderboard.
  • Va eng muhimi: mijoz ma'lumotiga ishonib bo'lmaydi.
Baholash mezoni

Uy vazifasi: turnir hisoboti va himoya rejasi (10 ball)

Nima qilish kerak

  • Turnir natijalarini varaqaga yozing: ochko, to'lqin, o'rin.
  • JSON.stringify va JSON.parse nima qilishini misol bilan yozing.
  • Cheat sinovini tavsiflang: nima qildingiz va tekshiruv nima qildi.
  • Himoya rejasi: o'yiningizni aldashdan himoya qilishning 2 ta usulini taklif qiling.

Baholash mezoni

  • Turnir natijalari jadvali — 3 ball
  • JSON izohi misol bilan — 3 ball
  • Cheat sinovi tavsifi — 2 ball
  • Himoyaning 2 ta usuli — 2 ball
Target International School Введение 1 / 1 0–3