Bilişim Sınıfı Çalışmaları 5.Ders - Computer Science Class Activities, Lesson 5

5.Sınıf:



    Oynamak İçin Tıkla
       
                                                                               6.Sınıf:




   Etkinlik Materyallerine Ulaşmak İçin Tıkla

    
Pc Toplama Oyunu Html Kodları: 

    
'
<!DOCTYPE html>

<html lang="tr">

<head>

  <meta charset="UTF-8">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>2D PC Toplama Oyunu</title>

  <style>

    * {

      box-sizing: border-box;

      user-select: none;

    }


    body {

      font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;

      background-color: #1a1a2e;

      color: #fff;

      margin: 0;

      padding: 20px;

      display: flex;

      flex-direction: column;

      align-items: center;

    }


    h1 {

      margin-bottom: 5px;

      color: #00fff5;

    }


    p {

      color: #a6a6a6;

      margin-bottom: 20px;

    }


    /* Oyun Alanı Konfigürasyonu */

    .game-container {

      display: flex;

      gap: 30px;

      background: #16213e;

      padding: 25px;

      border-radius: 15px;

      box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);

    }


    .panel {

      background: #0f3460;

      border-radius: 10px;

      padding: 20px;

      width: 280px;

      display: flex;

      flex-direction: column;

      align-items: center;

      gap: 15px;

    }


    .panel h2 {

      margin-top: 0;

      font-size: 1.2rem;

      border-bottom: 2px solid #00fff5;

      padding-bottom: 5px;

      width: 100%;

      text-align: center;

    }


    /* Sürüklenebilir Parçalar */

    .part {

      width: 220px;

      padding: 12px;

      background: #e94560;

      color: white;

      border-radius: 8px;

      text-align: center;

      font-weight: bold;

      cursor: grab;

      transition: transform 0.2s, background 0.2s;

      box-shadow: 0 4px 6px rgba(0,0,0,0.3);

    }


    .part:active {

      cursor: grabbing;

    }


    .part.dragging {

      opacity: 0.5;

      transform: scale(0.95);

    }


    /* Kasa Yuvaları (Drop Zone) */

    .slot {

      width: 220px;

      height: 50px;

      border: 2px dashed #00fff5;

      border-radius: 8px;

      display: flex;

      justify-content: center;

      align-items: center;

      color: #888;

      font-size: 0.9rem;

      transition: background 0.3s, border-color 0.3s;

    }


    .slot.drag-over {

      background: rgba(0, 255, 245, 0.2);

      border-style: solid;

    }


    .slot.filled {

      border: 2px solid #00ff88;

      background: #00ff88;

      color: #000;

      font-weight: bold;

    }


    /* Buton ve Durum Mesajı */

    #start-btn {

      margin-top: 20px;

      padding: 12px 30px;

      font-size: 1.1rem;

      font-weight: bold;

      color: #fff;

      background-color: #555;

      border: none;

      border-radius: 8px;

      cursor: not-allowed;

      transition: 0.3s;

    }


    #start-btn.active {

      background-color: #00ff88;

      color: #0f3460;

      cursor: pointer;

      box-shadow: 0 0 15px #00ff88;

    }


    #status {

      margin-top: 15px;

      font-size: 1.1rem;

      font-weight: bold;

      height: 25px;

    }

  </style>

</head>

<body>


  <h1>🎮 2D PC Toplama Oyunu</h1>

  <p>Parçaları sürükleyip kasadaki doğru yuvalara yerleştirin!</p>


  <div class="game-container">

    <!-- Sol Panel: Parçalar -->

    <div class="panel" id="parts-panel">

      <h2>Bileşenler</h2>

      <div class="part" draggable="true" id="cpu">🖥️ İşlemci (CPU)</div>

      <div class="part" draggable="true" id="gpu">🎮 Ekran Kartı (GPU)</div>

      <div class="part" draggable="true" id="ram">⚡ RAM Bellek</div>

      <div class="part" draggable="true" id="psu">🔌 Güç Kaynağı (PSU)</div>

      <div class="part" draggable="true" id="motherboard">🟩 Anakart</div>

    </div>


    <!-- Sağ Panel: PC Kasası -->

    <div class="panel" id="case-panel">

      <h2>PC Kasası</h2>

      <div class="slot" data-target="motherboard">Anakart Yuvası</div>

      <div class="slot" data-target="cpu">CPU Soketi</div>

      <div class="slot" data-target="ram">RAM Slotu</div>

      <div class="slot" data-target="gpu">PCIe (GPU) Slotu</div>

      <div class="slot" data-target="psu">PSU Bölmesi</div>

    </div>

  </div>


  <button id="start-btn" disabled>Sistemi Çalıştır</button>

  <div id="status"></div>


  <script>

    const parts = document.querySelectorAll('.part');

    const slots = document.querySelectorAll('.slot');

    const startBtn = document.getElementById('start-btn');

    const statusText = document.getElementById('status');


    let placedCount = 0;

    const totalParts = parts.length;


    // --- Sürükleme Olayları (Drag Events) ---

    parts.forEach(part => {

      part.addEventListener('dragstart', (e) => {

        e.dataTransfer.setData('text/plain', part.id);

        part.classList.add('dragging');

      });


      part.addEventListener('dragend', () => {

        part.classList.remove('dragging');

      });

    });


    // --- Bırakma Alanı Olayları (Drop Zone Events) ---

    slots.forEach(slot => {

      slot.addEventListener('dragover', (e) => {

        e.preventDefault(); // Drop işlemine izin ver

        slot.classList.add('drag-over');

      });


      slot.addEventListener('dragleave', () => {

        slot.classList.remove('drag-over');

      });


      slot.addEventListener('drop', (e) => {

        e.preventDefault();

        slot.classList.remove('drag-over');


        const partId = e.dataTransfer.getData('text/plain');

        const targetPartType = slot.getAttribute('data-target');


        // Doğru parça doğru yuvaya mı bırakıldı?

        if (partId === targetPartType && !slot.classList.contains('filled')) {

          const partElement = document.getElementById(partId);

          

          // Yuva görünümünü güncelle

          slot.innerText = "✓ " + partElement.innerText;

          slot.classList.add('filled');

          

          // Sürüklenen parçayı sol panelden kaldır

          partElement.style.display = 'none';


          placedCount++;


          // Tüm parçalar yerleşti mi?

          if (placedCount === totalParts) {

            enableStartButton();

          }

        } else if (partId !== targetPartType) {

          // Yanlış yuvaya bırakılırsa geri bildirim

          statusText.style.color = '#ff4d4d';

          statusText.innerText = "❌ Yanlış yuva! Tekrar dene.";

          setTimeout(() => { statusText.innerText = ""; }, 2000);

        }

      });

    });


    // Butonu Aktifleştir

    function enableStartButton() {

      startBtn.classList.add('active');

      startBtn.disabled = false;

      statusText.style.color = '#00ff88';

      statusText.innerText = "🎉 Bütün parçalar takıldı! Sistemi başlatabilirsin.";

    }


    // Sistemi Çalıştır Buton Tıklaması

    startBtn.addEventListener('click', () => {

      if (!startBtn.disabled) {

        statusText.style.color = '#00fff5';

        statusText.innerText = "🚀 BZZZT! Sistem başarıyla açıldı! RGB ışıklar yanıyor! ✨";

      }

    });

  </script>

</body>

</html>