<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Çarkım Feleğim - Memeli Abdi Sunar!</title>
<style>
:root {
--primary: #2c003e;
--secondary: #d1007a;
--gold: #ffd700;
--text-light: #ffffff;
--bg-dark: #1a0026;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: radial-gradient(circle, var(--primary), var(--bg-dark));
color: var(--text-light);
text-align: center;
margin: 0;
padding: 0;
min-height: 100vh;
overflow-x: hidden;
}
.screen { display: none; padding: 20px; }
.screen.active { display: block; animation: fadeIn 0.5s ease-in; }
@keyframes fadeIn {
from { opacity: 0; transform: scale(0.95); }
to { opacity: 1; transform: scale(1); }
}
#menu-screen h1 {
font-size: 5em;
color: var(--gold);
text-shadow: 0 0 20px rgba(255, 215, 0, 0.5);
margin-top: 10vh;
}
.start-btn {
font-size: 2em;
padding: 15px 40px;
background: linear-gradient(45deg, var(--gold), #ff8c00);
color: var(--bg-dark);
border: none;
border-radius: 30px;
cursor: pointer;
font-weight: bold;
box-shadow: 0 10px 20px rgba(0,0,0,0.5);
transition: transform 0.2s;
}
.start-btn:hover { transform: scale(1.1); }
#game-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 30px;
background: rgba(0,0,0,0.3);
border-bottom: 2px solid var(--gold);
}
#category-display {
font-size: 1.5em;
background-color: var(--secondary);
padding: 5px 20px;
border-radius: 10px;
box-shadow: 0 4px 6px rgba(0,0,0,0.3);
}
#players-container {
display: flex;
justify-content: center;
gap: 15px;
margin: 10px 0;
}
.player-card {
background-color: rgba(255,255,255,0.1);
border: 2px solid #555;
border-radius: 10px;
padding: 10px 20px;
width: 120px;
transition: all 0.3s;
}
.player-card.active-player {
border-color: var(--gold);
background-color: rgba(255, 215, 0, 0.2);
transform: translateY(-5px);
box-shadow: 0 10px 15px rgba(255, 215, 0, 0.3);
}
.player-name { font-weight: bold; font-size: 1.2em; margin-bottom: 5px; }
.player-score { font-size: 1.5em; color: var(--gold); }
#board {
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 10px;
margin: 15px 0;
background: #004d40;
padding: 15px;
border-radius: 10px;
border: 5px solid var(--gold);
display: inline-flex;
box-shadow: inset 0 0 20px rgba(0,0,0,0.8);
}
.word { display: flex; gap: 5px; margin: 0 10px; }
.letter-box {
width: 45px; height: 60px;
background-color: white; color: black;
font-size: 2.2em; font-weight: bold;
display: flex; align-items: center; justify-content: center;
border: 2px solid #ccc;
border-radius: 3px;
}
.hidden-letter { color: transparent; background: radial-gradient(circle, #fff, #ddd); }
#main-action-area {
display: flex;
justify-content: center;
align-items: center;
gap: 50px;
margin-bottom: 20px;
padding: 0 20px;
}
#wheel-container {
position: relative;
width: 350px; height: 350px;
border-radius: 50%; background: #222;
box-shadow: 0 0 25px rgba(255, 215, 0, 0.6);
border: 10px solid var(--gold); flex-shrink: 0;
}
#wheel-pointer {
position: absolute; top: -25px; left: 50%; transform: translateX(-50%);
width: 0; height: 0;
border-left: 20px solid transparent; border-right: 20px solid transparent;
border-top: 40px solid red; z-index: 10;
filter: drop-shadow(0 4px 4px rgba(0,0,0,0.5));
}
#wheelCanvas {
width: 100%; height: 100%; border-radius: 50%;
transition: transform 4s cubic-bezier(0.1, 0.7, 0.1, 1);
}
#wheel-center {
position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
width: 40px; height: 40px; background: radial-gradient(circle, #fff, #888);
border-radius: 50%; z-index: 5; box-shadow: 0 0 10px rgba(0,0,0,0.8);
}
#side-panel { display: flex; flex-direction: column; gap: 15px; max-width: 450px; }
#host-panel { display: flex; align-items: center; gap: 20px; }
#host-avatar {
font-size: 4em; background: linear-gradient(135deg, #d1007a, #ff4500);
border-radius: 50%; width: 90px; height: 90px; display: flex; align-items: center;
justify-content: center; border: 4px solid var(--gold); box-shadow: 0 0 15px var(--gold);
flex-shrink: 0; animation: bounce 2s infinite;
}
@keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } }
#message-box {
position: relative; background: #ffffff; color: #1a0026; border-radius: 15px;
padding: 15px 20px; font-size: 1.2em; font-weight: bold; min-height: 60px;
text-align: left; border: 4px solid var(--gold); box-shadow: 0 5px 15px rgba(0,0,0,0.5); flex-grow: 1;
}
#message-box b { color: #d1007a; }
#message-box::before { content: ''; position: absolute; left: -20px; top: 25px; border-width: 10px 20px 10px 0; border-style: solid; border-color: transparent var(--gold) transparent transparent; }
#message-box::after { content: ''; position: absolute; left: -14px; top: 27px; border-width: 8px 16px 8px 0; border-style: solid; border-color: transparent #ffffff transparent transparent; }
#controls button {
font-size: 1.2em; padding: 12px 25px; margin: 5px;
background: linear-gradient(to bottom, #ffd700, #daa520); color: var(--primary);
border: none; border-radius: 5px; font-weight: bold; cursor: pointer; box-shadow: 0 4px 6px rgba(0,0,0,0.3);
}
#controls button:disabled { background: #555; color: #888; cursor: not-allowed; box-shadow: none; }
#controls button:hover:not(:disabled) { background: #fff; transform: scale(1.05); }
#keyboard { max-width: 800px; margin: 0 auto; display: flex; flex-wrap: wrap; justify-content: center; }
.key {
width: 40px; height: 40px; margin: 3px; font-size: 1.2em; cursor: pointer; border-radius: 5px; border: none;
background: #eee; color: #333; font-weight: bold; box-shadow: 0 2px 4px rgba(0,0,0,0.3);
}
.key.vowel { background-color: #00ced1; color: white; }
.key:disabled { background-color: #333; color: #111; cursor: not-allowed; box-shadow: none; }
.key:hover:not(:disabled) { background: #fff; transform: scale(1.1); }
#my-turn-overlay {
display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%;
background: rgba(0,0,0,0.4); pointer-events: auto; z-index: 100;
}
</style>
</head>
<body>
<div id="menu-screen" class="screen active">
<h1>ÇARKIM FELEĞİM</h1>
<p style="font-size: 1.5em; margin-bottom: 40px;">Ekranların En Çılgın Sunucusu Memeli Abdi Sizi Bekliyor!</p>
<button class="start-btn" onclick="startGame()">Stüdyoya Dalış Yap!</button>
</div>
<div id="game-screen" class="screen">
<div id="game-header">
<h2>ÇARKIM FELEĞİM</h2>
<div id="category-display">Yükleniyor...</div>
</div>
<div id="players-container"></div>
<div id="board"></div>
<div id="main-action-area">
<div id="wheel-container">
<div id="wheel-pointer"></div>
<div id="wheel-center"></div>
<canvas id="wheelCanvas" width="350" height="350"></canvas>
</div>
<div id="side-panel">
<div id="host-panel">
<div id="host-avatar">🤵*♂️</div>
<div id="message-box">Hazırlanıyoruz...</div>
</div>
<div id="controls">
<button id="btn-spin" onclick="humanSpin()">🎡 Çarkı Yapıştır</button>
<button id="btn-guess-word" onclick="humanGuessWord()">Ben Bildim!</button>
</div>
</div>
</div>
<div id="keyboard"></div>
<div id="my-turn-overlay"></div>
</div>
<script>
// --- OYUN VERİLERİ (ÇOKLU TUR İÇİN GENİŞLETİLDİ) ---
const allPuzzles = [
{ cat: "YERLİ FİLM", ans: "HABABAM SINIFI SINIFTA KALDI" },
{ cat: "ATASÖZÜ", ans: "SAKLA SAMANI GELİR ZAMANI" },
{ cat: "ŞARKI", ans: "GÜL PEMBE" },
{ cat: "BİTKİ", ans: "AFRİKA MENEKŞESİ" },
{ cat: "ŞEHİR", ans: "AFYONKARAHİSAR" },
{ cat: "DİZİ KARAKTERİ", ans: "MEMATİ BAŞ" },
{ cat: "YEMEK", ans: "ZEYTİNYAĞLI YAPRAK SARMASI" }
];
let availablePuzzles = [];
let currentRound = 1;
let currentPuzzle = null;
const wheelValues = [100, 150, 200, 250, 300, 400, 500, 750, 1000, 'PAS', 'İFLAS', 'PAS'];
const sliceColors = ['#1abc9c', '#3498db', '#9b59b6', '#f1c40f', '#e67e22', '#e74c3c', '#2ecc71', '#16a085', '#2980b9', '#f39c12', '#000000', '#d35400'];
const vowels = ['A', 'E', 'I', 'İ', 'O', 'Ö', 'U', 'Ü'];
const alphabet = ['A','B','C','Ç','D','E','F','G','Ğ','H','I','İ','J','K','L','M','N','O','Ö','P','R','S','Ş','T','U','Ü','V','Y','Z'];
let players = [];
let currentPlayerIndex = 0;
let guessedLetters = [];
let currentSpinValue = null;
let humanNeedsToPickConsonant = false;
let currentRotation = 0;
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
function speakHost(text) {
document.getElementById('message-box').innerHTML = text;
}
// --- ÇARKI ÇİZME FONKSİYONU ---
function drawWheel() {
const canvas = document.getElementById('wheelCanvas');
const ctx = canvas.getContext('2d');
const centerX = canvas.width / 2;
const centerY = canvas.height / 2;
const radius = centerX;
const sliceAngle = (2 * Math.PI) / wheelValues.length;
ctx.clearRect(0, 0, canvas.width, canvas.height);
for (let i = 0; i < wheelValues.length; i++) {
const startAngle = -Math.PI / 2 + (i * sliceAngle);
const endAngle = startAngle + sliceAngle;
ctx.beginPath();
ctx.moveTo(centerX, centerY);
ctx.arc(centerX, centerY, radius, startAngle, endAngle);
ctx.closePath();
ctx.fillStyle = sliceColors[i];
ctx.fill();
ctx.lineWidth = 2;
ctx.strokeStyle = '#ffffff';
ctx.stroke();
ctx.save();
ctx.translate(centerX, centerY);
ctx.rotate(startAngle + sliceAngle / 2);
ctx.textAlign = "right";
ctx.textBaseline = "middle";
ctx.fillStyle = '#ffffff';
ctx.font = "bold 22px 'Segoe UI'";
if(wheelValues[i] === 'İFLAS' || wheelValues[i] === 'PAS') {
ctx.font = "bold 24px 'Segoe UI'";
if(wheelValues[i] === 'İFLAS') ctx.fillStyle = '#ff4444';
}
ctx.fillText(wheelValues[i], radius - 20, 0);
ctx.restore();
}
}
// --- OYUN BAŞLATMA ---
function startGame() {
document.getElementById('menu-screen').classList.remove('active');
document.getElementById('game-screen').classList.add('active');
drawWheel();
// Tüm kelimeleri havuza at
availablePuzzles = [...allPuzzles];
currentRound = 1;
players = [
{ name: "Sen", score: 0, isBot: false },
{ name: "Bot Ali", score: 0, isBot: true },
{ name: "Bot Ayşe", score: 0, isBot: true },
{ name: "Bot Can", score: 0, isBot: true }
];
currentPlayerIndex = 0;
speakHost("Ooooy oyy oyy! Ekranların en çılgın sunucusu Memeli Abdi ile Çarkım Feleğim baş-lı-yoooor! Alkışlaaar! 👏👏👏");
setTimeout(() => {
startNewRound();
}, 3500);
}
function startNewRound() {
if (availablePuzzles.length === 0) {
endFullGame();
return;
}
document.getElementById('my-turn-overlay').style.display = 'none';
// Rastgele kelime seç ve havuzdan çıkar
const randomIndex = Math.floor(Math.random() * availablePuzzles.length);
currentPuzzle = availablePuzzles.splice(randomIndex, 1)[0];
document.getElementById('category-display').innerHTML = `<b>${currentRound}. TUR</b> | Kategori: ${currentPuzzle.cat}`;
guessedLetters = [];
currentSpinValue = null;
humanNeedsToPickConsonant = false;
renderPlayers();
renderBoard();
renderKeyboard();
speakHost(`Hazırsanız <b>${currentRound}. Turumuz</b> başlıyor! Sorumuz geldi... Hadi durmayın, yapıştırın!`);
setTimeout(processTurn, 3000);
}
function renderPlayers() {
const container = document.getElementById('players-container');
container.innerHTML = '';
players.forEach((p, index) => {
const card = document.createElement('div');
card.className = `player-card ${index === currentPlayerIndex ? 'active-player' : ''}`;
card.innerHTML = `<div class="player-name">${p.name}</div><div class="player-score">${p.score}</div>`;
container.appendChild(card);
});
}
function renderBoard() {
const board = document.getElementById('board');
board.innerHTML = '';
const words = currentPuzzle.ans.split(' ');
words.forEach(word => {
const wordDiv = document.createElement('div');
wordDiv.className = 'word';
for (let char of word) {
const box = document.createElement('div');
box.className = 'letter-box';
if (guessedLetters.includes(char)) {
box.textContent = char;
} else {
box.textContent = char;
box.classList.add('hidden-letter');
}
wordDiv.appendChild(box);
}
board.appendChild(wordDiv);
});
}
function renderKeyboard() {
const kb = document.getElementById('keyboard');
kb.innerHTML = '';
const cp = players[currentPlayerIndex];
alphabet.forEach(letter => {
const btn = document.createElement('button');
btn.className = `key ${vowels.includes(letter) ? 'vowel' : ''}`;
btn.textContent = letter;
if (guessedLetters.includes(letter)) {
btn.disabled = true;
} else if (!cp.isBot && !vowels.includes(letter) && !humanNeedsToPickConsonant) {
btn.disabled = true;
}
btn.onclick = () => handleLetterGuess(letter);
kb.appendChild(btn);
});
}
function updateUIState() {
renderPlayers();
renderBoard();
renderKeyboard();
const cp = players[currentPlayerIndex];
const overlay = document.getElementById('my-turn-overlay');
const btnSpin = document.getElementById('btn-spin');
const btnGuessWord = document.getElementById('btn-guess-word');
if (cp.isBot) {
overlay.style.display = 'block';
btnSpin.disabled = true;
btnGuessWord.disabled = true;
} else {
overlay.style.display = 'none';
if(humanNeedsToPickConsonant) {
btnSpin.disabled = true;
btnGuessWord.disabled = true;
} else {
btnSpin.disabled = false;
btnGuessWord.disabled = false;
}
}
}
function spinRealWheel() {
return new Promise(resolve => {
const canvas = document.getElementById('wheelCanvas');
const extraSpins = 360 * 4;
const randomAngle = Math.floor(Math.random() * 360);
const totalRotation = currentRotation + extraSpins + randomAngle;
canvas.style.transform = `rotate(${totalRotation}deg)`;
currentRotation = totalRotation;
setTimeout(() => {
const normalizedRotation = totalRotation % 360;
const sliceAngle = 360 / wheelValues.length;
const winningIndex = (wheelValues.length - Math.floor(normalizedRotation / sliceAngle)) % wheelValues.length;
resolve(wheelValues[winningIndex]);
}, 4000);
});
}
// --- TUR MANTIĞI ---
async function processTurn() {
if (isGameWon()) return;
updateUIState();
const cp = players[currentPlayerIndex];
if (cp.isBot) {
speakHost(`Sayın seyirciler, sıra <b>${cp.name}</b> kardeşimizde! Gönder gelsin!`);
await sleep(2000);
await botPlayTurn(cp);
} else {
speakHost("Sıra sende canım kardeşim! Hadi yapıştır şu çarka da ortalık şenlensin!");
}
}
function nextPlayer() {
currentPlayerIndex = (currentPlayerIndex + 1) % players.length;
humanNeedsToPickConsonant = false;
currentSpinValue = null;
processTurn();
}
// --- İNSAN OYUNCU ---
async function humanSpin() {
document.getElementById('btn-spin').disabled = true;
document.getElementById('btn-guess-word').disabled = true;
speakHost("Hoppalaaa! Çarkı çevirdin, dönüyor dönüyor dönüyor...");
const result = await spinRealWheel();
currentSpinValue = result;
if (result === 'İFLAS') {
speakHost("Aboooovvv! <b>İFLAS</b> geldi! Memeli Abdi bile üzüldü buna. Bütün paralar pırrr!");
players[currentPlayerIndex].score = 0;
updateUIState();
await sleep(3500);
nextPlayer();
} else if (result === 'PAS') {
speakHost("Tüh be! <b>PAS</b> geldi! Ne yapalım, sağlık olsun. Sıra yandakine zıpladı!");
await sleep(3000);
nextPlayer();
} else {
speakHost(`Aha! Çark tam <b>${result}</b> Puan'da zımbaladı! Gönder klavyeden bir ünsüz harf!`);
humanNeedsToPickConsonant = true;
updateUIState();
}
}
function handleLetterGuess(letter) {
const cp = players[currentPlayerIndex];
const isVowel = vowels.includes(letter);
if (isVowel) {
if (cp.score < 250) {
speakHost("Hop dedik! Ünlü harf bedava değil, <b>250 puanın</b> yok ki canım benim!");
return;
}
cp.score -= 250;
speakHost(`Bastın 250 puanı, <b>'${letter}'</b> harfini aldın. Bakalım çıkacak mı?`);
} else {
humanNeedsToPickConsonant = false;
}
processLetter(letter, cp, isVowel);
}
function humanGuessWord() {
const guess = prompt("Tahminini yaz bakalım:");
if (guess) {
if (guess.toLocaleUpperCase('tr-TR').trim() === currentPuzzle.ans) {
handleRoundWon(players[currentPlayerIndex].name);
} else {
speakHost("Aman be! Yanlış tahmin ettin yahu, gitti güzelim sıra!");
setTimeout(nextPlayer, 2500);
}
}
}
// --- BOT ---
async function botPlayTurn(botPlayer) {
speakHost(`Bizim <b>${botPlayer.name}</b> asıldı çarka! Vur tellere!`);
const result = await spinRealWheel();
currentSpinValue = result;
if (result === 'İFLAS') {
speakHost(`Eyvah eyvah! <b>${botPlayer.name} İFLAS</b> bayrağını çekti! Sıfırı tüketti yavrucak.`);
botPlayer.score = 0;
updateUIState();
await sleep(3000);
nextPlayer();
return;
} else if (result === 'PAS') {
speakHost(`Olmadı be <b>${botPlayer.name}</b>, <b>PAS</b> geldi sana da. Sıra kaydı!`);
await sleep(3000);
nextPlayer();
return;
}
speakHost(`<b>${botPlayer.name}</b>, <b>${result}</b> puan için derin derin harf düşünüyor...`);
await sleep(2000);
const availableConsonants = alphabet.filter(l => !vowels.includes(l) && !guessedLetters.includes(l));
if (availableConsonants.length === 0) {
speakHost(`Kaldı mı ünsüz? <b>${botPlayer.name}</b> söyleyecek harf bulamadı valla, pas geçiyoruz!`);
await sleep(2500);
nextPlayer();
return;
}
const chosenLetter = availableConsonants[Math.floor(Math.random() * availableConsonants.length)];
speakHost(`İşte geldi! <b>${botPlayer.name}</b>, <b>'${chosenLetter}'</b> harfini patlattı!`);
await sleep(1500);
processLetter(chosenLetter, botPlayer, false);
}
function processLetter(letter, player, isVowel) {
guessedLetters.push(letter);
let count = 0;
for(let char of currentPuzzle.ans) { if(char === letter) count++; }
if (count > 0) {
if (!isVowel && currentSpinValue > 0) {
const earned = count * currentSpinValue;
player.score += earned;
speakHost(`Amanın amanın! Tam ${count} tane <b>'${letter}'</b> çıktı! <b>${player.name}</b> tam <b>${earned} puanı</b> cukkaladı!`);
} else {
speakHost(`Güzel, güzel! Tabloda <b>'${letter}'</b> harfi var. Akıyorsun maşallah!`);
}
updateUIState();
if(!isGameWon()) {
setTimeout(() => {
speakHost(`Doğru bildiği için <b>${player.name}</b> şova devam ediyor!`);
setTimeout(processTurn, 2000);
}, 3000);
}
} else {
speakHost(`Tüh tüh tüh! Tabloda <b>'${letter}'</b> harfi ne gezer! Kısmet yandaki yarışmacıya...`);
updateUIState();
setTimeout(nextPlayer, 3500);
}
}
// --- TUR/OYUN BİTİŞ KONTROLLERİ ---
function isGameWon() {
const answerChars = currentPuzzle.ans.replace(/ /g, '').split('');
const won = answerChars.every(char => guessedLetters.includes(char));
if (won) {
handleRoundWon(players[currentPlayerIndex].name);
return true;
}
return false;
}
function handleRoundWon(winnerName) {
guessedLetters = alphabet.slice();
renderBoard();
document.getElementById('my-turn-overlay').style.display = 'block';
speakHost(`🎉 VEEE BİTTİ! Helal olsun sana! <b>${currentRound}. Turu ${winnerName}</b> aldı götürdü! Puanları cebe indirdi! 🎉`);
setTimeout(() => {
currentRound++;
speakHost("Ayrılmayın, kısa bir reklam arasından sonra <b>sıradaki tur</b> ile dönüyoruz!");
setTimeout(() => {
startNewRound();
}, 4000);
}, 4000);
}
function endFullGame() {
// En yüksek puanlı oyuncuyu bul
let winner = players.reduce((prev, current) => (prev.score > current.score) ? prev : current);
document.getElementById('my-turn-overlay').style.display = 'block';
speakHost(`🏆 OYUN BİTTİ CANLAR! 🏆<br><br>Sorular bitti, terler aktı! Günün şampiyonu <b>${winner.score} Puanla ${winner.name}</b> oldu! Memeli Abdi kaçar, kalın sağlıcakla!`);
}
</script>
</body>
</html>



Selamlar memeli abdinin sunumuyla çarkım feleğim yapay zeka ile yapılmıştır kodlar iletilmiştir geliştirmesi size kalmış iyi forumlar