Meta Description" name="description" />
<!DOCTYPE html>
<html>
<head>
<title>Minecraft Mini</title>
<style>
body { margin:0; overflow:hidden; background:#87CEEB; }
#info {
position:fixed; top:10px; left:10px; color:white;
background:rgba(0,0,0,0.4); padding:8px; font-family:Arial;
}
</style>
</head>
<body>
<div id="info">WASD: Yürü • Space: Zıpla • Sol Tık: Kır • Sağ Tık: Koy</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script>
// === Sahne, Kamera, Renderer ===
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// === Işık ===
const light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(5,10,5);
scene.add(light);
// === Basit blok materyalleri ===
const dirtMat = new THREE.MeshLambertMaterial({color:0x8B4513});
const grassMat = new THREE.MeshLambertMaterial({color:0x00aa00});
const woodMat = new THREE.MeshLambertMaterial({color:0x553311});
// === Blok boyutu ===
const BS = 1;
// === Dünya oluşturma (küçük örnek + sonsuz hissi için tekrar eden) ===
function makeBlock(x,y,z,mat){
let g = new THREE.BoxGeometry(BS,BS,BS);
let m = mat;
let b = new THREE.Mesh(g,m);
b.position.set(x,y,z);
scene.add(b);
world.push(b);
}
let world = [];
// Basit arazı
for(let x= -20; x<20; x++){
for(let z= -20; z<20; z++){
makeBlock(x,0,z, grassMat);
if(Math.random() < 0.03){ // %3 ihtimalle ağaç
makeBlock(x,1,z, woodMat);
makeBlock(x,2,z, woodMat);
makeBlock(x,3,z, grassMat);
}
}
}
// === Oyuncu ===
camera.position.set(0, 2, 5);
let velY = 0;
let onGround = false;
const keys = {};
document.addEventListener("keydown", e => keys[e.key] = true);
document.addEventListener("keyup", e => keys[e.key] = false);
// === Fare kontrolü ===
let raycaster = new THREE.Raycaster();
let mouse = new THREE.Vector2();
document.body.addEventListener("click", e=>{
mouse.x = 0;
mouse.y = 0;
raycaster.setFromCamera(mouse, camera);
const hits = raycaster.intersectObjects(world);
if(hits.length>0){
let h = hits[0].object;
if(e.button === 0){ // SOL tık → KIR
scene.remove(h);
}
if(e.button === 2){ // SAĞ tık → KOY
let p = h.position.clone().add(hits[0].face.normal);
makeBlock(p.x,p.y,p.z, dirtMat);
}
}
});
document.addEventListener("contextmenu", e => e.preventDefault());
// === Oyun döngüsü ===
function animate(){
requestAnimationFrame(animate);
// Hareket
let speed = 0.1;
if(keys["w"]) camera.position.z -= speed;
if(keys["s"]) camera.position.z += speed;
if(keys["a"]) camera.position.x -= speed;
if(keys["d"]) camera.position.x += speed;
// Zıplama
if(keys[" "] && onGround){
velY = 0.2;
onGround = false;
}
velY -= 0.01;
camera.position.y += velY;
if(camera.position.y <= 2){
camera.position.y = 2;
velY = 0;
onGround = true;
}
renderer.render(scene, camera);
}
animate();
</script>
</body>
</html>
2
2
122KB
593KB
2,347.0ms
284.0ms
2,347.0ms