<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Bul Karayı Al Parayı - Animasyonlu</title>
    <style>
        /* --- TASARIM (CSS) KODLARI --- */
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background-color: #2c3e50;
            color: #ecf0f1;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
            margin: 0;
            overflow: hidden;
        }

        h1 {
            margin-bottom: 10px;
            text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
        }

        #message {
            font-size: 22px;
            font-weight: bold;
            height: 30px;
            margin-bottom: 30px;
            transition: color 0.3s;
        }

        /* Kartların içinde duracağı ana alan */
        .game-board {
            position: relative;
            width: 400px; /* 3 kart + boşluklar için genişlik */
            height: 180px;
            margin-bottom: 40px;
        }

        .card {
            width: 120px;
            height: 180px;
            position: absolute;
            top: 0;
            left: 0;
            perspective: 1000px;
            cursor: pointer;
            /* Yer değiştirme animasyonunun süresi */
            transition: transform 0.4s ease-in-out;
        }

        .card-inner {
            width: 100%;
            height: 100%;
            transition: transform 0.6s;
            transform-style: preserve-3d;
            position: relative;
            box-shadow: 0 4px 8px rgba(0,0,0,0.3);
            border-radius: 10px;
        }

        .card.flipped .card-inner {
            transform: rotateY(180deg);
        }

        .card-front, .card-back {
            width: 100%;
            height: 100%;
            position: absolute;
            backface-visibility: hidden;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 60px;
            border-radius: 10px;
            border: 3px solid #bdc3c7;
            box-sizing: border-box;
        }

        .card-front {
            background-color: #c0392b;
            background-image: repeating-linear-gradient(
                45deg, transparent, transparent 10px, #a5281b 10px, #a5281b 20px
            );
        }

        .card-back {
            background-color: #ecf0f1;
            transform: rotateY(180deg);
        }

        .card-back.black { color: #2c3e50; }
        .card-back.red { color: #e74c3c; }

        button {
            padding: 12px 25px;
            font-size: 18px;
            font-weight: bold;
            color: #2c3e50;
            background-color: #f1c40f;
            border: none;
            border-radius: 8px;
            cursor: pointer;
            box-shadow: 0 4px 6px rgba(0,0,0,0.3);
            transition: background-color 0.2s, transform 0.1s, opacity 0.3s;
        }

        button:hover { background-color: #f39c12; }
        button:active { transform: scale(0.95); }
        button:disabled {
            background-color: #95a5a6;
            cursor: not-allowed;
            opacity: 0.5;
        }
    </style>
</head>
<body>

    <h1>Bul Karayı, Al Parayı!</h1>
    <div id="message">Oynamak için Başla butonuna bas!</div>

    <div class="game-board" id="board">
        <div class="card" id="card-0" onclick="selectCard(0)">
            <div class="card-inner">
                <div class="card-front"></div>
                <div class="card-back" id="card-val-0"></div>
            </div>
        </div>
        <div class="card" id="card-1" onclick="selectCard(1)">
            <div class="card-inner">
                <div class="card-front"></div>
                <div class="card-back" id="card-val-1"></div>
            </div>
        </div>
        <div class="card" id="card-2" onclick="selectCard(2)">
            <div class="card-inner">
                <div class="card-front"></div>
                <div class="card-back" id="card-val-2"></div>
            </div>
        </div>
    </div>

    <button id="startBtn" onclick="startGame()">Oyunu Başlat</button>

    <script>
        let winningCardIndex = -1;
        let canPlay = false;
        
        // Kartların ekrandaki X koordinatları (sol, orta, sağ)
        const POSITIONS_X = [0, 140, 280];
        
        // Hangi kartın (0,1,2) hangi pozisyonda (0,1,2) olduğunu tutan dizi
        let cardPositions = [0, 1, 2];

        // Kartların pozisyonlarını ekrana yansıtan fonksiyon
        function updateVisualPositions() {
            for (let i = 0; i < 3; i++) {
                const card = document.getElementById(`card-${i}`);
                // Kartı bulunduğu pozisyona göre sağa kaydır (X ekseninde)
                card.style.transform = `translateX(${POSITIONS_X[cardPositions[i]]}px)`;
            }
        }

        // Sayfa yüklendiğinde kartları yan yana diz
        window.onload = updateVisualPositions;

        function startGame() {
            const btn = document.getElementById('startBtn');
            const messageEl = document.getElementById('message');
            
            btn.disabled = true;
            canPlay = false;
            
            // Başlangıç pozisyonlarını sıfırla
            cardPositions = [0, 1, 2];
            updateVisualPositions();
            
            winningCardIndex = Math.floor(Math.random() * 3);

            // Tüm kartları kapat ve simgeleri belirle
            for (let i = 0; i < 3; i++) {
                const card = document.getElementById(`card-${i}`);
                const cardBack = document.getElementById(`card-val-${i}`);
                
                card.classList.remove('flipped');
                cardBack.classList.remove('black', 'red');
                
                if (i === winningCardIndex) {
                    cardBack.textContent = "♠"; // Maça
                    cardBack.classList.add('black');
                } else {
                    cardBack.textContent = "♥"; // Kupa
                    cardBack.classList.add('red');
                }
            }

            // Animasyon Senaryosu
            messageEl.textContent = "Dikkatli bak! Karayı aklında tut...";
            messageEl.style.color = "#f1c40f";

            // 1. Adım: Yarım saniye sonra kartları açıp kullanıcıya göster
            setTimeout(() => {
                for(let i=0; i<3; i++) document.getElementById(`card-${i}`).classList.add('flipped');
            }, 500);

            // 2. Adım: 2 saniye gösterdikten sonra kartları kapat
            setTimeout(() => {
                for(let i=0; i<3; i++) document.getElementById(`card-${i}`).classList.remove('flipped');
                messageEl.textContent = "Kartlar karışıyor, gözünü ayırma!";
            }, 2500);

            // 3. Adım: Kartlar kapandıktan sonra karıştırma işlemini başlat
            setTimeout(() => {
                shuffleCards(10); // 10 defa yer değiştir
            }, 3200);
        }

        function shuffleCards(shuffleCount) {
            let currentShuffle = 0;
            
            // Her 400 milisaniyede bir çalışacak döngü
            const shuffleInterval = setInterval(() => {
                // Hangi iki pozisyonun yer değiştireceğini rastgele seç
                let pos1 = Math.floor(Math.random() * 3);
                let pos2 = Math.floor(Math.random() * 3);
                while (pos1 === pos2) {
                    pos2 = Math.floor(Math.random() * 3); // Aynı gelirse tekrar seç
                }

                // Seçilen pozisyonlardaki kartları bul
                let cardIndex1 = cardPositions.indexOf(pos1);
                let cardIndex2 = cardPositions.indexOf(pos2);

                // Kartların pozisyonlarını dizide takas et
                cardPositions[cardIndex1] = pos2;
                cardPositions[cardIndex2] = pos1;

                // Takası ekrana yansıt (CSS transition sayesinde kayarak yer değiştirecekler)
                updateVisualPositions();

                currentShuffle++;

                // Hedef karıştırma sayısına ulaşıldığında döngüyü durdur
                if (currentShuffle >= shuffleCount) {
                    clearInterval(shuffleInterval);
                    finishShuffling();
                }
            }, 450); // CSS animasyon süresiyle (0.4s) uyumlu olması için 450ms bekliyoruz
        }

        function finishShuffling() {
            canPlay = true;
            document.getElementById('message').textContent = "Hangi kart kara? Seçimini yap!";
            document.getElementById('message').style.color = "#ecf0f1";
        }

        function selectCard(selectedIndex) {
            if (!canPlay) return; // Sıra oyuncuda değilse (karışıyorsa vs.) tıklamayı engelle
            
            canPlay = false;
            const messageEl = document.getElementById('message');
            const btn = document.getElementById('startBtn');

            // Tıklanan kartı çevir
            document.getElementById(`card-${selectedIndex}`).classList.add('flipped');

            // Doğru kart mı diye kontrol et
            if (selectedIndex === winningCardIndex) {
                messageEl.textContent = "Tebrikler! Gözünden hiçbir şey kaçmıyor. 💰";
                messageEl.style.color = "#2ecc71";
            } else {
                messageEl.textContent = "Eyvah, kaçırdın! Kara başka yerdeydi. 💸";
                messageEl.style.color = "#e74c3c";
            }

            // Sonucu gördükten 1.5 saniye sonra diğer kartları da aç ve butonu aktif et
            setTimeout(() => {
                for(let i=0; i<3; i++) {
                    document.getElementById(`card-${i}`).classList.add('flipped');
                }
                btn.textContent = "Tekrar Oyna";
                btn.disabled = false;
            }, 1500);
        }
    </script>
</body>
</html>















Selamlar yapay zeka ile yapılan Bul Karayı Al Parayı oyunu geliştirmek size kalmış iyi forumlar


https://www.youtube.com/watch?v=C126xBJeQXA&t