sozday-dlya-menya-kuiz-sayt/qarlyq-kaganaty.html

392 lines
24 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- no-design-system -->
<!DOCTYPE html>
<html lang="kk" data-theme="auto">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>ҰБТ: Қарлұқ қағанаты</title>
<link rel="stylesheet" href="design-system/kt-ai-fonts.css">
<link rel="stylesheet" href="design-system/kt-ai-tokens.css">
<link rel="stylesheet" href="design-system/kt-ai-components.css">
<link rel="stylesheet" href="design-system/kt-ai-page.css">
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🐆</text></svg>">
<style>
.kt-ai-hero { background: linear-gradient(135deg, var(--kt-ai-bg-soft) 0%, var(--kt-ai-bg) 100%); }
.question-card { margin-bottom: var(--kt-ai-space-6); }
.options-grid { display: grid; gap: var(--kt-ai-space-3); margin-top: var(--kt-ai-space-5); }
.option-btn { text-align: left; justify-content: flex-start; padding-left: var(--kt-ai-space-4); }
.option-btn::before { content: ''; width: 24px; height: 24px; border-radius: 50%; border: 2px solid var(--kt-ai-fg-muted); margin-right: var(--kt-ai-space-3); flex-shrink: 0; display: inline-block; vertical-align: middle; }
.option-btn[data-selected="true"]::before { background: var(--kt-ai-primary); border-color: var(--kt-ai-primary); }
.option-btn.correct { background: #dcfce7 !important; border-color: #22c55e !important; color: #166534; }
.option-btn.wrong { background: #fee2e2 !important; border-color: #ef4444 !important; color: #991b1b; }
.score-display { font-size: var(--kt-ai-text-3xl); font-weight: var(--kt-ai-weight-bold); color: var(--kt-ai-primary); margin: var(--kt-ai-space-6) 0; }
.progress-bar { height: 8px; background: var(--kt-ai-bg-soft); border-radius: var(--kt-ai-radius-full); overflow: hidden; margin-bottom: var(--kt-ai-space-5); }
.progress-fill { height: 100%; background: var(--kt-ai-primary); transition: width 0.3s ease; }
.hidden { display: none; }
.fade-in { animation: fadeIn 0.4s ease; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
.timer-badge { display: inline-flex; align-items: center; gap: var(--kt-ai-space-2); padding: var(--kt-ai-space-2) var(--kt-ai-space-4); background: var(--kt-ai-bg-soft); border-radius: var(--kt-ai-radius-lg); font-weight: var(--kt-ai-weight-semibold); }
.timer-badge.warning { background: #fef3c7; color: #92400e; }
.timer-badge.danger { background: #fee2e2; color: #991b1b; }
.stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--kt-ai-space-4); margin-bottom: var(--kt-ai-space-6); }
.stat-card { text-align: center; padding: var(--kt-ai-space-4); background: var(--kt-ai-bg-soft); border-radius: var(--kt-ai-radius-xl); }
.stat-value { font-size: var(--kt-ai-text-2xl); font-weight: var(--kt-ai-weight-bold); color: var(--kt-ai-primary); }
.stat-label { font-size: var(--kt-ai-text-sm); color: var(--kt-ai-fg-muted); }
.welcome-text { font-size: var(--kt-ai-text-lg); color: var(--kt-ai-fg-muted); margin-bottom: var(--kt-ai-space-3); }
.name-input { max-width: 400px; margin: var(--kt-ai-space-6) auto; }
.answer-feedback { margin-top: var(--kt-ai-space-4); padding: var(--kt-ai-space-3); border-radius: var(--kt-ai-radius-lg); font-weight: var(--kt-ai-weight-medium); }
.answer-feedback.correct { background: #dcfce7; color: #166534; }
.answer-feedback.wrong { background: #fee2e2; color: #991b1b; }
</style>
</head>
<body>
<header class="kt-ai-pagehead">
<div class="kt-ai-wrap kt-ai-pagehead-in">
<strong>🇰🇿 ҰБТ: Қазақстан тарихы</strong>
<span class="kt-ai-spacer"></span>
<span id="header-user-name" style="color: var(--kt-ai-primary); font-weight: var(--kt-ai-weight-semibold);"></span>
<span class="kt-ai-spacer"></span>
<a class="kt-ai-btn" data-variant="ghost" href="index.html">Басқа тест</a>
<button class="kt-ai-btn" data-variant="ghost" onclick="showStartScreen()">Қайта бастау</button>
</div>
</header>
<section class="kt-ai-hero" data-align="center">
<div class="kt-ai-wrap">
<h1>Қарлұқ қағанаты</h1>
<p class="kt-ai-hero-sub">Біліміңді тексер және қайталауды ұмытпа!</p>
<div id="login-section" style="max-width: 400px; margin: var(--kt-ai-space-6) auto;">
<div class="kt-ai-field">
<label>Аты-жөніңізді енгізіңіз:</label>
<input class="kt-ai-input" id="user-name" placeholder="Мысалы: Алиев Арман" type="text">
</div>
<button class="kt-ai-btn" data-variant="primary" data-size="lg" onclick="startQuiz()" style="margin-top: var(--kt-ai-space-4);">Тестілеуді бастау</button>
</div>
<div id="welcome-section" class="hidden">
<p class="welcome-text">Қош келдіңіз, <strong id="user-display-name" style="color: var(--kt-ai-primary); font-weight: var(--kt-ai-weight-bold);"></strong>!</p>
<button class="kt-ai-btn" data-variant="primary" data-size="lg" onclick="startQuiz()">Тестілеуді бастау</button>
</div>
</div>
</section>
<section id="quiz-section" class="kt-ai-section hidden">
<div class="kt-ai-wrap" data-width="narrow">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--kt-ai-space-4);">
<div class="timer-badge" id="timer">
⏱️ <span id="timer-value">00:00</span>
</div>
<div style="color: var(--kt-ai-fg-muted);">Сұрақ <span id="q-current">1</span> / <span id="q-total">35</span></div>
</div>
<div class="progress-bar">
<div class="progress-fill" id="progress"></div>
</div>
<div class="kt-ai-card question-card fade-in">
<h2 id="question-text" style="margin-bottom: var(--kt-ai-space-5); font-size: var(--kt-ai-text-xl);">Сұрақ мәтіні</h2>
<div class="options-grid" id="options-container"></div>
<div id="answer-feedback" class="answer-feedback hidden"></div>
</div>
<div style="display: flex; gap: var(--kt-ai-space-3); justify-content: space-between; margin-top: var(--kt-ai-space-6);">
<button class="kt-ai-btn" data-variant="ghost" id="prev-btn" onclick="prevQuestion()">← Артқа</button>
<button class="kt-ai-btn" data-variant="primary" id="next-btn" onclick="nextQuestion()">Алға →</button>
</div>
</div>
</section>
<section id="result-section" class="kt-ai-section hidden">
<div class="kt-ai-wrap" data-width="narrow">
<div class="kt-ai-card" style="text-align: center">
<h2>Тестілеу аяқталды!</h2>
<div class="stats-grid">
<div class="stat-card">
<div class="stat-value" id="correct-count">0</div>
<div class="stat-label">Дұрыс жауап</div>
</div>
<div class="stat-card">
<div class="stat-value" id="wrong-count">0</div>
<div class="stat-label">Қате жауап</div>
</div>
<div class="stat-card">
<div class="stat-value" id="percentage">0%</div>
<div class="stat-label">Нәтиже</div>
</div>
</div>
<div class="score-display" id="score">0 / 35</div>
<p id="score-message" style="color: var(--kt-ai-fg-muted); margin-bottom: var(--kt-ai-space-6); font-size: var(--kt-ai-text-lg);"></p>
<div class="kt-ai-hero-actions">
<button class="kt-ai-btn" data-variant="primary" data-size="lg" onclick="showStartScreen()">Қайта тапсыру</button>
<a class="kt-ai-btn" data-variant="ghost" data-size="lg" href="index.html" style="margin-left: var(--kt-ai-space-3);">Басқа тест</a>
</div>
</div>
</div>
</section>
<footer class="kt-ai-wrap kt-ai-pagefoot">
<span>ҰБТ 2027 жыл | Айбек Бахытжанұлы</span>
<span class="kt-ai-spacer"></span>
<span>Сәттілік тілейміз!</span>
</footer>
<script>
const QUESTIONS = [
{ q: "VII ғасырдың соңынан бастап қарлұқтар қай мемлекеттің ықпалында болды?", options: ["Батыс Түрік қағанаты", "Шығыс Түрік қағанаты", "Түргеш қағанаты", "Ұйғыр қағанаты"], correct: 1 },
{ q: "Қарлұқтар мекендеген негізгі аймақты көрсетіңіз.", options: ["Алтай мен Балқаш көлі аралығы", "Еділ мен Жайық аралығы", "Арал мен Каспий аралығы", "Сырдария мен Әмудария аралығы"], correct: 0 },
{ q: "Ибн әл-Факих қарлұқтар туралы қандай пікір айтқан?", options: ["«Олар — көне оғыздар»", "«Олар — көне түркілер»", "«Олар — ежелгі арабтар»", "«Олар — қыпшақтар»"], correct: 1 },
{ q: "Ибн әл-Факих қарлұқтар туралы мәлімет қалдырған ғасыр:", options: ["VIII ғасыр", "IX ғасыр", "X ғасыр", "XI ғасыр"], correct: 2 },
{ q: "Біріккен ұйғыр және қарлұқ күштері қай билікті құлатты?", options: ["Түргештердің билігін", "Шығыс түркілердің билігін", "Саманилер билігін", "Қарахандықтардың билігін"], correct: 1 },
{ q: "Орталық Азияда 744–840 жылдары өмір сүрген мемлекет:", options: ["Түргеш қағанаты", "Қарлұқ қағанаты", "Ұйғыр қағанаты", "Қарахан мемлекеті"], correct: 2 },
{ q: "Ұйғыр тайпаларының билеушісі қандай лауазым иеленді?", options: ["Жабғу", "Шад", "Қаған", "Тархан"], correct: 2 },
{ q: "Ұйғыр қағанаты құрамында қарлұқтар көсемінің лауазымы:", options: ["Қаған", "Жабғу", "Елбасы", "Хан"], correct: 1 },
{ q: "Қарлұқтардың ұйғырларға қарсы дербестік үшін күресі немен аяқталды?", options: ["Қарлұқтардың жеңісімен", "Ұйғырлардың жеңілісімен", "Қарлұқтардың жеңілісімен", "Бейбіт келісіммен"], correct: 2 },
{ q: "Қарлұқтар батысқа қарай қай жылы қашты?", options: ["704 жылы", "716 жылы", "746 жылы", "756 жылы"], correct: 2 },
{ q: "746 жылы қарлұқтар қай бағытқа қоныс аударды?", options: ["Шығысқа", "Батысқа", "Солтүстікке", "Оңтүстікке"], correct: 1 },
{ q: "Жетісуға келген қарлұқтар қай тайпалардың қарсылығына кездесті?", options: ["Қыпшақтардың", "Наймандардың", "Оғыздардың", "Керейлердің"], correct: 2 },
{ q: "VIII ғасырдың ортасында қарлұқтар оғыздарды қай бағытқа ығыстырды?", options: ["Іле аңғарына", "Сырдарияның төменгі ағысына", "Ертістің жоғарғы ағысына", "Еділ бойына"], correct: 1 },
{ q: "756 жылы қарлұқтар қай тайпаны Жетісудан ығыстырды?", options: ["Оғыздарды", "Қимақтарды", "Түргештерді", "Қыпшақтарды"], correct: 2 },
{ q: "756 жылғы оқиғаның нәтижесі:", options: ["Қарлұқтар Жетісуда саяси үстемдік орнатты", "Түргештер қайта күшейді", "Ұйғыр қағанаты құрылды", "Саманилер Жетісуды басып алды"], correct: 0 },
{ q: "VIII–X ғасырларда қарлұқ тайпаларының қоныстанған аумағы:", options: ["Жоңғар Алатауынан Сырдарияға дейін", "Алтайдан Еділге дейін", "Каспийден Қара теңізге дейін", "Ертістен Оралға дейін"], correct: 0 },
{ q: "Қарлұқтардың жерін батыстан шығысқа дейін жүріп өтуге қанша уақыт қажет болған?", options: ["10 күн", "20 күн", "30 күн", "40 күн"], correct: 2 },
{ q: "Қарлұқтардың жетекші тайпасы:", options: ["Бұлақ", "Шігіл", "Яғма", "Қаңлы"], correct: 0 },
{ q: "«Худдуд әл-Алам» дерегінде қарлұқтар жерінде қанша қала мен қоныс болғаны көрсетіледі?", options: ["15", "20", "25", "30"], correct: 2 },
{ q: "840 жылы қарлұқтардың қолдауымен Ұйғыр қағанатын кімдер құлатты?", options: ["Саманилер", "Енисей қырғыздары", "Түргештер", "Оғыздар"], correct: 1 },
{ q: "840 жылы қарлұқ жабғуы қандай лауазымды иеленді?", options: ["Хан", "Шад", "Қаған", "Тархан"], correct: 2 },
{ q: "Ұйғырлар мен қарлұқтардың бақталастығы немен аяқталды?", options: ["Ұйғырлардың жеңісімен", "Қарлұқтардың жеңісімен", "Саманилердің жеңісімен", "Бітім жасалуымен"], correct: 1 },
{ q: "Қарлұқ кезеңінде Қазақстан аумағында қандай үрдіс белсенді жүрді?", options: ["Арабтандыру", "Моңғолдандыру", "Түркілендіру", "Парсыландыру"], correct: 2 },
{ q: "Қарлұқ кезеңіндегі түркілендіру үрдісі қай ғасырларды қамтыды?", options: ["VI–VII ғасырлар", "VII–VIII ғасырлар", "VIII–X ғасырлар", "X–XII ғасырлар"], correct: 2 },
{ q: "Арабтар үшін Жетісудың маңыздылығының негізгі себебі:", options: ["Тек әскери бекіністердің болуы", "Стратегиялық және сауда-экономикалық маңызы", "Мұнай кен орындарының болуы", "Егіншілік аймағы болуы"], correct: 1 },
{ q: "IX ғасырдың 20-жылдарында Орталық Азияда билікке келген әулет:", options: ["Қарахандықтар", "Саманилер", "Селжұқтар", "Аббасилер"], correct: 1 },
{ q: "840 жылы саманилер түркілерге қарсы қандай соғыс жариялады?", options: ["«Ұлы жорық»", "«Қасиетті соғыс»", "«Азаттық соғысы»", "«Шығыс жорығы»"], correct: 1 },
{ q: "840 жылы саманилер басып алған қала:", options: ["Тараз", "Баласағұн", "Испиджаб", "Суяб"], correct: 2 },
{ q: "Испиджабтың тарихи маңызы:", options: ["Қарлұқтардың астанасы болды", "Оңтүстік Қазақстанда исламды таратудың орталығына айналды", "Ұйғырлардың саяси орталығы болды", "Түргештердің әскери орталығы болды"], correct: 1 },
{ q: "IX ғасырдың соңында саманилер басып алған қала:", options: ["Тараз", "Суяб", "Баласағұн", "Қойлық"], correct: 0 },
{ q: "Саманилердің жорықтары Қарлұқ қағанатына қалай әсер етті?", options: ["Қағанатты күшейтті", "Қағанатты әлсіретті", "Жаңа астана салуға мүмкіндік берді", "Қарлұқтардың аумағын кеңейтті"], correct: 1 },
{ q: "Қарлұқ қағанатына Қашғар жағынан қауіп төнген кезең:", options: ["VIII ғасырдың басы", "VIII ғасырдың ортасы", "IX ғасырдың басы", "X ғасырдың бірінші жартысы"], correct: 3 },
{ q: "940 жылы Қашғар түркілері қай қаланы басып алды?", options: ["Таразды", "Испиджабты", "Баласағұнды", "Суябты"], correct: 2 },
{ q: "Қарлұқ қағанатының өмір сүруін тоқтатуына тікелей себеп болған оқиға:", options: ["Түргештердің қайта күшеюі", "Баласағұнның Қашғар түркілері тарапынан басып алынуы", "Оғыздардың Жетісуға қайта келуі", "Енисей қырғыздарының шабуылы"], correct: 1 },
{ q: "Қарлұқ дәуірінің сәулет өнеріне жататын Ақыртас ғимараты қай жерде орналасқан?", options: ["Түркістан облысында", "Жамбыл облысында", "Алматы облысында", "Қызылорда облысында"], correct: 1 }
];
let currentQuestion = 0;
let answers = {};
let quizStarted = false;
let timerInterval = null;
let seconds = 0;
let userName = '';
let answered = false;
let shuffledQuestions = [];
function shuffleArray(array) {
const shuffled = [...array];
for (let i = shuffled.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
}
return shuffled;
}
function checkLogin() {
const savedName = localStorage.getItem('ebtUserName');
if (savedName) {
userName = savedName;
document.getElementById('login-section').classList.add('hidden');
document.getElementById('welcome-section').classList.remove('hidden');
document.getElementById('user-display-name').textContent = userName;
document.getElementById('header-user-name').textContent = userName;
}
}
function showStartScreen() {
document.getElementById('quiz-section').classList.add('hidden');
document.getElementById('result-section').classList.add('hidden');
document.querySelector('.kt-ai-hero').classList.remove('hidden');
quizStarted = false;
stopTimer();
checkLogin();
}
function startTimer() {
seconds = 0;
timerInterval = setInterval(() => {
seconds++;
const mins = Math.floor(seconds / 60);
const secs = seconds % 60;
document.getElementById('timer-value').textContent =
(mins < 10 ? '0' : '') + mins + ':' + (secs < 10 ? '0' : '') + secs;
const badge = document.getElementById('timer');
if (seconds > 600) {
badge.className = 'timer-badge danger';
} else if (seconds > 300) {
badge.className = 'timer-badge warning';
}
}, 1000);
}
function stopTimer() {
if (timerInterval) {
clearInterval(timerInterval);
timerInterval = null;
}
document.getElementById('timer').className = 'timer-badge';
}
function startQuiz() {
const nameInput = document.getElementById('user-name');
if (nameInput && nameInput.value.trim()) {
userName = nameInput.value.trim();
localStorage.setItem('ebtUserName', userName);
document.getElementById('user-display-name').textContent = userName;
document.getElementById('header-user-name').textContent = userName;
}
if (!userName) {
alert('Аты-жөніңізді енгізіңіз!');
return;
}
document.querySelector('.kt-ai-hero').classList.add('hidden');
document.getElementById('result-section').classList.add('hidden');
document.getElementById('quiz-section').classList.remove('hidden');
quizStarted = true;
currentQuestion = 0;
answers = {};
seconds = 0;
shuffledQuestions = shuffleArray(QUESTIONS);
startTimer();
document.getElementById('q-total').textContent = shuffledQuestions.length;
showQuestion();
}
function showQuestion() {
const q = shuffledQuestions[currentQuestion];
document.getElementById('q-current').textContent = currentQuestion + 1;
document.getElementById('question-text').textContent = q.q;
const container = document.getElementById('options-container');
container.innerHTML = '';
const feedback = document.getElementById('answer-feedback');
feedback.className = 'answer-feedback hidden';
answered = answers[currentQuestion] !== undefined;
const letters = ['A', 'B', 'C', 'D'];
q.options.forEach((opt, i) => {
const btn = document.createElement('button');
btn.className = 'kt-ai-btn option-btn';
btn.setAttribute('data-selected', answers[currentQuestion] === i);
btn.innerHTML = `<span style="font-weight: bold; margin-right: 8px;">${letters[i]})</span> ${opt}`;
btn.onclick = () => selectAnswer(i);
if (answered) {
btn.disabled = true;
if (i === q.correct) {
btn.classList.add('correct');
} else if (answers[currentQuestion] === i && i !== q.correct) {
btn.classList.add('wrong');
}
} else {
if (answers[currentQuestion] === i) {
btn.style.borderColor = 'var(--kt-ai-primary)';
btn.style.background = 'var(--kt-ai-bg-soft)';
} else {
btn.style.borderColor = 'var(--kt-ai-border)';
btn.style.background = 'var(--kt-ai-card-bg)';
}
}
container.appendChild(btn);
});
if (answered) {
const isCorrect = answers[currentQuestion] === q.correct;
feedback.textContent = isCorrect ? '✅ Дұрыс!' : '❌ Қате! Дұрыс жауап: ' + letters[q.correct] + ') ' + q.options[q.correct];
feedback.className = 'answer-feedback ' + (isCorrect ? 'correct' : 'wrong');
feedback.classList.remove('hidden');
}
updateProgress();
updateButtons();
}
function selectAnswer(index) {
if (answered) return;
answers[currentQuestion] = index;
showQuestion();
}
function nextQuestion() {
if (currentQuestion < QUESTIONS.length - 1) {
currentQuestion++;
showQuestion();
} else {
showResults();
}
}
function prevQuestion() {
if (currentQuestion > 0) {
currentQuestion--;
answered = false;
showQuestion();
}
}
function updateProgress() {
const progress = ((currentQuestion + 1) / QUESTIONS.length) * 100;
document.getElementById('progress').style.width = progress + '%';
}
function updateButtons() {
document.getElementById('prev-btn').style.visibility = currentQuestion === 0 ? 'hidden' : 'visible';
const nextBtn = document.getElementById('next-btn');
nextBtn.textContent = currentQuestion === QUESTIONS.length - 1 ? 'Аяқтау' : 'Алға →';
}
function showResults() {
stopTimer();
let correct = 0;
let wrong = 0;
shuffledQuestions.forEach((q, i) => {
if (answers[i] === q.correct) {
correct++;
} else {
wrong++;
}
});
const percentage = Math.round((correct / shuffledQuestions.length) * 100);
document.getElementById('quiz-section').classList.add('hidden');
document.getElementById('result-section').classList.remove('hidden');
document.getElementById('correct-count').textContent = correct;
document.getElementById('wrong-count').textContent = wrong;
document.getElementById('percentage').textContent = percentage + '%';
document.getElementById('score').textContent = `${correct} / ${QUESTIONS.length}`;
let message = '';
if (percentage >= 90) message = 'Өте жақсы! ҰБТ-ға дайынсың 🎉';
else if (percentage >= 70) message = 'Жақсы нәтиже! 👍';
else if (percentage >= 50) message = 'Жаман емес, бірақ жақсартуға болады 👌';
else message = 'Әлі де дайындалу керек 📚';
document.getElementById('score-message').textContent = message + ' | Уақыт: ' + document.getElementById('timer-value').textContent;
}
document.addEventListener('keydown', (e) => {
if (!quizStarted) return;
if (e.key === 'ArrowRight' || e.key === ' ') nextQuestion();
if (e.key === 'ArrowLeft') prevQuestion();
});
checkLogin();
</script>
</body>
</html>