s21_tetris/README_UZB.md
2025-04-09 14:36:44 +00:00

11 KiB
Raw Permalink Blame History

BrickGame Tetris

Qisqa mazmuni: ushbu loyihada siz tuzilmaviy yondashuv yordamida “Tetris” o'yinini C dasturlash tilida amalga oshirasiz.

💡 Ushbu loyiha haqida biz bilan fikr-mulohazalaringizni baham korish uchun bu yerni bosing. Bu anonim bolib, jamoamizga talimni yaxshilashga yordam beradi. Loyihani tugatgandan so'ng darhol so'rovnomani to'ldirishni tavsiya qilamiz.

Mundarija

Kirish

“Tetris” o'yinini amalga oshirish uchun loyiha ikki qismdan iborat bo'lishi kerak: o'yin ishi mantig'ini amalga oshiradigan va kelajakda turli GUI-larga ulanishi mumkin bolgan kutubxonalar hamda terminal interfeysi. Kutubxona ishi mantig'i songgi avtomatlar yordamida amalga oshirilishi kerak, ularning mumkin bo'lgan tavsiflaridan biri quyida keltirilgan.

Chapter I

Umumiy ma'lumot

BrickGame

BrickGame bir nechta o'rnatilgan o'yinlarga ega bolgan 90-yillardagi mashhur portativ konsol bo'lib, u Xitoyda ishlab chiqilgan. O'yin dastlab SSSRda ishlab chiqilgan va Nintendo tomonidan GameBoy platformasi doirasida chiqarilgan “Tetris” o'yinining nusxasi edi, ammo vaqt o'tishi bilan qo'shib borilgan ko'plab boshqa o'yinlarni ham o'z ichiga olgandi. Konsolda 10 x 20 o'lchamdagi o'yin maydoni bo'lgan kichik ekrancha bolib, bu "piksellar" matritsasini ifodalardi. Maydonning o'ng tomonida joriy o'yin holati, rekordlar va boshqa qo'shimcha ma'lumotlarning raqamli ko'rsatkichini oz ichiga olgan tablo bor edi. BrickGame-dagi eng keng tarqalgan o'yinlar: tetris, tankalar, poyga, frogger va iloncha edi.

BrickGameConsole

Tetris tarixi

"Tetris" Aleksey Pajitnov tomonidan 1984 yil 6 iyunda Elektronika-60 kompyuterida yozilgan. O'yin to'rt kvadratdan iborat geometrik tetramino figuralaridan foydalanishga asoslangan boshqotirma edi. O'yinning birinchi tijorat versiyasi 1987 yilda Amerikada chiqarilgan. Keyingi yillarda Tetris mobil telefonlar, kalkulyatorlar va shaxsiy chontak kompyuterlarini o'z ichiga olgan turli xil qurilmalarga ko'chirildi.

Game Boy o'yin konsoli va NES video pristavkasi uchun “Tetris”ning amalga oshirilishi eng katta mashhurlikka erishdi. Ammo bundan tashqari, o'yinning turli xil versiyalari mavjud. Misol uchun, uch olchamli figuralarga ega bo'lgan versiya yoki duel versiyasi mavjud bo'lib, unda ikkita o'yinchi bir xil figuralarni qabul qiladi va bir-biridan ochkolar bo'yicha ozib ketishga harakat qiladi.

Songgi avtomatlar

Algoritmlar nazariyasidagi songgi avtomat (SA) matematik abstraksiya, bitta kirish, bitta chiqishga ega bo'lgan va vaqtning har bir lahzasida ko'plab mumkin bo'lganlardan bitta holatda bo'luvchi diskret qurilma modelidir.

SA ishlayotganda, kirish ta'sirlari kirishda ketma-ket qabul qilinadi, chiqishda esa SA chiqish signallarini hosil qiladi. SAning bir ichki holatidan ikkinchisiga o'tishi nafaqat tashqi ta'sir, balki o'z-o'zidan ham sodir bo'lishi mumkin.

SA ma'lum muammolarni hal qilishga imkon beruvchi algoritmlarni tavsiflash uchun, shuningdek, deyarli har qanday jarayonni modellashtirish uchun ishlatilishi mumkin. Ba'zi misollar:

  • O'yinlar uchun sun'iy intellekt mantigi;
  • Sintaktik va leksik tahlil;
  • Murakkab amaliy tarmoq protokollari;
  • Ma'lumotlarni oqimli qayta ishlash.

Quyida BrickGamedan bir nechta o'yinlarning o'yin mantigini formallashtirish uchun SA dan foydalanish misollari keltirilgan.

Frogger

Frogger

