Untitled

 avatar
unknown
plain_text
a month ago
4.5 kB
1
Indexable
import pygame
import random
import sys
from flask import Flask, render_template_string

# Initialize Flask app
app = Flask(__name__)

# HTML template for the game
HTML_TEMPLATE = """
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Car Game</title>
    <style>
        canvas { display: block; margin: 0 auto; background: #808080; }
    </style>
</head>
<body>
    <h1 style="text-align: center;">Car Game</h1>
    <p style="text-align: center;">Use arrow keys to move the car and avoid obstacles!</p>
    <div id="game-container">
        <script>
            const canvas = document.createElement('canvas');
            document.body.appendChild(canvas);
            const ctx = canvas.getContext('2d');

            canvas.width = 800;
            canvas.height = 600;

            const carWidth = 50;
            const carHeight = 50;
            const carSpeed = 8;
            let carX = canvas.width / 2 - carWidth / 2;
            const carY = canvas.height - 100;

            const rocks = [];
            const rockWidth = 50;
            const rockHeight = 50;
            const maxRocks = 5;
            let score = 0;
            let gameRunning = true;

            function createRock() {
                return {
                    x: Math.random() * (canvas.width - rockWidth),
                    y: -rockHeight,
                    speed: Math.random() * 4 + 4,
                };
            }

            for (let i = 0; i < maxRocks; i++) {
                rocks.push(createRock());
            }

            const keys = {
                ArrowLeft: false,
                ArrowRight: false,
            };

            window.addEventListener('keydown', (e) => {
                if (e.key in keys) keys[e.key] = true;
            });

            window.addEventListener('keyup', (e) => {
                if (e.key in keys) keys[e.key] = false;
            });

            function gameLoop() {
                if (!gameRunning) return;

                ctx.clearRect(0, 0, canvas.width, canvas.height);

                // Draw car
                ctx.fillStyle = 'red';
                ctx.fillRect(carX, carY, carWidth, carHeight);

                // Move car
                if (keys.ArrowLeft && carX > 0) {
                    carX -= carSpeed;
                }
                if (keys.ArrowRight && carX < canvas.width - carWidth) {
                    carX += carSpeed;
                }

                // Update and draw rocks
                for (const rock of rocks) {
                    rock.y += rock.speed;
                    ctx.fillStyle = 'black';
                    ctx.fillRect(rock.x, rock.y, rockWidth, rockHeight);

                    // Check for collision
                    if (
                        carX < rock.x + rockWidth &&
                        carX + carWidth > rock.x &&
                        carY < rock.y + rockHeight &&
                        carY + carHeight > rock.y
                    ) {
                        gameRunning = false;
                    }

                    // Reset rock if it moves off screen
                    if (rock.y > canvas.height) {
                        rock.y = -rockHeight;
                        rock.x = Math.random() * (canvas.width - rockWidth);
                        rock.speed = Math.random() * 4 + 4;
                        score++;
                    }
                }

                // Draw score
                ctx.fillStyle = 'white';
                ctx.font = '20px Arial';
                ctx.fillText(`Score: ${score}`, 10, 30);

                if (gameRunning) {
                    requestAnimationFrame(gameLoop);
                } else {
                    ctx.fillStyle = 'black';
                    ctx.fillRect(0, 0, canvas.width, canvas.height);
                    ctx.fillStyle = 'red';
                    ctx.font = '36px Arial';
                    ctx.fillText('Game Over', canvas.width / 2 - 100, canvas.height / 2);
                    ctx.fillStyle = 'white';
                    ctx.fillText(`Final Score: ${score}`, canvas.width / 2 - 110, canvas.height / 2 + 50);
                }
            }

            gameLoop();
        </script>
    </div>
</body>
</html>
"""

@app.route('/')
def index():
    return render_template_string(HTML_TEMPLATE)

if __name__ == "__main__":
    app.run(debug=True)
Editor is loading...
Leave a Comment