⬅️ Bosh sahifaga
1 / 9

🎲 Loyiha Ishi: “Tic Tac Toe” O‘yini

O'tilgan mavzularni amalda qo'llash

Vaqt taqsimoti

  • Kirish va loyiha talablari - 20 daqiqa
  • Tic Tac Toe o‘yinini tuzish (1-qism) - 25 daqiqa
  • Tic Tac Toe o‘yinini tuzish (2-qism) - 20 daqiqa
  • Amaliy mashqlar - 25 daqiqa
  • Xulosa va uy vazifasi - 20 daqiqa
  • Qayta aloqa va savollar - 10 daqiqa

Jami: 120 daqiqa (2 soat) 🕐

📋 Loyiha Talablari

Dastur vazifalari:

  • O‘yin natijalarini faylda saqlash.
  • O‘yin doskasini ko‘rsatish va tekshirish.
  • G‘olibni aniqlash (filter va reduce).
  • O‘yin vaqtini o‘lchash (dekorator).
  • O‘yin uchun noyob ID generatori.
  • Tasodifiy o‘yinchi tanlash va modullar.

Loyiha tuzilmasi:

📂 `natijalar.txt` — o'yin natijalari fayli

📁 `utils.py` — yordamchi funksiyalar moduli

📄 `main.py` — asosiy dastur fayli

🛠️ Dastur Tuzish (1-qism)

1. O‘yin doskasini yaratish

# main.py doska = [" " for _ in range(9)] def doskani_korsat(): print(f"{doska[0]} | {doska[1]} | {doska[2]}") print("-" * 9) print(f"{doska[3]} | {doska[4]} | {doska[5]}") print("-" * 9) print(f"{doska[6]} | {doska[7]} | {doska[8]}")

2. O‘yin ID generatori

# main.py def id_generator(): id = 1 while True: yield id id += 1 gen = id_generator() print(f"O‘yin ID: {next(gen)}")

🛠️ Dastur Tuzish (1-qism)

3. G‘olibni aniqlash (map va lambda)

# main.py golib_kombinatsiyalari = [ (0, 1, 2), (3, 4, 5), (6, 7, 8), (0, 3, 6), (1, 4, 7), (2, 5, 8), (0, 4, 8), (2, 4, 6) ] def golibni_tekshir(o‘yinchi): return any(map(lambda x: doska[x[0]] == doska[x[1]] == doska[x[2]] == o‘yinchi, golib_kombinatsiyalari))

4. Bo‘sh joylarni filtrlash (filter)

# main.py doska = ["X", "O", " ", " ", "X", " ", "O", " ", " "] bosh_joylar = list(filter(lambda x: doska[x] == " ", range(9))) print(bosh_joylar) # [2, 3, 5, 7, 8]

🛠️ Dastur Tuzish (2-qism)

1. Vaqtni o‘lchash uchun dekorator

import time def vaqt_olchagich(funksiya): def wrapper(*args, **kwargs): boshlanish = time.time() natija = funksiya(*args, **kwargs) tugash = time.time() print(f"O‘yin {tugash - boshlanish:.4f} sekund davom etdi.") return natija return wrapper @vaqt_olchagich def o‘yin_boshlash(): print("O‘yin boshlandi!") time.sleep(1) print("O‘yin tugadi!") o‘yin_boshlash()

🛠️ Dastur Tuzish (2-qism)

2. Durrangni aniqlash (reduce)

from functools import reduce doska = ["X", "O", "X", "O", "X", "O", "X", "O", "X"] toliq = reduce(lambda x, y: x and y != " ", doska, True) print(f"Doska to‘ldimi? {toliq}")

3. Custom modul (utils.py)

# utils.py import random def boshlovchi_oyinchi(): return random.choice(["X", "O"]) # main.py from utils import boshlovchi_oyinchi oyinchi = boshlovchi_oyinchi() print(f"Boshlovchi o‘yinchi: {oyinchi}")

🏋️ Amaliy Mashqlar

Mashq 1 & 2: Doska va g'olibni tekshirish

  • Doskada 5-raqamli joyga "X" qo'yib doskani ko'rsating.
  • Doskaning birinchi qatorini "O" bilan to'ldiring va g'olibni tekshiring.

Mashq 3: Natija va bo'sh joylar

  • ID generatori bilan yangi ID oling va natijani faylga yozing.
  • Doskadagi bo'sh joylarni toping (`filter` bilan).

🎯 Xulosa va 🏠 Uy Vazifasi

Bugun o'rgandik:

✅ O‘tilgan mavzularni (fayllar, map, filter, reduce, generator, dekoratorlar, modullar) "Tic Tac Toe" o'yini loyihasida qo‘lladik.

Uy vazifasi:

  • `natijalar.txt`ga yana 2 ta o‘yin natijasini qo‘shing.
  • Doskaning birinchi ustunini "X" bilan to‘ldiring va g‘olibni tekshiring.
  • `utils.py`ga `oyinchi_almashish(joriy_oyinchi)` funksiyasini qo'shing.

Keyingi dars: Pythonda OOP: Obyektga yo‘naltirilgan dasturlash 🚀

🗣️ Savollar va Qayta Aloqa

Savollaringiz bormi? 🤔

Bugungi darsda faol ishtirok etganingiz uchun rahmat! 👏

Eslab qoling: Nazariy bilimlarni amaliyotda qo'llash - dasturchi uchun eng muhim ko'nikmadir.