“Frogger” Brickgame konsollarida chiquvchi eng so'nggi o'yinlardan biridir. O'yinda o'yin maydonchasi bo'lib, u bo'ylab xodalar harakatlanadi va ular ustidan sakrab o'tish orqali o'yinchi qurbaqani bir sohildan boshqasiga ko'chirishi kerak boladi. Agar o'yinchi suvga tushib qolsa yoki qurbaqa o'yin maydoni chegarasidan chiqsa, qurbaqa o'ladi. O'yinchi qurbaqani boshqa sohilga olib kelganda yoki oxirgi qurbaqa ham o'lganida, o'yin tugaydi.

Ushbu o'yinning mantig'ini formallashtirish uchun songgi avtomatning quyidagi versiyasini tasavvur qilish mumkin:

Frogger1

Ushbu SA quyidagi holatlarga ega:

  • Start o'yin o'yinchi o'ynashga tayyorlik tugmasini bosishini kutadigan holat.
  • Spavn keyingi qurbaqa yaratiluvchi holat.
  • Harakatlanish foydalanuvchi tomonidan kiritilgan ma'lumotlar qayta ishlanuvchi asosiy o'yin holati: qurbaqani chiziq bo'ylab chapga/o'ngga siljitish yoki oldinga/orqaga sakrash.
  • Siljish taymer muddati tugagandan so'ng yuzaga keladigan holat, bunda chiziqlardagi barcha obyektlar qurbaqa bilan birga o'ngga siljiydi.
  • Toqnashuv bu qurbaqa sakrashdan keyin suvga tushib qolganda yoki xodalar harakatlanib, qurbaqa oyin maydonidan tashqariga chiqib qolganda sodir boladigan holat.
  • Boshqa sohilga erishildi qurbaqa yuqoridagi boshqa sohilga yetib kelganida yuzaga keladigan holat.
  • O'yin tugadi boshqa sohilga yetib borganidan keyin yoki oxirgi qurbaqaning ham o'limidan keyin yuzaga keladigan holat.

SA yordamida froggerni amalga oshirish misolini code-samples papkasida topishingiz mumkin.

Tetris

Tetris

Tetris, aftidan, Brickgame konsoli uchun eng mashhur o'yinlardan biridir. Konsolning o'zi ko'pincha Tetris deb ham ataladi. O'yinning maqsadi o'yin tomonidan yuzaga keltiriluvchi bloklardan qatorlar qurish orqali ochko to'plashdir. O'yin tomonidan yaratilgan galdagi blok pastki chegaraga yetmaguncha yoki boshqa blok bilan to'qnashmaguncha o'yin maydonidan pastga tusha boshlaydi. Foydalanuvchi qatorlar hosil qilishga harakat qilib, shakllarni aylantirishi va ularni gorizontal ravishda siljitishi mumkin. To'ldirilgandan so'ng, qator yo'q boladi, o'yinchi ochko oladi va to'ldirilgan qator ustidagi bloklar pastga siljiydi. Navbatdagi shakl eng yuqori qatorda to'xtaganda o'yin tugaydi.

Ushbu o'yinning mantig'ini formallashtirish uchun songgi avtomatning quyidagi variantini taqdim etish mumkin:

Tetris1

Ushbu SA quyidagi holatlardan iborat:

  • Start o'yin o'yinchi o'ynashga tayyorlik tugmasini bosishini kutadigan holat.
  • Spavn keyingi blokni yaratish va spavn uchun keyingi blokni tanlashdagi o'yin holati.
  • Harakatlanish — foydalanuvchining kiritishni qayta ishlashi bilan bogliq asosiy oʻyin holati: bloklarni aylantirish/gorizontal ravishda bloklarni harakatlantirish.
  • Siljish taymer muddati tugagandan so'ng o'yin otadigan holat. Unda joriy blok bir daraja pastga siljiydi.
  • Ulanish joriy blok allaqachon tushib bolgan bloklarga yoki yerga “tekkanidan” keyin oyin otadigan holat. Agar to'ldirilgan qator hosil bo'lsa, u yo'qolib, qolgan bloklar pastga siljiydi. Agar blok eng yuqori qatorda to'xtasa, o'yin "o'yin tugadi" holatiga o'tadi.
  • O'yin tugadi O'yin tugadi.

Chapter II

Loyiha talablari

1-qism. Asosiy topshiriq

