From b3cf9df956b5a8f06802fc07e37fe1703028f15b Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Thu, 22 Jan 2026 16:53:25 +0000 Subject: [PATCH] 123 --- about.php | 134 ++++ api/multiplayer.php | 199 +++++ assets/css/custom.css | 395 +++------- assets/js/main.js | 824 ++++++++++++++++++-- assets/vm-shot-2026-01-22T16-03-28-792Z.jpg | Bin 0 -> 77533 bytes assets/vm-shot-2026-01-22T16-04-14-164Z.jpg | Bin 0 -> 77533 bytes db/migrations/001_create_high_scores.sql | 1 + db/migrations/002_multiplayer_setup.sql | 20 + db/migrations/003_add_debuffs.sql | 3 + db/migrations/004_presence_and_invites.sql | 18 + index.php | 301 ++++--- 11 files changed, 1420 insertions(+), 475 deletions(-) create mode 100644 about.php create mode 100644 api/multiplayer.php create mode 100644 assets/vm-shot-2026-01-22T16-03-28-792Z.jpg create mode 100644 assets/vm-shot-2026-01-22T16-04-14-164Z.jpg create mode 100644 db/migrations/001_create_high_scores.sql create mode 100644 db/migrations/002_multiplayer_setup.sql create mode 100644 db/migrations/003_add_debuffs.sql create mode 100644 db/migrations/004_presence_and_invites.sql diff --git a/about.php b/about.php new file mode 100644 index 0000000..77cf5d1 --- /dev/null +++ b/about.php @@ -0,0 +1,134 @@ + + + + + + + About the Author - Classic Tetris + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+ 👨‍💻 +
+
+
+

Alex Dev

+

Web Developer & Retro Game Enthusiast

+
+ +
+
+

The Story Behind

+

+ Hello! I'm Alex, a passionate developer who loves bringing classic arcade experiences to the modern web. + This Tetris clone was built as a demonstration of what can be achieved with pure PHP, JavaScript, and Canvas. +

+ +
+
+
🚀 My Mission
+

To create simple, engaging, and accessible web applications that remind us of the golden age of gaming.

+
+
+
🛠️ Tech Stack
+

For this project, I used PHP for the backend persistence, MySQL for high scores, and Canvas API for the game engine.

+
+
+ +
+ +
+

Get in Touch

