From b67252633a51fbca9bb3b5b4f23bae8b2e807bc6 Mon Sep 17 00:00:00 2001 From: Dauren777 Date: Mon, 1 Jun 2026 11:17:23 +0000 Subject: [PATCH] =?UTF-8?q?v16=20=E2=80=94=20=D0=B8=D0=B3=D1=80=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=B0=D1=8E=D1=82=20=D0=B7=D0=B2=D1=91=D0=B7=D0=B4=D1=8B?= =?UTF-8?q?=20=D0=B2=20=D1=80=D0=B5=D0=B9=D1=82=D0=B8=D0=BD=D0=B3=20(?= =?UTF-8?q?=D0=B2=D0=B8=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B0,=20?= =?UTF-8?q?=D0=BA=D1=80=D0=B5=D1=81=D1=82=D0=B8=D0=BA=D0=B8-=D0=BD=D0=BE?= =?UTF-8?q?=D0=BB=D0=B8=D0=BA=D0=B8,=20=D1=80=D0=B5=D0=B0=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D1=8F,=20=D1=83=D0=B3=D0=B0=D0=B4=D0=B0=D0=B9=20=D1=87?= =?UTF-8?q?=D0=B8=D1=81=D0=BB=D0=BE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/index.html b/index.html index 4eac06f..21cf56f 100644 --- a/index.html +++ b/index.html @@ -589,7 +589,12 @@ function ticMove(i){ const lines = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]]; for(const [a,b,c] of lines){ if(gameState.board[a]&&gameState.board[a]===gameState.board[b]&&gameState.board[a]===gameState.board[c]){ - gameState.over = true; gameState.winner = gameState.board[a]; break; + gameState.over = true; gameState.winner = gameState.board[a]; + // Award star for winning + const users = LS('users') || []; + const uidx = users.findIndex(u => u.id === uid()); + if (uidx >= 0 && !gameState.starGiven) { users[uidx].stars = (users[uidx].stars || 0) + 1; users[uidx].gamesWon = (users[uidx].gamesWon || 0) + 1; SS('users', users); currentUser = users[uidx]; gameState.starGiven = true; } + break; } } if(!gameState.over && gameState.board.every(c=>c)){ gameState.over = true; gameState.winner = 'draw'; } @@ -606,7 +611,7 @@ function renderGuessNumber(){ let h = `

🔢 Угадай число (1-100)

Осталось попыток: ${g.max - g.attempts}

`; if(g.won){ - h += `

🎉 Угадал! Это ${g.number}!

За ${g.attempts} попыток

`; + h += `

🎉 Угадал! Это ${g.number}!

За ${g.attempts} попыток

${g.attempts<=5?'

+2 ⭐ в рейтинг!

':''}`; h += ''; } else if(g.attempts >= g.max){ h += `

Не угадал! Это было ${g.number}

`; @@ -622,7 +627,13 @@ function doGuess(){ const n = +document.getElementById('guessInput').value; if(!n||n<1||n>100)return; gameState.attempts++; - if(n === gameState.number){ gameState.won = true; renderGuessNumber(); return } + if(n === gameState.number){ gameState.won = true; + if(gameState.attempts <= 5) { + const users = LS('users') || []; + const idx = users.findIndex(u => u.id === uid()); + if(idx >= 0) { users[idx].stars = (users[idx].stars || 0) + 2; SS('users', users); currentUser = users[idx]; } + } + renderGuessNumber(); return } const hint = n < gameState.number ? '📈 Больше!' : '📉 Меньше!'; const tempDiv = document.createElement('div'); tempDiv.innerHTML = `

${n} — ${hint}

`; document.getElementById('gameArea').insertBefore(tempDiv, document.getElementById('gameArea').firstChild); @@ -640,7 +651,7 @@ function renderReaction(){ if(g.state === 'waiting'){ bg = '#FF6B6B'; txt = '🔴 Жди зелёный!'; } else if(g.state === 'ready'){ bg = '#4CAF50'; txt = '🟢 ЖМИ СЕЙЧАС!'; } else if(g.state === 'early'){ bg = '#FFD700'; txt = '⚠ Слишком рано! Жми "Начать"'; } - else if(g.state === 'done'){ txt = `⏱ Твоё время: ${g.reaction} мс
Рекорд: ${g.best !== 9999 ? g.best+' мс' : '—'}`; } + else if(g.state === 'done'){ txt = `⏱ Твоё время: ${g.reaction} мс${g.reactStar?'
+1 ⭐ быстрее 300 мс!':''}
Рекорд: ${g.best !== 9999 ? g.best+' мс' : '—'}`; } let h = `

⚡ Реакция

${txt||'🎯 Нажми "Начать"'}
`; @@ -665,6 +676,11 @@ function reactClick(){ if(!gameState)return; if(gameState.state === 'waiting'){ gameState.state = 'early'; renderReaction(); return; } if(gameState.state === 'ready'){ gameState.reaction = Date.now() - gameState.startTime; gameState.state = 'done'; + if(gameState.reaction < 300) { + const users = LS('users') || []; + const idx = users.findIndex(u => u.id === uid()); + if(idx >= 0) { users[idx].stars = (users[idx].stars || 0) + 1; SS('users', users); currentUser = users[idx]; gameState.reactStar = true; } + } if(gameState.reaction < gameState.best){ gameState.best = gameState.reaction; setMy('reactionBest', gameState.reaction); } renderReaction(); } } @@ -686,9 +702,17 @@ function startQuiz(){ function renderQuiz(){ const g = gameState; if(g.current >= g.questions.length){ - document.getElementById('gameArea').innerHTML = `

🏆 Викторина завершена!

${g.score} / ${g.questions.length}

${g.score>=6?'👑 Ты знаток спорта!':g.score>=4?'👍 Неплохо!':'📚 Учи матчасть!'}

`; + // Award stars for quiz + const earned = g.score >= 7 ? 5 : g.score >= 5 ? 3 : g.score >= 3 ? 1 : 0; + if (earned > 0) { + const users = LS('users') || []; + const idx = users.findIndex(u => u.id === uid()); + if (idx >= 0) { users[idx].stars = (users[idx].stars || 0) + earned; users[idx].quizScore = g.score; SS('users', users); currentUser = users[idx]; } + } + document.getElementById('gameArea').innerHTML = `

🏆 Викторина завершена!

${g.score} / ${g.questions.length}

${earned>0?`

+${earned} ⭐ в рейтинг!

`:''}

${g.score>=6?'👑 Ты знаток спорта!':g.score>=4?'👍 Неплохо!':'📚 Учи матчасть!'}

`; return; } + if(g.current >= g.questions.length) return; const q = g.questions[g.current]; let h = `

❓ Вопрос ${g.current+1}/${g.questions.length}

${q.q}

`; q.a.forEach((ans,i)=>{ @@ -796,7 +820,7 @@ function renderRanking(){ const users=LS('users')||[]; const sorted=[...users].filter(u=>u.stars>0).sort((a,b)=>b.stars-a.stars).slice(0,5); if(!sorted.length){el.innerHTML='

Пока никто не проголосовал

';return} - el.innerHTML=sorted.map((u,i)=>`
${i+1}.${u.name}⭐ ${u.stars}
`).join(''); + el.innerHTML=sorted.map((u,i)=>`
${i+1}.${u.name}⭐ ${u.stars||0}${u.quizScore?` | 🏆 ${u.quizScore}/8`:''}${u.gamesWon?` | 🎮 ${u.gamesWon}`:''}
`).join(''); } function voteRandom(){ const users=LS('users')||[];