Scratch bilan vizual dasturlash
O'tgan hafta kompyuter 0 va 1 bilan ishlashini ko'rdik. Endi birinchi dasturimizni yozamiz, lekin klaviaturada emas, balki rangli bloklarni bir-biriga ulab. Scratch sintaksis xatolaridan xoli, shuning uchun dasturlashning eng muhim g'oyalariga, ya'ni ketma-ketlik, sikl, shart va o'zgaruvchiga to'liq e'tibor qaratamiz.
Bu darsda nimani o'rganasiz
2.1 Scratch nima?
Scratch, Massachusets Texnologiya Instituti (MIT) yaratgan bepul muhit bo'lib, unda kod yozish o'rniga rangli bloklarni bir-biriga ulab dastur quriladi. Bu usul vizual dasturlash deyiladi.
Vizual dasturlash deganda kod matnini terish o'rniga, tayyor bloklarni sichqoncha bilan ulab dastur tuzish tushuniladi. Har bir blok bitta ko'rsatma, masalan «10 qadam yur» yoki «Salom de».
Nega aynan shu yerdan boshlaymiz? Sabablari sodda:
- Sintaksis xatosi bo'lmaydi, ya'ni qavs yoki nuqta-vergulni unutib qo'yib xato olmaysiz
- Bloklar faqat mantiqan mos joyga ulanadi, shuning uchun struktura o'z-o'zidan to'g'ri chiqadi
- Natijani darhol sahnada ko'rasiz, bu o'rganishni qiziqarli qiladi
Eng asosiysi: Scratchda o'rgangan g'oyalaringiz, ya'ni sikl, shart va o'zgaruvchi, keyinchalik C, Python yoki JavaScriptda ham aynan shunday ishlaydi. Demak bu o'yinchoq emas, balki haqiqiy poydevor.
2.2 Sahna, sprite va bloklar
Scratch ekrani uchta asosiy qismdan iborat. O'ng tomonda sahna, ya'ni dastur natijasi ko'rinadigan maydon. Uning ostida sprite ro'yxati. Chap tomonda esa bloklar palitrasi va ularni yig'adigan bo'sh joy.
Sprite deganda sahnada harakatlanadigan personaj yoki obyekt tushuniladi, masalan mushuk, to'p yoki raketa. Sahna (stage) esa sprite'lar harakatlanadigan fon, ya'ni o'yin maydoni.
Bloklar rangi bo'yicha guruhlarga ajratilgan. Rangni ko'rib, blok nima qilishini taxmin qilish mumkin. Quyidagi palitrada har bir kategoriyani bosib ko'ring:
Diqqat qiling: har bir rang bitta vazifa guruhini bildiradi. Ko'k harakat, binafsha ko'rinish, sariq hodisa va hokazo. Bu rangli mantiq Scratchni o'qishni juda osonlashtiradi.
2.3 Birinchi skript: hodisalar
Har bir dastur biror narsadan boshlanishi kerak. Scratchda dasturni ishga tushiruvchi signal hodisa (event) deb ataladi. Eng keng tarqalgani: «yashil bayroq bosilganda».
Bloklar to'plami skript deyiladi. Skript doim tepada «shapka» shaklidagi hodisa bloki bilan boshlanadi, ostiga esa ketma-ket ko'rsatmalar ulanadi. Mana eng oddiy skript:
Bu skript shunday ishlaydi: foydalanuvchi yashil bayroqni bosadi, hodisa ishga tushadi, sprite «Salom!» deydi. Quyida o'zingiz sinab ko'ring:
2.4 Harakat va ko'rinish
Endi sprite'ni harakatga keltiramiz. Buning uchun ikki kategoriya kerak bo'ladi: Harakat (ko'k bloklar) sprite'ni siljitadi va buradi, Ko'rinish (binafsha bloklar) esa uni gapirtiradi yoki tashqi qiyofasini o'zgartiradi.
Sahna koordinatalari
Sahnaning markazi x = 0, y = 0 nuqtasi. O'ngga siljisa x ortadi, yuqoriga siljisa y ortadi. «x: 100 y: 0 ga bor» bloki sprite'ni aniq joyga qo'yadi, «10 qadam yur» esa uni qaragan tomoniga suradi.
Eng ko'p ishlatiladigan bloklar
Mana namunaviy skript: bayroq bosilganda sprite oz oldinga yuradi, so'ng salom beradi.
- «qadam yur» sprite'ni qaragan yo'nalishida suradi
- «daraja buril» uni belgilangan burchakka aylantiradi
- «de» blokida yozgan matningiz sprite tepasida pufakcha bo'lib chiqadi
- «kostyumni o'zgartir» sprite qiyofasini almashtiradi, bu animatsiya yaratadi
Tugma bilan boshqarish: hodisaning kuchi
Haqiqiy o'yinlar foydalanuvchi tugmalariga javob beradi. «strelka bosilganda» bloki klaviatura hodisasini ushlaydi va sprite'ni shu yo'nalishda suradi. Pastdagi strelkalarni bosing (yoki sahnani bosib, klaviatura strelkalaridan foydalaning):
2.5 Sikllar: bir narsani takrorlash
Tasavvur qiling, sprite bilan kvadrat chizmoqchisiz. Kvadratning 4 ta teng tomoni va 4 ta burchagi bor. Demak «oldinga yur» va «90 daraja buril» juftligini 4 marta yozish kerak. Buni qo'lda 4 marta nusxalash zerikarli va xatoga moyil.
Yechim oddiy. Sikl (loop) deganda bir guruh ko'rsatmani belgilangan necha marta avtomatik takrorlovchi blok tushuniladi. «4 marta takrorla» bloki ichiga ikkita blokni solamiz, xolos:
Ko'rdingizmi? Atigi 3 ta blok (1 sikl + 2 ko'rsatma) butun kvadratni chizdi. Sikllar dasturni qisqa, toza va xatosiz qiladi.
Yana bir maxsus sikl bor: abadiy (forever). U ichidagi bloklarni to'xtovsiz, dastur tugaguncha takrorlaydi. Masalan o'yinda «abadiy: sichqonchaga qarab yur» bloki dushmanni doimo o'yinchi ortidan ergashtiradi.
2.6 Shartlar va sezish
Hozircha dasturimiz bir xil ketma-ketlikda ishladi. Lekin haqiqiy dasturlar vaziyatga qarab qaror qabul qiladi. Buning uchun shart kerak.
Shart (condition) deganda javobi faqat «ha» yoki «yo'q» bo'ladigan savol tushuniladi, masalan «sprite chetga tegdimi?». Bunday savollarni Sezish (moviy) kategoriyasi beradi. «agar ... bo'lsa» bloki esa shart bajarilgandagina ichidagi kodni ishlatadi.
Eng foydali ko'rinishi «agar ... bo'lsa, aks holda» bloki. U ikki yo'ldan birini tanlaydi: shart rost bo'lsa birinchi qism, yolg'on bo'lsa ikkinchi qism ishlaydi. Quyida tugmani bosib, qaysi tarmoq yonishini kuzating:
Shartlar dasturga «aql» beradi: u endi vaziyatni sezadi va shunga qarab turlicha harakat qiladi.
2.7 O'zgaruvchilar
O'yinda ochkoni qanday sanaymiz? Sprite necha jonli qolganini qayerda saqlaymiz? Buning uchun o'zgaruvchi ishlatiladi.
O'zgaruvchi (variable) deganda qiymat saqlaydigan nomli «quti» tushuniladi, masalan «ochko», «jon» yoki «tezlik». Quti ichidagi qiymatni istalgan vaqtda o'qish yoki o'zgartirish mumkin.
Ikki asosiy amalni adashtirmaslik muhim. «0 ga o'rnat» qutidagi eski qiymatni o'chirib, butunlay yangisini yozadi. «1 ga o'zgartir» esa qutidagi songa qo'shadi. Quyida ikkalasini sinab ko'ring:
«o'zgartir» boriga qo'shadi, «o'rnat» esa to'liq yangi qiymat beradi. Farqni tugmalarni navbat bilan bosib ko'ring.
2.8 Amaliy mashq: skriptni o'zingiz yig'ing
Endi hamma narsani birlashtiramiz. Pastdagi palitradan bloklarni bosib skript yig'ing, so'ng yashil bayroqni bosing va sprite sahnada sizning ko'rsatmalaringizni bajarsin. Takror sonini o'zgartirib, butun skriptni sikl ichiga olishingiz ham mumkin.
Palitra
Skriptingiz
E'tibor bering: sprite bloklarni yuqoridan pastga, aynan siz qo'ygan tartibda bajaradi. Bu o'sha ketma-ketlik qoidasi. Takror sonini oshirsangiz, sikl butun raqsni qayta-qayta ishlatadi.
2.9 Real loyihalar
Endi o'rgangan to'rt g'oyani (ketma-ketlik, sikl, shart, o'zgaruvchi) birlashtirib, haqiqiy o'yinlardagi kabi to'liq dasturlarni ko'ramiz. Har biri siz Scratchda darhol qura oladigan real loyiha.
Loyiha 1: Devordan sakraydigan to'p
Bu eng mashhur birinchi o'yin. To'p to'xtovsiz yuradi va devorga (chetga) urilganda qaytib sakraydi. Mana butun dastur, atigi bir necha blok. Yonidagi sahnada uni ishga tushiring:
«abadiy» sikli o'yinning yuragi: u to'xtamasdan ishlaydi. Ichida ikki ish bor, ya'ni harakat va shartni tekshirish. Bu naqsh deyarli har bir o'yinda uchraydi.
Loyiha 2: Olma yig'uvchi mushuk
Endi o'zgaruvchi va sezishni birlashtiramiz. Mushuk olmaga tegsa, «ochko» bittaga ortadi. Bu har qanday «yig'ish» o'yinining asosi:
Olmani esa klon qilib osmondan tushiramiz (buni keyingi bo'limda ko'ramiz). Mana shu uch g'oya: sikl, shart va o'zgaruvchi to'liq bir o'yinni hosil qiladi.
Loyiha 3: Strelka bilan boshqarish
Yuqorida tugma bilan sprite'ni surdik. Real o'yinda buning kodi juda qisqa: har bir strelka uchun alohida kichik skript. Mushuk o'ngga yursin desangiz:
Diqqat qiling: bu ikki skript bir vaqtda, mustaqil ishlaydi. Scratchda ko'p skript bir paytda yashashi mumkin, har biri o'z hodisasini kutadi.
Bashorat qiling: bu skript nima qiladi?
Kodni o'qish, uni yozishdek muhim. Skriptni ko'rib, natijani toping. Javobni bossangiz, to'g'risi belgilanadi:
1. Bu skript sprite bilan nima qiladi?
2. Skript tugagach «ochko» o'zgaruvchisi nechaga teng bo'ladi?
3. «abadiy» sikli ichidagi blok qanday ishlaydi?
2.10 Chuqurroq advanced
Asoslarni egalladingiz. Endi Scratchning kuchli imkoniyatlari bilan tanishamiz. Bu tushunchalar haqiqiy dasturlash tillarida ham aynan mavjud, faqat boshqacha nomlanadi.
Xabarlar (broadcast)
Xabar (broadcast) deganda bir sprite boshqasiga yuboradigan signal tushuniladi. Bir sprite «xabar yubor» blokini ishlatadi, ikkinchisi esa «xabarni qabul qilganda» bloki orqali javob beradi. Shu yo'l bilan sprite'lar bir-biri bilan «gaplashadi» va sahnalar almashinadi. Bu haqiqiy dasturlashdagi hodisalar tizimining (event) aynan o'zi.
Klonlar (clone)
Klon (clone) deganda sprite'ning dastur ishlash vaqtida yaratilgan nusxasi tushuniladi. Bitta sprite'dan o'nlab o'q, yulduz yoki dushman yaratish uchun ishlatiladi: bittasini chizib, kerakli paytda klonlaysiz. Bu katta dasturlardagi «obyekt nusxasi» g'oyasiga juda yaqin.
Ro'yxatlar (list)
Ro'yxat (list) deganda ko'plab qiymatni bitta nom ostida tartib bilan saqlaydigan tuzilma tushuniladi. Masalan eng yuqori natijalar jadvali yoki savollar to'plami. Oddiy o'zgaruvchi bitta qiymat saqlasa, ro'yxat butun bir ro'yxatni saqlaydi. Bu haqiqiy tillardagi massiv tushunchasining o'zi.
O'z bloklaringiz (custom blocks)
Agar bir guruh blok ko'p marta takrorlansa, ularni bitta yangi blokka jamlash mumkin. O'z bloki (custom block) deganda foydalanuvchi yaratgan, bir nom bilan chaqiriladigan blok tushuniladi. Masalan «yulduz chiz» degan o'z blokingizni yasab, uni istalgan joyda bir marta bosib ishlatasiz. Bu dasturlashdagi funksiya tushunchasining boshlanishi, ya'ni kodni qayta ishlatish va murakkablikni kamaytirish vositasi.
2.11 Bilim testi
Testdan oldin: asosiy atamalar
Bu hafta o'rgangan tushunchalar. Test oldidan ko'z yugurtirib chiqing:
Endi sinab ko'ramiz
16 ta savol. Haftani yakunlash uchun kamida 11 tasiga to'g'ri javob bering.
Tabriklaymiz! 2-hafta yakunlandi
Endi siz birinchi dasturingizni yozdingiz va dasturlashning to'rt ustunini bilasiz: ketma-ketlik, sikl, shart va o'zgaruvchi. Xabar, klon va o'z bloklari bilan ham tanishdingiz. Bu g'oyalar har qanday tilda bir xil ishlaydi.
Keyingi hafta tayyor: C tili asoslari.
Keyingi modulga o'tish