• 10-12-2024, 23:46:36
    #1
    Merhaba arkadaşlar Basit Bir araba Oyunu sizlere ücret bir şekilde sunuyorum Kendinze Göre Geliştirebilirsiniz Tamamiyle Açık kaynak


    <!DOCTYPE html>
    <html lang="tr">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Yarış Arabası Oyunu</title>
        <script src="https://cdn.tailwindcss.com"></script>
        <style>
            body {
                margin: 0;
                overflow: hidden;
                background-color: #1a202c;
                display: flex;
                justify-content: center; /* Sayfa merkezleme */
                align-items: center;
                height: 100vh;
            }
            #gameContainer {
                position: relative; /* Canvas ve buton için referans */
            }
            canvas {
                display: block;
                background-color: #555;
            }
            #restartButton {
                position: absolute;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                padding: 15px 30px;
                font-size: 20px;
                font-weight: bold;
                color: white;
                background-color: green;
                border: none;
                border-radius: 10px;
                cursor: pointer;
                display: none; /* Başlangıçta gizli */
            }
            #restartButton:hover {
                background-color: #28a745;
            }
        </style>
    </head>
    <body>
        <!-- Canvas ve Butonu içeren kapsayıcı div -->
        <div id="gameContainer">
            <canvas id="gameCanvas"></canvas>
            <button id="restartButton">Yeniden Oyna</button>
        </div>
    
        <script>
            const canvas = document.getElementById('gameCanvas');
            const ctx = canvas.getContext('2d');
            const restartButton = document.getElementById('restartButton');
    
            canvas.width = 800;
            canvas.height = 600;
    
            // Araba özellikleri
            const carWidth = 72;
            const carHeight = 144;
            let carX, carY;
    
            const carImage = new Image();
            carImage.src = "https://i.hizliresim.com/s1x7krz.png";
    
            const obstacleWidth = 60;
            const obstacleHeight = 20;
            let obstacles = [];
            let obstacleSpeed;
    
            const roadLines = [];
            const roadLineWidth = 10;
            const roadLineHeight = 40;
            const roadLineGap = 20;
            let roadSpeed;
    
            const grassWidth = 100;
    
            let score;
            let keys = { left: false, right: false };
            let animationId;
            let isGameOver = false;
    
            function drawCar() {
                if (carImage.complete) {
                    ctx.drawImage(carImage, carX, carY, carWidth, carHeight);
                } else {
                    carImage.onload = () => ctx.drawImage(carImage, carX, carY, carWidth, carHeight);
                }
            }
    
            function drawGrass() {
                ctx.fillStyle = '#4CAF50';
                ctx.fillRect(0, 0, grassWidth, canvas.height);
                ctx.fillRect(canvas.width - grassWidth, 0, grassWidth, canvas.height);
            }
    
            function drawRoad() {
                ctx.fillStyle = '#555';
                ctx.fillRect(grassWidth, 0, canvas.width - 2 * grassWidth, canvas.height);
    
                ctx.fillStyle = '#FFF';
                roadLines.forEach(line => {
                    ctx.fillRect(line.x, line.y, roadLineWidth, roadLineHeight);
                });
            }
    
            function drawObstacles() {
                ctx.fillStyle = '#000';
                obstacles.forEach(obstacle => {
                    ctx.fillRect(obstacle.x, obstacle.y, obstacleWidth, obstacleHeight);
                });
            }
    
            function drawScoreAndSpeed() {
                ctx.font = '20px Arial';
                ctx.fillStyle = '#FFF';
                ctx.fillText(`Puan: ${score}`, 20, 40);
                ctx.fillText(`Hız: ${roadSpeed.toFixed(2)}`, 20, 70);
            }
    
            function checkCollision() {
                obstacles.forEach(obstacle => {
                    if (carY < obstacle.y + obstacleHeight && carY + carHeight > obstacle.y) {
                        if (carX + carWidth > obstacle.x && carX < obstacle.x + obstacleWidth) {
                            gameOver();
                        }
                    }
                });
            }
    
            function gameOver() {
                cancelAnimationFrame(animationId);
                isGameOver = true;
                restartButton.style.display = "block";
            }
    
            function resetGame() {
                score = 0;
                carX = canvas.width / 2 - carWidth / 2;
                carY = canvas.height - carHeight - 20;
                obstacles = [];
                roadLines.length = 0;
                roadSpeed = 6;
                obstacleSpeed = 6;
                keys.left = false;
                keys.right = false;
                isGameOver = false;
                restartButton.style.display = "none";
                startGame();
            }
    
            function update() {
                if (isGameOver) return;
    
                if (keys.left && carX > grassWidth) carX -= 5;
                if (keys.right && carX < canvas.width - carWidth - grassWidth) carX += 5;
    
                if (roadLines.length === 0 || roadLines[roadLines.length - 1].y > roadLineGap) {
                    roadLines.push({ x: canvas.width / 2 - roadLineWidth / 2, y: -roadLineHeight });
                }
    
                roadLines.forEach(line => line.y += roadSpeed);
                roadLines.filter(line => line.y < canvas.height);
    
                if (Math.random() < 0.02) {
                    const obstacleX = Math.random() * (canvas.width - 2 * grassWidth - obstacleWidth) + grassWidth;
                    obstacles.push({ x: obstacleX, y: -obstacleHeight });
                    score++;
                    if (score % 5 === 0) {
                        roadSpeed *= 1.2;
                        obstacleSpeed *= 1.2;
                    }
                }
    
                obstacles.forEach(obstacle => obstacle.y += obstacleSpeed);
                obstacles = obstacles.filter(obstacle => obstacle.y < canvas.height);
    
                checkCollision();
    
                ctx.clearRect(0, 0, canvas.width, canvas.height);
                drawGrass();
                drawRoad();
                drawCar();
                drawObstacles();
                drawScoreAndSpeed();
    
                animationId = requestAnimationFrame(update);
            }
    
            function startGame() {
                update();
            }
    
            window.addEventListener('keydown', (e) => {
                if (e.key === 'ArrowLeft') keys.left = true;
                if (e.key === 'ArrowRight') keys.right = true;
            });
    
            window.addEventListener('keyup', (e) => {
                if (e.key === 'ArrowLeft') keys.left = false;
                if (e.key === 'ArrowRight') keys.right = false;
            });
    
            restartButton.addEventListener('click', resetGame);
    
            resetGame();
        </script>
    </body>
    </html>
  • 11-12-2024, 00:18:38
    #2
    Elinize Sağlık hocam,paylaşım için de teşekkürler.
    Ben de şu CSS'i kullanmayı bir öğrensem
  • 11-12-2024, 00:28:28
    #3
    soylenmezsmt adlı üyeden alıntı: mesajı görüntüle
    Elinize Sağlık hocam,paylaşım için de teşekkürler.
    Ben de şu CSS'i kullanmayı bir öğrensem

    flexbox araştır hocam kutu mantıgıyla harket öğrenirsin zor değil basitleştirlmiş .
  • 11-12-2024, 03:51:37
    #4
    soylenmezsmt adlı üyeden alıntı: mesajı görüntüle
    Elinize Sağlık hocam,paylaşım için de teşekkürler.
    Ben de şu CSS'i kullanmayı bir öğrensem
    Bilgisayar genetiği kanalından izle playlist vardı 1-2 aya oturtursun belki daha kısa