// Win for Victory - Multiplayer FPS Browser Game (Skeleton) // Teknolojiler: // - Three.js (3D engine) // - PointerLockControls (FPS hareket) // - Socket.io (real-time multiplayer) // - Node.js sunucu // - MongoDB (kayıt, skor, envanter) // Bu başlangıç dosyası istemci tarafıdır (client.js) import * as THREE from 'three'; import { PointerLockControls } from 'three/examples/jsm/controls/PointerLockControls.js'; import io from 'socket.io-client'; const socket = io(); let camera, scene, renderer, controls; let objects = []; const players = {}; // multiplayer oyuncu takibi init(); animate(); function init() { camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000); scene = new THREE.Scene(); scene.background = new THREE.Color(0xaaaaaa); const light = new THREE.HemisphereLight(0xffffff, 0x444444); light.position.set(0, 200, 0); scene.add(light); const ground = new THREE.Mesh( new THREE.PlaneGeometry(2000, 2000), new THREE.MeshPhongMaterial({ color: 0x999999, depthWrite: false }) ); ground.rotation.x = -Math.PI / 2; ground.receiveShadow = true; scene.add(ground); controls = new PointerLockControls(camera, document.body); document.addEventListener('click', () => { controls.lock(); }); scene.add(controls.getObject()); const geometry = new THREE.BoxGeometry(20, 20, 20); const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); const cube = new THREE.Mesh(geometry, material); cube.position.y = 10; scene.add(cube); renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); socket.on('player-update', (data) => { // diğer oyuncuların konumu if (!players[data.id]) { const other = new THREE.Mesh( new THREE.BoxGeometry(10, 20, 10), new THREE.MeshBasicMaterial({ color: 0xff0000 }) ); players[data.id] = other; scene.add(other); } players[data.id].position.set(data.x, data.y, data.z); }); setInterval(() => { const pos = controls.getObject().position; socket.emit('move', { x: pos.x, y: pos.y, z: pos.z }); }, 50); } function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); } // Devamı: // - Harita sistemleri (map loader) // - Silahlar ve envanter sistemi // - Hasar, sağlık, skor // - Kullanıcı girişi, matchmaking, lobby // - Oyun içi UI, kill feed, mini radar // - Harita & silah seçme ekranı // - Mobil uyum // => Sunucu tarafı ayrı dosyada yapılandırılmalı