Siz BrickGame v1.0 aka Tetris dasturini amalga oshirishingiz kerak:

  • Dastur gcc kompilyatoridan foydalangan holda C11 standartidagi C tilida ishlab chiqilishi kerak.
  • Dastur ikki qismdan iborat bo'lishi kerak: Tetris o'yinining mantigini amalga oshiradigan kutubxonalar va ncurses kutubxonasi yordamida terminal interfeysi.
  • O'yin mantig'ini formallashtirish uchun songgi avtomatdan foydalanish kerak.
  • Kutubxona, kirishda foydalanuvchi tomonidan kiritiluvchilarni qabul qiladigan funksiyaga va har safar u o'zgarganda o'yin maydonining joriy holatini tavsiflovchi matritsa hosil qiluvchi funksiyaga ega bo'lishi kerak.
  • Dastur kutubxonasi kodi src/brick_game/tetris papkasida joylashgan bo'lishi kerak.
  • Dastur interfeysi kodi src/gui/cli papkasida joylashgan bo'lishi kerak
  • Dastur tuzilmasi GNU dasturlari uchun standart maqsadlar to'plamiga ega Makefile yordamida sozlanishi kerak: all, install, uninstall, clean, dvi, dist, test, gcov_report. O'rnatish boshqa har qanday ixtiyoriy katalogda amalga oshirilishi kerak.
  • Dastur tuzilgan dasturlash tamoyillari asosida ishlab chiqilishi kerak.
  • Kod yozishda C++ uchun Google Style ((havola)[(https://google.github.io/styleguide/cppguide.html)]) ga amal qiling.
  • Kutubxona, check kutubxonasidan foydalangan holda unit testlar bilan qoplangan bo'lishi kerak (testlar ОС Darwin/Ubuntu ga o'tkazilishi kerak). Kutubxonaning testlar tomonidan o'yin mantig'i bilan qamrab olinishi kamida 80 foiz bo'lishi kerak.
  • O'yinda quyidagi mexanika mavjud bo'lishi kerak:
    • Shakllarni aylantirish;
    • Shaklni gorizontal ravishda siljitish;
    • Shakllar tushishini tezlashtirish (tugmachani bosganda, shakl oxirigacha pastga siljiydi);
    • Keyingi shaklni ko'rsatish;
    • To'ldirilgan qatorlar yoq bolishi;
    • O'yin maydonining yuqori chegarasiga yetganda o'yinning tugashi;
    • O'yin quyidagi rasmda ko'rsatilgan barcha turdagi shakllarni o'z ichiga olishi kerak.
  • Boshqarish uchun jismoniy konsolda taqdim etilgan barcha tugmalar qollab-quvvatlanishini qoshing:
    • O'yin boshlanishi,
    • Pauza,
    • O'yinni tugatish,
    • Chapga qaratilgan strelka shaklning chapga siljishi,
    • O'ngga qaratilgan strelka shaklning o'ngga siljishi,
    • Pastga qaratilgan strelka shaklning tushishi,
    • Yuqoriga qaratilgan strelka bu o'yinda ishlatilmaydi,
    • Harakat (shaklning aylanishi).
  • O'yin maydoni konsol o'yin maydonining o'lchamlariga mos kelishi kerak: kengligi o'n "piksel" va balandligi yigirma "piksel".
  • Shakl maydonning pastki chegarasiga yetib borganidan keyin yoki boshqa shaklga tekkanidan keyin toxtashi kerak. Shundan so'ng, prevyuda ko'rsatilgan keyingi shakl hosil bo'lishi lozim.
  • Kutubxona interfeysi bu yerda joylashgan tavsifga mos kelishi kerak.
  • Foydalanuvchi interfeysi o'yin maydonini va qo'shimcha ma'lumotlarni ko'rsatishni qo'llab-quvvatlashi kerak.
  • Foydalanilayotgan SAni (uning holatlari va barcha mumkin bo'lgan o'tishlarini) tavsiflovchi har qanday formatdagi diagramma tayyorlang.

Ishlatiluvchi shakllar:

shakllar

2-qism. Qo'shimcha. O'yindagi ochkolarni hisoblash va rekord

O'yinga quyidagi mexanikani qo'shing:

  • ochkolarni hisoblash;
  • ochkolarning maksimal miqdorini saqlash.

Ushbu ma'lumot yon paneldagi foydalanuvchi interfeysi tomonidan uzatilishi va chiqarilishi kerak. Ochkolarning maksimal miqdori faylda yoki o'rnatiluvchi malumotlar bazasini boshqarish tizimida saqlanishi va dasturni ishga tushirish oralig'ida saqlanishi kerak.

Agar foydalanuvchi o'yin davomida joriy maksimal ochko miqdori korsatkichidan oshib ketsa, maksimal ochko miqdori o'yin davomida o'zgarishi kerak.

Ochkolarni hisoblash quyidagi tarzda amalga oshiriladi:

  • 1 qator 100 ochko;
  • 2 qator 300 ochko;
  • 3 qator 700 ochko;
  • 4 qator 1500 ochko.

3-qism. Qo'shimcha. Darajalar mexanikasi

O'yinga darajadagi mexanikani qo'shing. Har safar o'yinchi 600 ochko to'plaganida, daraja 1 ga oshadi. Darajani oshirish shakllar tezligini oshiradi. Maksimal darajalar soni 10.