+ +
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/api/multiplayer.php b/api/multiplayer.php new file mode 100644 index 0000000..507d5d6 --- /dev/null +++ b/api/multiplayer.php @@ -0,0 +1,199 @@ + false, 'error' => 'Missing data']); + break; + } + $stmt = $pdo->prepare("INSERT INTO players (nickname, session_id, last_seen) VALUES (?, ?, NOW()) ON DUPLICATE KEY UPDATE nickname = ?, last_seen = NOW()"); + $stmt->execute([$nickname, $session_id, $nickname]); + echo json_encode(['success' => true]); + break; + + case 'heartbeat': + $session_id = $input['player_id'] ?? ''; + if ($session_id) { + $stmt = $pdo->prepare("UPDATE players SET last_seen = NOW() WHERE session_id = ?"); + $stmt->execute([$session_id]); + } + echo json_encode(['success' => true]); + break; + + case 'get_online': + $session_id = $_GET['player_id'] ?? ''; + $stmt = $pdo->prepare("SELECT id, nickname, session_id FROM players WHERE last_seen > DATE_SUB(NOW(), INTERVAL 30 SECOND) AND session_id != ? LIMIT 20"); + $stmt->execute([$session_id]); + $players = $stmt->fetchAll(); + echo json_encode(['success' => true, 'players' => $players]); + break; + + case 'invite': + $from_session = $input['from_player_id'] ?? ''; + $to_session = $input['to_player_id'] ?? ''; + $room_code = strtoupper(substr(md5(uniqid()), 0, 6)); + + $stmt = $pdo->prepare("SELECT id FROM players WHERE session_id = ?"); + $stmt->execute([$from_session]); + $from = $stmt->fetch(); + + $stmt = $pdo->prepare("SELECT id FROM players WHERE session_id = ?"); + $stmt->execute([$to_session]); + $to = $stmt->fetch(); + + if ($from && $to) { + $stmt = $pdo->prepare("INSERT INTO invitations (from_player_id, to_player_id, room_code) VALUES (?, ?, ?)"); + $stmt->execute([$from['id'], $to['id'], $room_code]); + + // Pre-create the room + $stmt = $pdo->prepare("INSERT INTO rooms (room_code, player1_id, status) VALUES (?, ?, 'waiting')"); + $stmt->execute([$room_code, $from_session]); + + echo json_encode(['success' => true, 'room_code' => $room_code]); + } else { + echo json_encode(['success' => false, 'error' => 'Player not found']); + } + break; + + case 'check_invites': + $session_id = $_GET['player_id'] ?? ''; + $stmt = $pdo->prepare(" + SELECT i.id, p.nickname as from_nickname, i.room_code + FROM invitations i + JOIN players p ON i.from_player_id = p.id + JOIN players target ON i.to_player_id = target.id + WHERE target.session_id = ? AND i.status = 'pending' AND i.created_at > DATE_SUB(NOW(), INTERVAL 1 MINUTE) + "); + $stmt->execute([$session_id]); + $invites = $stmt->fetchAll(); + echo json_encode(['success' => true, 'invites' => $invites]); + break; + + case 'respond_invite': + $invite_id = $input['invite_id'] ?? 0; + $status = $input['status'] ?? 'rejected'; + $stmt = $pdo->prepare("UPDATE invitations SET status = ? WHERE id = ?"); + $stmt->execute([$status, $invite_id]); + echo json_encode(['success' => true]); + break; + + case 'create': + $player_id = $input['player_id'] ?? ''; + $room_code = $input['room_code'] ?? strtoupper(substr(md5(uniqid()), 0, 6)); + + $stmt = $pdo->prepare("INSERT INTO rooms (room_code, player1_id, status) VALUES (?, ?, 'waiting') ON DUPLICATE KEY UPDATE player1_id = VALUES(player1_id)"); + $stmt->execute([$room_code, $player_id]); + $room_id = $pdo->lastInsertId(); + if (!$room_id) { + $stmt = $pdo->prepare("SELECT id FROM rooms WHERE room_code = ?"); + $stmt->execute([$room_code]); + $room_id = $stmt->fetchColumn(); + } + + echo json_encode(['success' => true, 'room_code' => $room_code, 'room_id' => $room_id]); + break; + + case 'join': + $player_id = $input['player_id'] ?? ''; + $room_code = strtoupper($input['room_code'] ?? ''); + + $stmt = $pdo->prepare("SELECT id, player1_id, player2_id FROM rooms WHERE room_code = ? AND (status = 'waiting' OR status = 'playing')"); + $stmt->execute([$room_code]); + $room = $stmt->fetch(); + + if ($room) { + if ($room['player1_id'] === $player_id) { + echo json_encode(['success' => true, 'room_id' => $room['id']]); + } else { + $stmt = $pdo->prepare("UPDATE rooms SET player2_id = ?, status = 'playing' WHERE id = ?"); + $stmt->execute([$player_id, $room['id']]); + echo json_encode(['success' => true, 'room_id' => $room['id']]); + } + } else { + echo json_encode(['success' => false, 'error' => 'Room not found or full']); + } + break; + + case 'update': + $room_id = $input['room_id'] ?? 0; + $player_id = $input['player_id'] ?? ''; + $board = json_encode($input['board'] ?? []); + $score = $input['score'] ?? 0; + $is_game_over = $input['is_game_over'] ? 1 : 0; + + $stmt = $pdo->prepare("INSERT INTO game_states (room_id, player_id, board, score, is_game_over) + VALUES (?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE board = VALUES(board), score = VALUES(score), is_game_over = VALUES(is_game_over)"); + $stmt->execute([$room_id, $player_id, $board, $score, $is_game_over]); + + echo json_encode(['success' => true]); + break; + + case 'poll': + $room_id = $_GET['room_id'] ?? 0; + $player_id = $_GET['player_id'] ?? ''; + + $stmt = $pdo->prepare("SELECT player_id, board, score, is_game_over FROM game_states WHERE room_id = ? AND player_id != ?"); + $stmt->execute([$room_id, $player_id]); + $opponent = $stmt->fetch(); + + $stmt = $pdo->prepare("SELECT pending_debuffs FROM game_states WHERE room_id = ? AND player_id = ?"); + $stmt->execute([$room_id, $player_id]); + $self = $stmt->fetch(); + $debuffs = []; + if ($self && $self['pending_debuffs']) { + $debuffs = explode(',', $self['pending_debuffs']); + $stmt = $pdo->prepare("UPDATE game_states SET pending_debuffs = NULL WHERE room_id = ? AND player_id = ?"); + $stmt->execute([$room_id, $player_id]); + } + + $stmt = $pdo->prepare("SELECT status FROM rooms WHERE id = ?"); + $stmt->execute([$room_id]); + $room = $stmt->fetch(); + + echo json_encode([ + 'success' => true, + 'opponent' => $opponent ? [ + 'board' => json_decode($opponent['board']), + 'score' => $opponent['score'], + 'is_game_over' => (bool)$opponent['is_game_over'] + ] : null, + 'status' => $room['status'] ?? 'unknown', + 'debuffs' => $debuffs + ]); + break; + + case 'send_debuff': + $room_id = $input['room_id'] ?? 0; + $player_id = $input['player_id'] ?? ''; + $debuff = $input['debuff'] ?? ''; + + $stmt = $pdo->prepare("SELECT player_id FROM game_states WHERE room_id = ? AND player_id != ?"); + $stmt->execute([$room_id, $player_id]); + $opponent = $stmt->fetch(); + + if ($opponent) { + $stmt = $pdo->prepare("UPDATE game_states SET pending_debuffs = IF(pending_debuffs IS NULL, ?, CONCAT(pending_debuffs, ',', ?)) WHERE room_id = ? AND player_id = ?"); + $stmt->execute([$debuff, $debuff, $room_id, $opponent['player_id']]); + echo json_encode(['success' => true]); + } else { + echo json_encode(['success' => false, 'error' => 'Opponent not found']); + } + break; + + default: + echo json_encode(['success' => false, 'error' => 'Invalid action']); + } +} catch (Exception $e) { + echo json_encode(['success' => false, 'error' => $e->getMessage()]); +} \ No newline at end of file diff --git a/assets/css/custom.css b/assets/css/custom.css index 65a1626..58c0809 100644 --- a/assets/css/custom.css +++ b/assets/css/custom.css @@ -1,346 +1,153 @@ -:root { - --color-bg: #ffffff; - --color-text: #1a1a1a; - --color-primary: #2563EB; /* Vibrant Blue */ - --color-secondary: #000000; - --color-accent: #A3E635; /* Lime Green */ - --color-surface: #f8f9fa; - --font-heading: 'Space Grotesk', sans-serif; - --font-body: 'Inter', sans-serif; - --border-width: 2px; - --shadow-hard: 5px 5px 0px #000; - --shadow-hover: 8px 8px 0px #000; - --radius-pill: 50rem; - --radius-card: 1rem; -} - body { - font-family: var(--font-body); - background-color: var(--color-bg); - color: var(--color-text); - overflow-x: hidden; + background-color: #0f172a; /* Darker background for neon effects */ + color: #f8fafc; + font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + -webkit-font-smoothing: antialiased; } -h1, h2, h3, h4, h5, h6, .navbar-brand { - font-family: var(--font-heading); - letter-spacing: -0.03em; -} - -/* Utilities */ -.text-primary { color: var(--color-primary) !important; } -.bg-black { background-color: #000 !important; } -.text-white { color: #fff !important; } -.shadow-hard { box-shadow: var(--shadow-hard); } -.border-2-black { border: var(--border-width) solid #000; } -.py-section { padding-top: 5rem; padding-bottom: 5rem; } - -/* Navbar */ .navbar { - background: rgba(255, 255, 255, 0.9); + background-color: rgba(15, 23, 42, 0.9); backdrop-filter: blur(10px); - border-bottom: var(--border-width) solid transparent; - transition: all 0.3s; - padding-top: 1rem; - padding-bottom: 1rem; + border-bottom: 1px solid #1e293b !important; } -.navbar.scrolled { - border-bottom-color: #000; - padding-top: 0.5rem; - padding-bottom: 0.5rem; +.navbar-brand, .nav-link, .text-muted { + color: #94a3b8 !important; } -.brand-text { - font-size: 1.5rem; - font-weight: 800; +.navbar-brand { + color: #f8fafc !important; } -.nav-link { - font-weight: 500; - color: var(--color-text); - margin-left: 1rem; - position: relative; +.game-container { + display: inline-block; + border-radius: 8px; + background: #000; + border: 2px solid #1e293b !important; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.5), 0 0 10px rgba(59, 130, 246, 0.2); + overflow: hidden; } -.nav-link:hover, .nav-link.active { - color: var(--color-primary); +#tetris, #opponent-tetris { + display: block; + background-color: #000; +} + +.card { + background-color: #1e293b; + border: 1px solid #334155; + border-radius: 8px; + color: #f8fafc; +} + +.card-title { + color: #f8fafc; } -/* Buttons */ .btn { - font-weight: 700; - font-family: var(--font-heading); - padding: 0.8rem 2rem; - border-radius: var(--radius-pill); - border: var(--border-width) solid #000; - transition: all 0.2s cubic-bezier(0.25, 1, 0.5, 1); - box-shadow: var(--shadow-hard); -} - -.btn:hover { - transform: translate(-2px, -2px); - box-shadow: var(--shadow-hover); -} - -.btn:active { - transform: translate(2px, 2px); - box-shadow: 0 0 0 #000; + border-radius: 6px; + transition: all 0.2s ease-in-out; } .btn-primary { - background-color: var(--color-primary); - border-color: #000; - color: #fff; + background-color: #3b82f6; + border-color: #3b82f6; } .btn-primary:hover { - background-color: #1d4ed8; - border-color: #000; - color: #fff; + background-color: #2563eb; + border-color: #2563eb; + box-shadow: 0 0 15px rgba(59, 130, 246, 0.5); +} + +.btn-dark { + background-color: #0f172a; + border-color: #334155; } .btn-outline-dark { - background-color: #fff; - color: #000; + color: #94a3b8; + border-color: #334155; } -.btn-cta { - background-color: var(--color-accent); - color: #000; +.btn-outline-dark:hover { + background-color: #334155; + color: #f8fafc; } -.btn-cta:hover { - background-color: #8cc629; - color: #000; +.btn-outline-info { + color: #3b82f6; + border-color: #3b82f6; } -/* Hero Section */ -.hero-section { - min-height: 100vh; - padding-top: 80px; +.btn-outline-info:hover { + background-color: #3b82f6; + color: #f8fafc; } -.background-blob { - position: absolute; - border-radius: 50%; - filter: blur(80px); - opacity: 0.6; - z-index: 1; +.next-piece-container { + background-color: #0f172a !important; + border: 1px solid #334155 !important; + border-radius: 6px; } -.blob-1 { - top: -10%; - right: -10%; - width: 600px; - height: 600px; - background: radial-gradient(circle, var(--color-accent), transparent); +#next-piece { + background-color: transparent !important; } -.blob-2 { - bottom: 10%; - left: -10%; - width: 500px; - height: 500px; - background: radial-gradient(circle, var(--color-primary), transparent); +.list-group-item { + background-color: transparent; + border-color: #334155; + color: #94a3b8; } -.highlight-text { - background: linear-gradient(120deg, transparent 0%, transparent 40%, var(--color-accent) 40%, var(--color-accent) 100%); - background-repeat: no-repeat; - background-size: 100% 40%; - background-position: 0 88%; - padding: 0 5px; -} - -.dot { color: var(--color-primary); } - -.badge-pill { - display: inline-block; - padding: 0.5rem 1rem; - border: 2px solid #000; - border-radius: 50px; - font-weight: 700; - background: #fff; - box-shadow: 4px 4px 0 #000; - font-family: var(--font-heading); - font-size: 0.9rem; -} - -/* Marquee */ -.marquee-container { - overflow: hidden; - white-space: nowrap; - border-top: 2px solid #000; - border-bottom: 2px solid #000; -} - -.rotate-divider { - transform: rotate(-2deg) scale(1.05); - z-index: 10; - position: relative; - margin-top: -50px; - margin-bottom: 30px; -} - -.marquee-content { - display: inline-block; - animation: marquee 20s linear infinite; - font-family: var(--font-heading); - font-weight: 700; - font-size: 1.5rem; - letter-spacing: 2px; -} - -@keyframes marquee { - 0% { transform: translateX(0); } - 100% { transform: translateX(-50%); } -} - -/* Portfolio Cards */ -.project-card { - border: 2px solid #000; - border-radius: var(--radius-card); - overflow: hidden; - background: #fff; - transition: transform 0.3s ease; - box-shadow: var(--shadow-hard); - height: 100%; - display: flex; - flex-direction: column; -} - -.project-card:hover { - transform: translateY(-10px); - box-shadow: 8px 8px 0 #000; -} - -.card-img-holder { - height: 250px; - display: flex; - align-items: center; - justify-content: center; - border-bottom: 2px solid #000; - position: relative; - font-size: 4rem; -} - -.placeholder-art { - transition: transform 0.3s ease; -} - -.project-card:hover .placeholder-art { - transform: scale(1.2) rotate(10deg); -} - -.bg-soft-blue { background-color: #e0f2fe; } -.bg-soft-green { background-color: #dcfce7; } -.bg-soft-purple { background-color: #f3e8ff; } -.bg-soft-yellow { background-color: #fef9c3; } - -.category-tag { - position: absolute; - top: 15px; - right: 15px; - background: #000; - color: #fff; - padding: 5px 12px; - border-radius: 20px; - font-size: 0.75rem; - font-weight: 700; -} - -.card-body { padding: 1.5rem; } - -.link-arrow { - text-decoration: none; - color: #000; - font-weight: 700; - display: inline-flex; - align-items: center; - margin-top: auto; -} - -.link-arrow i { transition: transform 0.2s; margin-left: 5px; } -.link-arrow:hover i { transform: translateX(5px); } - -/* About */ -.about-image-stack { - position: relative; - height: 400px; - width: 100%; -} - -.stack-card { - position: absolute; - width: 80%; - height: 100%; - border-radius: var(--radius-card); - border: 2px solid #000; - box-shadow: var(--shadow-hard); - left: 10%; - transform: rotate(-3deg); - background-size: cover; -} - -/* Forms */ .form-control { - border: 2px solid #000; - border-radius: 0.5rem; - padding: 1rem; - font-weight: 500; - background: #f8f9fa; + background-color: #0f172a; + border: 1px solid #334155; + color: #f8fafc; } .form-control:focus { - box-shadow: 4px 4px 0 var(--color-primary); - border-color: #000; - background: #fff; + background-color: #0f172a; + border-color: #3b82f6; + color: #f8fafc; + box-shadow: 0 0 0 0.25rem rgba(59, 130, 246, 0.25); } -/* Animations */ -.animate-up { - opacity: 0; - transform: translateY(30px); - animation: fadeUp 0.8s ease forwards; +.form-control::placeholder { + color: #64748b; } -.delay-100 { animation-delay: 0.1s; } -.delay-200 { animation-delay: 0.2s; } - -@keyframes fadeUp { - to { - opacity: 1; - transform: translateY(0); - } +/* Multiplayer specific */ +#multiplayer-status-bar { + border-radius: 8px; + font-weight: 600; + background-color: #1e293b; + border: 1px solid #3b82f6; + color: #3b82f6; } -/* Social */ -.social-links a { - transition: transform 0.2s; - display: inline-block; -} -.social-links a:hover { - transform: scale(1.2) rotate(10deg); - color: var(--color-accent) !important; +#opponent-column { + transition: opacity 0.5s ease; } -/* Responsive */ -@media (max-width: 991px) { - .rotate-divider { - transform: rotate(0); - margin-top: 0; - margin-bottom: 2rem; - } - - .hero-section { - padding-top: 120px; - text-align: center; - min-height: auto; - padding-bottom: 100px; - } - - .display-1 { font-size: 3.5rem; } - - .blob-1 { width: 300px; height: 300px; right: -20%; } - .blob-2 { width: 300px; height: 300px; left: -20%; } +#player-label, #opponent-label { + letter-spacing: 0.15em; + font-size: 0.7rem; + color: #64748b; } + +#score-val, #level-val, #opponent-score-val { + color: #3b82f6; + font-weight: 700; +} + +.badge.bg-dark { + background-color: #0f172a !important; + border: 1px solid #334155; +} + +hr { + border-color: #334155; + opacity: 0.5; +} \ No newline at end of file diff --git a/assets/js/main.js b/assets/js/main.js index fdf2cfd..d716caf 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -1,73 +1,775 @@ -document.addEventListener('DOMContentLoaded', () => { - - // Smooth scrolling for navigation links - document.querySelectorAll('a[href^="#"]').forEach(anchor => { - anchor.addEventListener('click', function (e) { - e.preventDefault(); - const targetId = this.getAttribute('href'); - if (targetId === '#') return; - - const targetElement = document.querySelector(targetId); - if (targetElement) { - // Close mobile menu if open - const navbarToggler = document.querySelector('.navbar-toggler'); - const navbarCollapse = document.querySelector('.navbar-collapse'); - if (navbarCollapse.classList.contains('show')) { - navbarToggler.click(); - } +const canvas = document.getElementById('tetris'); +const context = canvas.getContext('2d'); +const nextCanvas = document.getElementById('next-piece'); +const nextContext = nextCanvas.getContext('2d'); +const opponentCanvas = document.getElementById('opponent-tetris'); +const opponentContext = opponentCanvas ? opponentCanvas.getContext('2d') : null; - // Scroll with offset - const offset = 80; - const elementPosition = targetElement.getBoundingClientRect().top; - const offsetPosition = elementPosition + window.pageYOffset - offset; +const mpSetup = document.getElementById('mp-setup'); +const mpActive = document.getElementById('mp-active'); +const mpStatusBar = document.getElementById('multiplayer-status-bar'); +const mpStatusText = document.getElementById('multiplayer-status-text'); +const activeRoomCode = document.getElementById('active-room-code'); +const displayRoomCode = document.getElementById('display-room-code'); +const opponentColumn = document.getElementById('opponent-column'); +const debuffNotifications = document.getElementById('debuff-notifications'); +const onlinePlayersList = document.getElementById('online-players-list'); +const onlineCountBadge = document.getElementById('online-count'); +const playerNameInput = document.getElementById('player-name'); +const inviteContainer = document.getElementById('invite-container'); - window.scrollTo({ - top: offsetPosition, - behavior: "smooth" - }); - } - }); +context.scale(20, 20); +nextContext.scale(20, 20); +if (opponentContext) opponentContext.scale(10, 10); + +let isMultiplayer = false; +let roomId = null; +let playerId = localStorage.getItem('tetris_player_id') || Math.random().toString(36).substring(2, 10); +localStorage.setItem('tetris_player_id', playerId); + +let roomStatus = 'waiting'; +let opponentArena = null; +let opponentScore = 0; +let pollTimer = null; +let updateTimer = null; +let lastDebuffScore = 0; +let isSpeedSurge = false; +let isInputScrambled = false; +let speedSurgeTimer = null; +let scrambleTimer = null; + +// Effects +let screenShake = 0; +let particles = []; +let floatingTexts = []; + +class Particle { + constructor(x, y, color) { + this.x = x; + this.y = y; + this.color = color; + this.size = Math.random() * 0.15 + 0.05; + this.vx = (Math.random() - 0.5) * 0.4; + this.vy = (Math.random() - 0.5) * 0.4; + this.life = 1.0; + this.decay = Math.random() * 0.03 + 0.02; + } + update() { + this.x += this.vx; + this.y += this.vy; + this.vy += 0.01; // gravity + this.life -= this.decay; + } + draw(ctx) { + ctx.save(); + ctx.globalAlpha = this.life; + ctx.fillStyle = this.color; + ctx.shadowBlur = 5; + ctx.shadowColor = this.color; + ctx.fillRect(this.x, this.y, this.size, this.size); + ctx.restore(); + } +} + +function addFloatingText(text, x, y, color) { + floatingTexts.push({ + text, x, y, color, + life: 1.0, + decay: 0.02 }); +} - // Navbar scroll effect - const navbar = document.querySelector('.navbar'); - window.addEventListener('scroll', () => { - if (window.scrollY > 50) { - navbar.classList.add('scrolled', 'shadow-sm', 'bg-white'); - navbar.classList.remove('bg-transparent'); - } else { - navbar.classList.remove('scrolled', 'shadow-sm', 'bg-white'); - navbar.classList.add('bg-transparent'); +function shakeScreen(intensity) { + screenShake = intensity; +} + +function createExplosion(x, y, color) { + for (let i = 0; i < 15; i++) { + particles.push(new Particle(x, y, color)); + } +} + +function arenaSweep() { + let rowCount = 0; + outer: for (let y = arena.length - 1; y > 0; --y) { + for (let x = 0; x < arena[y].length; ++x) { + if (arena[y][x] === 0) { + continue outer; + } } - }); - // Intersection Observer for fade-up animations - const observerOptions = { - threshold: 0.1, - rootMargin: "0px 0px -50px 0px" - }; + const row = arena.splice(y, 1)[0]; + arena.unshift(new Array(row.length).fill(0)); + ++y; - const observer = new IntersectionObserver((entries) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - entry.target.classList.add('animate-up'); - entry.target.style.opacity = "1"; - observer.unobserve(entry.target); // Only animate once + rowCount++; + + row.forEach((value, x) => { + if (value !== 0) { + createExplosion(x, y - 1, colors[value]); } }); - }, observerOptions); - - // Select elements to animate (add a class 'reveal' to them in HTML if not already handled by CSS animation) - // For now, let's just make sure the hero animations run. - // If we want scroll animations, we'd add opacity: 0 to elements in CSS and reveal them here. - // Given the request, the CSS animation I added runs on load for Hero. - // Let's make the project cards animate in. + } - const projectCards = document.querySelectorAll('.project-card'); - projectCards.forEach((card, index) => { - card.style.opacity = "0"; - card.style.animationDelay = `${index * 0.1}s`; - observer.observe(card); + if (rowCount > 0) { + player.score += rowCount * 10; + shakeScreen(rowCount * 0.1); + addFloatingText(`+${rowCount * 10}`, player.pos.x + 2, player.pos.y, '#fff'); + } +} + +function collide(arena, player) { + const [m, o] = [player.matrix, player.pos]; + for (let y = 0; y < m.length; ++y) { + for (let x = 0; x < m[y].length; ++x) { + if (m[y][x] !== 0 && + (arena[y + o.y] && arena[y + o.y][x + o.x]) !== 0) { + return true; + } + } + } + return false; +} + +function createMatrix(w, h) { + const matrix = []; + while (h--) { + matrix.push(new Array(w).fill(0)); + } + return matrix; +} + +function createPiece(type) { + if (type === 'I') { + return [ + [0, 1, 0, 0], + [0, 1, 0, 0], + [0, 1, 0, 0], + [0, 1, 0, 0], + ]; + } else if (type === 'L') { + return [ + [0, 2, 0], + [0, 2, 0], + [0, 2, 2], + ]; + } else if (type === 'J') { + return [ + [0, 3, 0], + [0, 3, 0], + [3, 3, 0], + ]; + } else if (type === 'O') { + return [ + [4, 4], + [4, 4], + ]; + } else if (type === 'Z') { + return [ + [5, 5, 0], + [0, 5, 5], + [0, 0, 0], + ]; + } else if (type === 'S') { + return [ + [0, 6, 6], + [6, 6, 0], + [0, 0, 0], + ]; + } else if (type === 'T') { + return [ + [0, 7, 0], + [7, 7, 7], + [0, 0, 0], + ]; + } +} + +function drawMatrix(matrix, offset, ctx) { + matrix.forEach((row, y) => { + row.forEach((value, x) => { + if (value !== 0) { + ctx.save(); + ctx.fillStyle = colors[value]; + ctx.shadowBlur = 10; + ctx.shadowColor = colors[value]; + ctx.fillRect(x + offset.x, y + offset.y, 1, 1); + + ctx.strokeStyle = 'rgba(0,0,0,0.3)'; + ctx.lineWidth = 0.05; + ctx.strokeRect(x + offset.x, y + offset.y, 1, 1); + ctx.restore(); + } + }); + }); +} + +function drawBackground(ctx, w, h) { + ctx.strokeStyle = '#111'; + ctx.lineWidth = 0.02; + for (let x = 0; x <= w; x++) { + ctx.beginPath(); + ctx.moveTo(x, 0); + ctx.lineTo(x, h); + ctx.stroke(); + } + for (let y = 0; y <= h; y++) { + ctx.beginPath(); + ctx.moveTo(0, y); + ctx.lineTo(w, y); + ctx.stroke(); + } +} + +function draw() { + context.fillStyle = '#000'; + context.fillRect(0, 0, canvas.width, canvas.height); + + context.save(); + if (screenShake > 0) { + context.translate((Math.random() - 0.5) * screenShake, (Math.random() - 0.5) * screenShake); + screenShake *= 0.9; + if (screenShake < 0.01) screenShake = 0; + } + + drawBackground(context, 12, 20); + drawMatrix(arena, {x: 0, y: 0}, context); + drawMatrix(player.matrix, player.pos, context); + + particles.forEach((p, i) => { + p.update(); + p.draw(context); + if (p.life <= 0) particles.splice(i, 1); }); -}); \ No newline at end of file + floatingTexts.forEach((ft, i) => { + context.save(); + context.globalAlpha = ft.life; + context.fillStyle = ft.color; + context.font = "0.8px 'Inter'"; + context.fillText(ft.text, ft.x, ft.y); + ft.y -= 0.02; + ft.life -= ft.decay; + context.restore(); + if (ft.life <= 0) floatingTexts.splice(i, 1); + }); + + context.restore(); + + nextContext.fillStyle = '#f8f9fa'; + nextContext.fillRect(0, 0, nextCanvas.width, nextCanvas.height); + if (player.next) { + drawMatrix(player.next, {x: 1, y: 1}, nextContext); + } + + if (isMultiplayer && opponentContext) { + opponentContext.fillStyle = '#000'; + opponentContext.fillRect(0, 0, opponentCanvas.width, opponentCanvas.height); + drawBackground(opponentContext, 12, 20); + drawMatrix(opponentArena, {x: 0, y: 0}, opponentContext); + document.getElementById('opponent-score-val').innerText = opponentScore; + } +} + +const colors = [ + null, + '#00f0f0', + '#f0a000', + '#0000f0', + '#f0f000', + '#f00000', + '#00f000', + '#a000f0', + '#808080', +]; + +function merge(arena, player) { + player.matrix.forEach((row, y) => { + row.forEach((value, x) => { + if (value !== 0) { + arena[y + player.pos.y][x + player.pos.x] = value; + } + }); + }); + shakeScreen(0.05); +} + +function rotate(matrix, dir) { + for (let y = 0; y < matrix.length; ++y) { + for (let x = 0; x < y; ++x) { + [matrix[x][y], matrix[y][x]] = [matrix[y][x], matrix[x][y]]; + } + } + if (dir > 0) matrix.forEach(row => row.reverse()); + else matrix.reverse(); +} + +function playerDrop() { + player.pos.y++; + if (collide(arena, player)) { + player.pos.y--; + merge(arena, player); + playerReset(); + arenaSweep(); + updateScore(); + } + dropCounter = 0; +} + +function playerMove(offset) { + if (isInputScrambled) { + offset *= -1; + } + + player.pos.x += offset; + if (collide(arena, player)) { + player.pos.x -= offset; + } +} + +function playerReset() { + const pieces = 'TJLOSZI'; + player.matrix = player.next; + player.next = createPiece(pieces[pieces.length * Math.random() | 0]); + player.pos.y = 0; + player.pos.x = (arena[0].length / 2 | 0) - (player.matrix[0].length / 2 | 0); + + if (collide(arena, player)) { + arena.forEach(row => row.fill(0)); + player.isGameOver = true; + if (isMultiplayer) syncState(); + alert('Game Over! Your final score: ' + player.score); + isPaused = true; + } +} + +function playerRotate(dir) { + const pos = player.pos.x; + let offset = 1; + rotate(player.matrix, dir); + while (collide(arena, player)) { + player.pos.x += offset; + offset = -(offset + (offset > 0 ? 1 : -1)); + if (offset > player.matrix[0].length) { + rotate(player.matrix, -dir); + player.pos.x = pos; + return; + } + } +} + +let dropCounter = 0; +let dropInterval = 1000; +let lastTime = 0; +let isPaused = true; + +function update(time = 0) { + if (isPaused) { + draw(); + if (particles.length > 0 || floatingTexts.length > 0) requestAnimationFrame(update); + return; + } + + const deltaTime = time - lastTime; + lastTime = time; + + dropCounter += deltaTime; + + let currentInterval = dropInterval; + if (isSpeedSurge) { + currentInterval /= 2; + } + + if (dropCounter > currentInterval) { + playerDrop(); + } + + draw(); + requestAnimationFrame(update); +} + +function updateScore() { + document.getElementById('score-val').innerText = player.score; + document.getElementById('level-val').innerText = Math.floor(player.score / 100) + 1; + dropInterval = Math.max(100, 1000 - (Math.floor(player.score / 50) * 50)); + + if (isMultiplayer && player.score >= lastDebuffScore + 200) { + lastDebuffScore = Math.floor(player.score / 200) * 200; + sendRandomDebuff(); + } +} + +const arena = createMatrix(12, 20); + +const player = { + pos: {x: 0, y: 0}, + matrix: null, + next: null, + score: 0, + isGameOver: false, +}; + +// --- Presence & Online Players --- + +async function setNickname() { + const nickname = playerNameInput.value || 'Anonymous'; + await fetch('api/multiplayer.php?action=set_nickname', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ player_id: playerId, nickname: nickname }) + }); +} + +async function updatePresence() { + await fetch('api/multiplayer.php?action=heartbeat', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ player_id: playerId }) + }); +} + +async function fetchOnlinePlayers() { + const resp = await fetch(`api/multiplayer.php?action=get_online&player_id=${playerId}`); + const data = await resp.json(); + if (data.success) { + onlineCountBadge.innerText = data.players.length; + if (data.players.length === 0) { + onlinePlayersList.innerHTML = '

No other players online

'; + } else { + onlinePlayersList.innerHTML = data.players.map(p => ` +
+ ${p.nickname} + +
+ `).join(''); + } + } +} + +async function checkInvites() { + if (isMultiplayer) return; + const resp = await fetch(`api/multiplayer.php?action=check_invites&player_id=${playerId}`); + const data = await resp.json(); + if (data.success && data.invites && data.invites.length > 0) { + data.invites.forEach(inv => { + if (!document.getElementById(`invite-${inv.id}`)) { + showInvitePopup(inv); + } + }); + } +} + +function showInvitePopup(inv) { + const popup = document.createElement('div'); + popup.id = `invite-${inv.id}`; + popup.className = 'invite-toast'; + popup.innerHTML = ` +
Invitation!
+
${inv.from_nickname} invited you to play.
+
+ + +
+ `; + inviteContainer.appendChild(popup); + setTimeout(() => popup.remove(), 30000); +} + +async function sendInvite(toSessionId) { + const resp = await fetch('api/multiplayer.php?action=invite', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ from_player_id: playerId, to_player_id: toSessionId }) + }); + const data = await resp.json(); + if (data.success) { + alert('Invitation sent! Waiting for opponent...'); + // The room is already created by 'invite' action. + // We just need to join it ourselves to get the roomId. + joinRoom(data.room_code); + } +} + +window.acceptInvite = async (inviteId, roomCode) => { + await fetch('api/multiplayer.php?action=respond_invite', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ invite_id: inviteId, status: 'accepted' }) + }); + document.getElementById(`invite-${inviteId}`)?.remove(); + joinRoom(roomCode); +}; + +window.rejectInvite = async (inviteId) => { + await fetch('api/multiplayer.php?action=respond_invite', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ invite_id: inviteId, status: 'rejected' }) + }); + document.getElementById(`invite-${inviteId}`)?.remove(); +}; + +window.sendInvite = sendInvite; + +playerNameInput.addEventListener('blur', setNickname); +setNickname(); +setInterval(updatePresence, 10000); +setInterval(fetchOnlinePlayers, 5000); +setInterval(checkInvites, 3000); +fetchOnlinePlayers(); + +// --- Multiplayer Functions --- + +async function createRoom() { + const resp = await fetch('api/multiplayer.php?action=create', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ player_id: playerId }) + }); + const data = await resp.json(); + if (data.success) { + roomId = data.room_id; + startMultiplayer(data.room_code); + } +} + +async function joinRoom(code) { + const resp = await fetch('api/multiplayer.php?action=join', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ player_id: playerId, room_code: code }) + }); + const data = await resp.json(); + if (data.success) { + roomId = data.room_id; + startMultiplayer(code); + } else { + alert(data.error); + } +} + +function startMultiplayer(code) { + isMultiplayer = true; + mpSetup.classList.add('d-none'); + mpActive.classList.remove('d-none'); + activeRoomCode.innerText = code; + displayRoomCode.innerText = code; + mpStatusBar.classList.remove('d-none'); + opponentColumn.classList.remove('d-none'); + + if (pollTimer) clearInterval(pollTimer); + if (updateTimer) clearInterval(updateTimer); + pollTimer = setInterval(pollOpponent, 1000); + updateTimer = setInterval(syncState, 500); +} + +async function syncState() { + if (!roomId) return; + await fetch('api/multiplayer.php?action=update', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + room_id: roomId, + player_id: playerId, + board: arena, + score: player.score, + is_game_over: player.isGameOver + }) + }); +} + +async function pollOpponent() { + if (!roomId) return; + const resp = await fetch(`api/multiplayer.php?action=poll&room_id=${roomId}&player_id=${playerId}`); + const data = await resp.json(); + + if (data.success) { + if (data.status === 'playing') { + if (roomStatus === 'waiting') { + roomStatus = 'playing'; + mpStatusText.innerText = 'Game started!'; + setTimeout(() => mpStatusBar.classList.add('d-none'), 3000); + startGame(); + } + } + + if (data.opponent) { + opponentArena = data.opponent.board; + opponentScore = data.opponent.score; + } + + if (data.debuffs && data.debuffs.length > 0) { + data.debuffs.forEach(applyDebuff); + } + } +} + +function sendRandomDebuff() { + const debuffs = ['garbage', 'speed', 'scramble']; + const debuff = debuffs[Math.floor(Math.random() * debuffs.length)]; + + fetch('api/multiplayer.php?action=send_debuff', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + room_id: roomId, + player_id: playerId, + debuff: debuff + }) + }); + + showNotification(`Sent debuff: ${debuff.toUpperCase()}!`, 'info'); + addFloatingText(`${debuff.toUpperCase()} SENT!`, player.pos.x, player.pos.y - 2, '#00ffff'); +} + +function applyDebuff(type) { + if (type === 'garbage') { + showNotification('RECEIVED: Garbage Line!', 'danger'); + addFloatingText('GARBAGE IN!', 5, 10, '#ff0000'); + shakeScreen(0.4); + addGarbageLine(); + } else if (type === 'speed') { + showNotification('RECEIVED: Speed Surge (7s)!', 'danger'); + addFloatingText('SPEED UP!', 5, 10, '#ff0000'); + isSpeedSurge = true; + clearTimeout(speedSurgeTimer); + speedSurgeTimer = setTimeout(() => { + isSpeedSurge = false; + showNotification('Speed normalized.', 'info'); + }, 7000); + } else if (type === 'scramble') { + showNotification('RECEIVED: Input Scramble (5s)!', 'danger'); + addFloatingText('SCRAMBLED!', 5, 10, '#ff0000'); + isInputScrambled = true; + clearTimeout(scrambleTimer); + scrambleTimer = setTimeout(() => { + isInputScrambled = false; + showNotification('Controls normalized.', 'info'); + }, 5000); + } +} + +function addGarbageLine() { + const row = new Array(arena[0].length).fill(8); + const hole = Math.floor(Math.random() * row.length); + row[hole] = 0; + + arena.shift(); + arena.push(row); + + if (collide(arena, player)) { + player.pos.y--; + if (player.pos.y < 0) { + player.pos.y = 0; + player.isGameOver = true; + syncState(); + alert('Game Over by Garbage!'); + } + } +} + +function showNotification(message, type = 'info') { + const toast = document.createElement('div'); + toast.className = `debuff-toast bg-${type}`; + toast.innerText = message; + debuffNotifications.appendChild(toast); + setTimeout(() => toast.remove(), 3000); +} + +function startGame() { + arena.forEach(row => row.fill(0)); + player.score = 0; + player.isGameOver = false; + lastDebuffScore = 0; + isInputScrambled = false; + isSpeedSurge = false; + particles = []; + floatingTexts = []; + updateScore(); + const pieces = 'TJLOSZI'; + player.next = createPiece(pieces[pieces.length * Math.random() | 0]); + playerReset(); + isPaused = false; + pauseBtn.disabled = isMultiplayer; + lastTime = performance.now(); + update(); +} + +// --- Event Listeners --- + +document.addEventListener('keydown', event => { + const keysToPrevent = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', ' ', 'w', 'W', 'a', 'A', 's', 'S', 'd', 'D']; + if (keysToPrevent.includes(event.key)) { + event.preventDefault(); + } + + if (isPaused && !player.isGameOver) { + if (event.key === 'p' || event.key === 'P') { + if (!isMultiplayer) togglePause(); + } + return; + } + + if (event.key === 'ArrowLeft' || event.key === 'a' || event.key === 'A') { + playerMove(-1); + } else if (event.key === 'ArrowRight' || event.key === 'd' || event.key === 'D') { + playerMove(1); + } else if (event.key === 'ArrowDown' || event.key === 's' || event.key === 'S') { + playerDrop(); + } else if (event.key === 'ArrowUp' || event.key === 'w' || event.key === 'W') { + playerRotate(1); + } else if (event.key === ' ') { + let dropped = 0; + while (!collide(arena, player)) { + player.pos.y++; + dropped++; + } + player.pos.y--; + if (dropped > 0) shakeScreen(0.05); + merge(arena, player); + playerReset(); + arenaSweep(); + updateScore(); + } else if (event.key === 'p' || event.key === 'P') { + if (!isMultiplayer) togglePause(); + } +}); + +const startBtn = document.getElementById('start-btn'); +const pauseBtn = document.getElementById('pause-btn'); +const createRoomBtn = document.getElementById('create-room-btn'); +const joinRoomBtn = document.getElementById('join-room-btn'); +const leaveRoomBtn = document.getElementById('leave-room-btn'); + +function togglePause() { + if (isMultiplayer) return; + isPaused = !isPaused; + pauseBtn.innerText = isPaused ? 'Resume' : 'Pause'; + if (!isPaused) { + lastTime = performance.now(); + update(); + } +} + +startBtn.addEventListener('click', () => { + if (isMultiplayer) { + alert("Wait for the game to start automatically when opponent joins."); + return; + } + startGame(); +}); + +pauseBtn.addEventListener('click', togglePause); + +createRoomBtn.addEventListener('click', createRoom); +joinRoomBtn.addEventListener('click', () => { + const code = document.getElementById('join-room-code').value.toUpperCase(); + if (code) joinRoom(code); +}); + +leaveRoomBtn.addEventListener('click', () => { + location.reload(); +}); + +player.next = createPiece('T'); +draw(); \ No newline at end of file diff --git a/assets/vm-shot-2026-01-22T16-03-28-792Z.jpg b/assets/vm-shot-2026-01-22T16-03-28-792Z.jpg new file mode 100644 index 0000000000000000000000000000000000000000..13281139584fe5da0a5057b1a8097c98fc9437d0 GIT binary patch literal 77533 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 literal 0 HcmV?d00001 diff --git a/assets/vm-shot-2026-01-22T16-04-14-164Z.jpg b/assets/vm-shot-2026-01-22T16-04-14-164Z.jpg new file mode 100644 index 0000000000000000000000000000000000000000..13281139584fe5da0a5057b1a8097c98fc9437d0 GIT binary patch literal 77533 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 literal 0 HcmV?d00001 diff --git a/db/migrations/001_create_high_scores.sql b/db/migrations/001_create_high_scores.sql new file mode 100644 index 0000000..e3eec19 --- /dev/null +++ b/db/migrations/001_create_high_scores.sql @@ -0,0 +1 @@ +CREATE TABLE IF NOT EXISTS high_scores (id INT AUTO_INCREMENT PRIMARY KEY, player_name VARCHAR(50) DEFAULT 'Player', score INT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP); diff --git a/db/migrations/002_multiplayer_setup.sql b/db/migrations/002_multiplayer_setup.sql new file mode 100644 index 0000000..cf6a802 --- /dev/null +++ b/db/migrations/002_multiplayer_setup.sql @@ -0,0 +1,20 @@ +CREATE TABLE IF NOT EXISTS rooms ( + id INT AUTO_INCREMENT PRIMARY KEY, + room_code VARCHAR(10) UNIQUE NOT NULL, + player1_id VARCHAR(50) NOT NULL, + player2_id VARCHAR(50) DEFAULT NULL, + status ENUM('waiting', 'playing', 'finished') DEFAULT 'waiting', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE IF NOT EXISTS game_states ( + room_id INT NOT NULL, + player_id VARCHAR(50) NOT NULL, + board TEXT, + score INT DEFAULT 0, + next_piece TEXT, + is_game_over TINYINT(1) DEFAULT 0, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (room_id, player_id), + FOREIGN KEY (room_id) REFERENCES rooms(id) ON DELETE CASCADE +); diff --git a/db/migrations/003_add_debuffs.sql b/db/migrations/003_add_debuffs.sql new file mode 100644 index 0000000..ef20913 --- /dev/null +++ b/db/migrations/003_add_debuffs.sql @@ -0,0 +1,3 @@ +-- Add pending_debuffs column to game_states table +-- This column will store a comma-separated list of debuff codes (e.g., 'garbage,speed,scramble') +ALTER TABLE game_states ADD COLUMN pending_debuffs TEXT NULL; diff --git a/db/migrations/004_presence_and_invites.sql b/db/migrations/004_presence_and_invites.sql new file mode 100644 index 0000000..2312161 --- /dev/null +++ b/db/migrations/004_presence_and_invites.sql @@ -0,0 +1,18 @@ +CREATE TABLE IF NOT EXISTS players ( + id INT AUTO_INCREMENT PRIMARY KEY, + nickname VARCHAR(50) NOT NULL, + session_id VARCHAR(100) NOT NULL UNIQUE, + last_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + INDEX (last_seen) +); + +CREATE TABLE IF NOT EXISTS invitations ( + id INT AUTO_INCREMENT PRIMARY KEY, + from_player_id INT NOT NULL, + to_player_id INT NOT NULL, + room_code VARCHAR(10) NOT NULL, + status ENUM('pending', 'accepted', 'rejected') DEFAULT 'pending', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (from_player_id) REFERENCES players(id) ON DELETE CASCADE, + FOREIGN KEY (to_player_id) REFERENCES players(id) ON DELETE CASCADE +); diff --git a/index.php b/index.php index 7205f3d..6d92e11 100644 --- a/index.php +++ b/index.php @@ -1,150 +1,211 @@ query("SELECT player_name, score FROM high_scores ORDER BY score DESC LIMIT 5"); + $highScores = $stmt->fetchAll(); +} catch (Exception $e) { + // Fail silently if table doesn't exist yet +} + +$projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Classic Tetris Game - Single and Multiplayer HTML5 game.'; +$projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? ''; ?> - New Style - - - + Classic Tetris + - - - - - + - - + + - + + + -
-
-

Analyzing your requirements and generating your website…

-
- Loading… +
+
+ +
+ +
+
+ Waiting for opponent... + +
+ +
+
+
You
+
+ +
+
+ +
+
Opponent
+
+ +
+
Opponent Score: 0
+
+ + -

AI is collecting your requirements and applying the first changes.

-

This page will update automatically as the plan is implemented.

-

Runtime: PHP — UTC

-