From 7352cc04e5b8d7492969762c5389177ed50edb66 Mon Sep 17 00:00:00 2001 From: ai6s2 Date: Tue, 16 Dec 2025 07:20:26 +0000 Subject: [PATCH] Initial commit --- .DS_Store | Bin 0 -> 6148 bytes AI-Powered Joke Bot _ Student Thesis.html | 1017 +++++++++++++++ .../css2 | 315 +++++ ... Telegram Joke Bot_ A Student Project.html | 257 ++++ ...a Telegram Joke Bot_ A Student Project.pdf | Bin 0 -> 229447 bytes android_game.py | 21 + quiz_game/From_concept_to_release.html | 535 ++++++++ quiz_game/PULL_REQUEST_TEMPLATE.md | 44 + ..._Game_Project-Student Learning_Portal.html | 1098 +++++++++++++++++ quiz_game/README.md | 13 + ...ionaire_Quiz_Game_Comprehensive_Guide.html | 876 +++++++++++++ quiz_game/__pycache__/app.cpython-313.pyc | Bin 0 -> 5467 bytes quiz_game/app.py | 151 +++ quiz_game/docs/.DS_Store | Bin 0 -> 6148 bytes quiz_game/docs/README.md | 19 + .../docs/roles/backend-developer-dima.md | 185 +++ .../docs/roles/database-designer-danil.md | 100 ++ .../docs/roles/frontend-developer-inna.md | 225 ++++ .../docs/roles/graphics-designer-artyom.md | 319 +++++ .../technical-specs/teacher-project-guide.md | 262 ++++ quiz_game/gitea passwords.rtf | 36 + quiz_game/questions.json | 27 + quiz_game/requirements.txt | 2 + quiz_game/starter_templates/app.py | 5 + quiz_game/starter_templates/docs/README.md | 5 + .../docs/roles/backend-developer-dima.md | 55 + .../docs/roles/database-designer-danil.md | 45 + .../docs/roles/frontend-developer-inna.md | 46 + quiz_game/starter_templates/static/script.js | 5 + quiz_game/starter_templates/static/style.css | 6 + .../starter_templates/templates/game.html | 5 + .../starter_templates/templates/index.html | 5 + quiz_game/static/script.js | 149 +++ quiz_game/static/style.css | 109 ++ quiz_game/templates/game.html | 37 + quiz_game/templates/index.html | 23 + 36 files changed, 5997 insertions(+) create mode 100644 .DS_Store create mode 100644 AI-Powered Joke Bot _ Student Thesis.html create mode 100644 AI-Powered Joke Bot _ Student Thesis_files/css2 create mode 100644 Thesis_AI6_Building a Telegram Joke Bot_ A Student Project.html create mode 100644 Thesis_AI6_Building a Telegram Joke Bot_ A Student Project.pdf create mode 100644 android_game.py create mode 100644 quiz_game/From_concept_to_release.html create mode 100644 quiz_game/PULL_REQUEST_TEMPLATE.md create mode 100644 quiz_game/Quiz_Game_Project-Student Learning_Portal.html create mode 100644 quiz_game/README.md create mode 100644 quiz_game/Russian_Millionaire_Quiz_Game_Comprehensive_Guide.html create mode 100644 quiz_game/__pycache__/app.cpython-313.pyc create mode 100644 quiz_game/app.py create mode 100644 quiz_game/docs/.DS_Store create mode 100644 quiz_game/docs/README.md create mode 100644 quiz_game/docs/roles/backend-developer-dima.md create mode 100644 quiz_game/docs/roles/database-designer-danil.md create mode 100644 quiz_game/docs/roles/frontend-developer-inna.md create mode 100644 quiz_game/docs/roles/graphics-designer-artyom.md create mode 100644 quiz_game/docs/technical-specs/teacher-project-guide.md create mode 100644 quiz_game/gitea passwords.rtf create mode 100644 quiz_game/questions.json create mode 100644 quiz_game/requirements.txt create mode 100644 quiz_game/starter_templates/app.py create mode 100644 quiz_game/starter_templates/docs/README.md create mode 100644 quiz_game/starter_templates/docs/roles/backend-developer-dima.md create mode 100644 quiz_game/starter_templates/docs/roles/database-designer-danil.md create mode 100644 quiz_game/starter_templates/docs/roles/frontend-developer-inna.md create mode 100644 quiz_game/starter_templates/static/script.js create mode 100644 quiz_game/starter_templates/static/style.css create mode 100644 quiz_game/starter_templates/templates/game.html create mode 100644 quiz_game/starter_templates/templates/index.html create mode 100644 quiz_game/static/script.js create mode 100644 quiz_game/static/style.css create mode 100644 quiz_game/templates/game.html create mode 100644 quiz_game/templates/index.html diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..6d4577ec8f420c9d8dce7811b9c28989c2010248 GIT binary patch literal 6148 zcmeHKJx{|>3_L@JN-P~2-;Bh-KL}A7%7j$*B1jPx5s_#s)@=N3&L1G6l$8N&$v)e$ z-&1agV*pa`n+sqDU`kcQyPC1+bJdX?MMj8Jp3&hAYrImMQT5@3_MYJq3!LL-&|h%P z_?c%F)bw`56?I8(&-2%KvD_`5=x?#1uJA}~HEy;K?S0p^hp)|SGLQ@;1Ia)#@NXH= z*-M$8IHpYol7VF4ivj&U6slqs*gM*%gT__>;)H1v`nF3DizbLwVDHEbMZA^htr9DS zcsuhY>Z-ur(c2-hd`R3Zv7w0F&hv|vLn_C#$v`qNWZ>Atna=+!>JR(>uqmTtAQ|{m z49H}@oY#D%n60Ci(^*@nchpZ|t(DW*C??t{W}u_^^jlp~pU + + + + + AI-Powered Joke Bot | Student Thesis + + + + +
+ +
+
+
+

AI-Powered Joke Bot

+

Bringing Humor to Digital Conversations

+
+ +
+
+ Student Thesis Project +
+ +
+ Supervisor: Dr. Johnson +
+ +
+ Student Developer: [Your Name] +
+ +
+ Academic Year 2025-2026 +
+
+
+
+ + +
+
+

Project Overview

+

An intelligent bot that understands and generates humor

+
+ +
+

Project Description

+

An AI-powered bot that generates, categorizes, and delivers jokes based on user preferences, mood, and context. Designed to bring lightheartedness to digital interactions and demonstrate natural language understanding capabilities.

+ +
+

Thesis Focus: Exploring how AI can understand and generate humor while maintaining appropriateness and cultural sensitivity.

+
+
+ +

Key Features

+ +
+
+
1
+
+ Context-Aware Humor - Generates jokes based on user preferences, time of day, and conversation context +
+
+ +
+
2
+
+ Multiple Categories - Supports various joke types including puns, one-liners, knock-knock jokes, and dad jokes +
+
+ +
+
3
+
+ Learning System - Adapts to user preferences by tracking which jokes get the best reactions +
+
+
+
+ + +
+

How Users Interact

+

Simple commands for instant humor

+ +

Basic Commands

+

Users can request jokes using intuitive commands and natural language.

+ +
+

Example 1: Random joke

+
+ User: /joke
+ Bot: "Why don't scientists trust atoms? Because they make up everything!" +
+ +

Example 2: Category-specific

+
+ User: /pun
+ Bot: "I told my computer I needed a break... now it won't stop sending me Kit-Kat ads." +
+ +

Example 3: Mood-based

+
+ User: I need a pick-me-up
+ Bot: "Here's something light: What do you call fake spaghetti? An impasta!" +
+
+ +
+

Joke Generation Example

+
+ "Why did the AI cross the road?" +
+
+ "To optimize the chicken's pathfinding algorithm!" +
+
+
+ + +
+

Joke Categories & Types

+

Diverse humor for different tastes

+ +

Supported Categories

+ +
+
+
๐Ÿ˜„
+
One-Liners
+
+ +
+
๐Ÿ‘จโ€๐Ÿ‘ง
+
Dad Jokes
+
+ +
+
๐Ÿ””
+
Knock-Knock
+
+ +
+
๐Ÿ“š
+
Puns
+
+ +
+
๐Ÿค–
+
Tech Humor
+
+ +
+
๐ŸŽ“
+
Academic
+
+
+ +

Context Awareness

+

The bot considers:

+
    +
  • Time of day (morning vs. evening jokes)
  • +
  • User's previous reactions
  • +
  • Cultural appropriateness
  • +
  • Current events (when relevant)
  • +
  • User's stated mood or preference
  • +
+
+ + +
+

Technology Stack

+

Modern AI and development tools

+ +
+

Core Technologies

+ +
+
๐Ÿค–
+
+ Natural Language Processing + GPT-based models for understanding context and generating appropriate humor +
+
+ +
+
๐Ÿ’ฌ
+
+ Telegram Bot API + Platform for deployment and user interaction +
+
+ +
+
๐Ÿ—„๏ธ
+
+ Database + Storing joke collections, user preferences, and interaction history +
+
+ +
+
โš™๏ธ
+
+ Python Backend + FastAPI or Django for bot logic and API management +
+
+
+ +

AI Components

+
    +
  • Sentiment analysis for mood detection
  • +
  • Context understanding from conversation history
  • +
  • Joke appropriateness filtering
  • +
  • Personalized recommendation algorithms
  • +
  • Feedback learning system
  • +
+
+ + +
+

Research & Evaluation

+

Measuring humor effectiveness and AI capabilities

+ +

Research Questions

+
+

1. Can AI consistently generate humor that humans find funny?

+

2. How does contextual awareness affect joke reception?

+

3. What metrics best measure "successful" AI-generated humor?

+
+ +

Evaluation Methods

+
    +
  • User satisfaction surveys (1-5 ratings)
  • +
  • Laughter/amusement detection in follow-up messages
  • +
  • A/B testing different joke generation approaches
  • +
  • Long-term engagement tracking
  • +
  • Cultural appropriateness assessments
  • +
+ +

Expected Contributions

+
+

To AI Research: Insights into humor generation and natural language understanding.

+

To Practical Applications: A framework for creating engaging, personality-driven chatbots.

+

To Human-Computer Interaction: Understanding how humor affects user engagement.

+
+
+ + +
+
+

Future Possibilities

+

Expanding the bot's capabilities and applications

+
+ +
+

Expansion Opportunities

+ +
+
๐ŸŒ
+
+ Multilingual Support + Generate and understand jokes in multiple languages +
+
+ +
+
๐ŸŽญ
+
+ Personality Customization + Allow users to select joke styles (sarcastic, wholesome, witty, etc.) +
+
+ +
+
๐Ÿ“Š
+
+ Joke Analytics + Track which jokes perform best and identify humor patterns +
+
+ +
+
๐Ÿค
+
+ Collaborative Joke Creation + Allow users to co-create jokes with the AI +
+
+ +
+
๐ŸŽฎ
+
+ Gamification + Add joke-telling games and humor challenges +
+
+ +
+
๐ŸŽจ
+
+ Visual Humor + Generate memes and visual jokes using image generation AI +
+
+
+ +
+

Academic Value: This project contributes to understanding AI's creative capabilities and human-AI interaction dynamics.

+

Practical Applications: Beyond entertainment, humor-generation AI has applications in mental health, education, and customer service.

+
+
+ + + +
+ + + + \ No newline at end of file diff --git a/AI-Powered Joke Bot _ Student Thesis_files/css2 b/AI-Powered Joke Bot _ Student Thesis_files/css2 new file mode 100644 index 0000000..d3daecf --- /dev/null +++ b/AI-Powered Joke Bot _ Student Thesis_files/css2 @@ -0,0 +1,315 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7W0Q5n-wU.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/Thesis_AI6_Building a Telegram Joke Bot_ A Student Project.html b/Thesis_AI6_Building a Telegram Joke Bot_ A Student Project.html new file mode 100644 index 0000000..78ee197 --- /dev/null +++ b/Thesis_AI6_Building a Telegram Joke Bot_ A Student Project.html @@ -0,0 +1,257 @@ + + + + + + Building a Telegram Joke Bot: A Student Project + + + +
+

Building a Telegram Joke Bot: A Student Project

+ +
+
Supervisor: Bob Santos
+
+ Developers: ะ”ะฐัˆัƒะฝะธะฝ ะ”ะผะธั‚ั€ะธะน, ะ•ั€ะพั…ะธะฝ ะ”ะฐะฝะธะธะป, ะžะฒะณะฐะฝะพะฒะฐ ะ˜ะฝะฝะฐ, ะŸะพะปะบะพะฒะฝะธะบะพะฒ ะั€ั‚ั‘ะผ +
+
+ +

Introduction

+

A group of students created a Telegram joke bot as a school project. A Telegram bot is a small computer program that can send and receive messages automatically. This particular bot tells jokes to people who message it. The students wanted to make something fun that could bring smiles to people's faces while learning about computer programming.

+ +

Aim

+

The goal of this project was to create a simple, working bot that could:

+
    +
  • Respond to basic commands from users
  • +
  • Tell different jokes at random
  • +
  • Stay online and working all the time
  • +
  • Show how even beginners can create useful programs
  • +
+ +

Method

+

The students used these steps to build their bot:

+
    +
  1. Choose Python: They picked Python because it's a beginner-friendly programming language.
  2. +
  3. Use Telegram's Tools: They connected to Telegram's Bot API, which lets programs send and receive messages.
  4. +
  5. Write the Code: They wrote about 30 lines of code that make the bot work.
  6. +
  7. Add Jokes: They created a list of three funny jokes for the bot to tell.
  8. +
  9. Test the Bot: They tested the bot to make sure it worked correctly.
  10. +
+ +

Results

+

The students successfully created a working Telegram bot with these features:

+
    +
  • /start command: When users type /start, the bot greets them and explains how to get jokes.
  • +
  • /joke command: When users type /joke, the bot randomly picks and tells one of its jokes.
  • +
  • Three different jokes: The bot can tell jokes about robots, lettuce, and eggs.
  • +
  • Always available: Once started, the bot runs continuously until stopped.
  • +
+ +

Conclusion

+

The students learned that creating technology doesn't have to be complicated. With just basic programming skills, they built a bot that can make people happy. This project showed them that coding is not just about math and logicโ€”it's also a creative tool. They proved that even simple programs can have real value and bring joy to people.

+ +

Future Possibilities

+

This bot could be improved in many ways:

+
    +
  • Let users submit their own jokes
  • +
  • Allow users to vote for their favorite jokes
  • +
  • Send jokes at scheduled times each day
  • +
  • Connect to online joke databases for more variety
  • +
  • Add voice messages that tell jokes out loud
  • +
  • Tell different types of jokes based on user preferences
  • +
+ +
+

Addendum: Complete Bot Code

+

Here is the complete Python code for the Telegram joke bot:

+ +
+ Note: For security reasons, the actual bot token has been removed. When using this code, you should replace "YOUR_BOT_TOKEN_HERE" with your actual bot token from @BotFather. +
+ +
from telegram import Update +from telegram.ext import Application, CommandHandler, ContextTypes +import random + +JOKE_LIST = [ + "Why did the robot go to school? To recharge his brain! ๐Ÿ”‹", + "Knock knock!\nWho's there?\nLettuce!\nLettuce who?\nLettuce in!", + "Why don't eggs tell jokes? They'd crack each other up! ๐Ÿฅš" +] + +async def start(update: Update, context: ContextTypes.DEFAULT_TYPE): + await update.message.reply_text("Hi! Type /joke for a funny joke! ๐Ÿ˜„") + +async def send_joke(update: Update, context: ContextTypes.DEFAULT_TYPE): + joke = random.choice(JOKE_LIST) + await update.message.reply_text(joke) + +def main(): + # ๐Ÿ”‘ REPLACE THIS with your bot token from @BotFather + BOT_TOKEN = "YOUR_BOT_TOKEN_HERE" + + app = Application.builder().token(BOT_TOKEN).build() + app.add_handler(CommandHandler("start", start)) + app.add_handler(CommandHandler("joke", send_joke)) + print("Bot is running... Press Ctrl+C to stop.") + app.run_polling() + +if __name__ == "__main__": + main()
+ +

The code is organized in a simple way:

+
    +
  1. It imports necessary tools (like the Telegram library and random number generator)
  2. +
  3. It creates a list of jokes
  4. +
  5. It makes two functions: one for the /start command and one for the /joke command
  6. +
  7. It connects to Telegram using a special bot token
  8. +
  9. It starts the bot and keeps it running
  10. +
+
+
+ + \ No newline at end of file diff --git a/Thesis_AI6_Building a Telegram Joke Bot_ A Student Project.pdf b/Thesis_AI6_Building a Telegram Joke Bot_ A Student Project.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dc24e32e5e4e07eac966e3be5aa5f9ba54b50807 GIT binary patch literal 229447 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�BRDSz*+N}JZK?Qa&J=jBK4FMDfD4f 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

|vs-$zx_e_q#ma7pGQp)q2;5wn@VGysGa) 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 z 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 AP5=M^ literal 0 HcmV?d00001 diff --git a/android_game.py b/android_game.py new file mode 100644 index 0000000..b6ac2d6 --- /dev/null +++ b/android_game.py @@ -0,0 +1,21 @@ +# asteroid_game.py - Starter Template +import turtle +import random + +# === SETUP THE GAME WINDOW === + + +# === CREATE PLAYER === + + +# === GAME VARIABLES === + + +# === FUNCTIONS === + + +# === TEST CODE === +# Uncomment this to test: +# draw_player() +# screen.update() +# turtle.done() \ No newline at end of file diff --git a/quiz_game/From_concept_to_release.html b/quiz_game/From_concept_to_release.html new file mode 100644 index 0000000..3114344 --- /dev/null +++ b/quiz_game/From_concept_to_release.html @@ -0,0 +1,535 @@ + + + + + + Build a Russian Millionaire Quiz Game! + + + +

+
+

Build a Russian Millionaire Quiz Game!

+

From Concept to Release in 30 Minutes

+
+ +
+
+
+ + +
+

Welcome, Future Game Developers!

+
+

Today we're going to create our very own "Who Wants to Be a Millionaire" style quiz game with a Russian twist!

+

We'll use Python Flask for the website and DeepSeek AI to help with our questions.

+

By the end of this class, you'll understand how games are made from start to finish!

+ +
+
+
What is the capital of Russia?
+
A. St. Petersburg
+
B. Moscow
+
C. Kazan
+
D. Sochi
+
+
+ +

Let's get started on our game development journey!

+
+ +
+ + +
+
Slide 1 of 8
+
+ + +
+

Stage 1: Concept & Research

+
+

Every great game starts with an idea! Our concept is:

+

"A 'Who Wants to Be a Millionaire' style quiz about Russian culture, history, and fun facts!"

+ +

Our research tasks:

+
    +
  • Learn about the original Millionaire game format
  • +
  • Research interesting Russian trivia
  • +
  • Study how Flask websites work
  • +
  • Explore how AI can help create questions
  • +
+ +
+
Research Specialist
+
This person will find fun Russian facts and help create our question database.
+
+ +

Who wants to be our Research Specialist?

+
+ +
+ + +
+
Slide 2 of 8
+
+ + +
+

Stage 2: User Stories

+
+

User stories help us understand what our players will do in the game:

+ +
    +
  • "As a player, I want to see multiple choice questions"
  • +
  • "As a player, I want lifelines like 50:50 and Ask the Audience"
  • +
  • "As a player, I want to see my score increase as I answer correctly"
  • +
  • "As a player, I want fun Russian-themed graphics and sounds"
  • +
+ +

These stories help us plan what features to build!

+ +
+
+
Which Russian composer wrote 'Swan Lake'?
+
A. Tchaikovsky
+
B. Rachmaninoff
+
C. Shostakovich
+
D. Stravinsky
+
+ Lifelines: 50:50 | Ask AI | Phone a Friend +
+
+
+
+ +
+ + +
+
Slide 3 of 8
+
+ + +
+

Stage 3: Task Allocation

+
+

Now let's divide the work! We have 4 important roles:

+ +
+
Backend Developer
+
Creates the game logic using Python Flask and connects to the DeepSeek API.
+
+ +
+
Database Designer
+
Builds the question database using JSON and works with the Research Specialist.
+
+ +
+
Frontend Developer
+
Designs the game screens using HTML, CSS, and JavaScript.
+
+ +
+
Graphics & Sound Artist
+
Creates Russian-themed visuals, icons, and sound effects for the game.
+
+ +

Which role sounds most interesting to you?

+
+ +
+ + +
+
Slide 4 of 8
+
+ + +
+

Stage 4: Alpha Development

+
+

In the Alpha stage, we build the basic version of our game:

+ +
    +
  • Backend Developer: Sets up Flask server and basic game routes
  • +
  • Database Designer: Creates JSON file with first 5 Russian trivia questions
  • +
  • Frontend Developer: Builds the question screen with 4 answer options
  • +
  • Graphics Artist: Creates simple Russian-themed background and buttons
  • +
+ +

Our Alpha version will have:

+
    +
  • Basic question display
  • +
  • Answer selection
  • +
  • Simple scoring
  • +
  • Russian color theme (white, blue, red)
  • +
+ +

Let's build our foundation!

+
+ +
+ + +
+
Slide 5 of 8
+
+ + +
+

Stage 5: Beta Development

+
+

In the Beta stage, we add more features and polish:

+ +
    +
  • Backend Developer: Implements lifelines and connects to DeepSeek API
  • +
  • Database Designer: Expands to 15 questions with difficulty levels
  • +
  • Frontend Developer: Adds lifeline buttons and score display
  • +
  • Graphics Artist: Creates matryoshka doll icons and Russian landmark images
  • +
+ +

Our Beta version will have:

+
    +
  • All 15 questions with increasing difficulty
  • +
  • 50:50 and "Ask AI" lifelines
  • +
  • Better visuals with Russian themes
  • +
  • Sound effects for correct/incorrect answers
  • +
+ +
+
+
What is the traditional Russian doll called?
+
A. Babushka
+
B. Matryoshka
+
C. Krasnaya
+
D. Kukla
+
+ Score: 1,000 RUB | Lifelines: 50:50 | Ask AI | +
+
+
+
+ +
+ + +
+
Slide 6 of 8
+
+ + +
+

Stage 6: Production & Testing

+
+

Time to test our game and fix any issues!

+ +

Testing tasks:

+
    +
  • Play the game multiple times to find bugs
  • +
  • Check if all questions display correctly
  • +
  • Test the lifelines - do they work properly?
  • +
  • Make sure the scoring system is accurate
  • +
  • Verify the AI integration gives helpful hints
  • +
+ +

After testing, we'll:

+
    +
  • Fix any problems we find
  • +
  • Add final polish to graphics and sounds
  • +
  • Prepare for our game launch!
  • +
+ +

Who wants to be our Chief Tester?

+
+ +
+ + +
+
Slide 7 of 8
+
+ + +
+

Stage 7: Release & Celebration!

+
+

Congratulations! Our Russian Millionaire Quiz Game is ready!

+ +

What we've accomplished:

+
    +
  • Created a working quiz game with 15 Russian trivia questions
  • +
  • Built a Flask website with game logic
  • +
  • Integrated DeepSeek AI for lifelines
  • +
  • Designed Russian-themed graphics and sounds
  • +
  • Tested and polished our game
  • +
+ +

Now it's time to:

+
    +
  • Share our game with friends and family
  • +
  • Celebrate our success!
  • +
  • Think about what game we want to make next
  • +
+ +
+
+
YOU WIN!
+
1,000,000 RUB
+
Congratulations, Millionaire!
+
+
+ +

Great job, game developers! You've successfully created your first AI-powered quiz game!

+
+ +
+ + +
+
Slide 8 of 8
+
+
+ + + + \ No newline at end of file diff --git a/quiz_game/PULL_REQUEST_TEMPLATE.md b/quiz_game/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..103e59d --- /dev/null +++ b/quiz_game/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,44 @@ +## Student Submission + +**Name:** +**Role:** [Backend/Frontend/Database/Graphics] +**Lesson:** [1/2/3] + +## Changes Made + +### Role-Specific Checklist: + +#### Backend Developer (Dima) +- [ ] Prize structure implemented (15 levels) +- [ ] Game session management +- [ ] Answer validation logic +- [ ] Lifeline functionality (50:50, Phone Friend) +- [ ] All routes working + +#### Frontend Developer (Inna) +- [ ] Question display working +- [ ] Answer selection handling +- [ ] Prize ladder updates +- [ ] Lifeline buttons functional +- [ ] Game flow complete + +#### Database Designer (Danil) +- [ ] 150 Russian culture questions +- [ ] Increasing difficulty progression +- [ ] Plausible wrong answers +- [ ] Categories: history, geography, culture, entertainment + +#### Graphics Artist (Artyom) +- [ ] Russian color theme applied +- [ ] Enhanced styling from basic template +- [ ] Visual improvements +- [ ] Visual assets including logo +- [ ] Audio assets including sound effects +- [ ] Consistent design + +## Testing Performed +- [ ] My component works independently +- [ ] No errors in console +- [ ] Responsive design checked + +## Questions/Blockers \ No newline at end of file diff --git a/quiz_game/Quiz_Game_Project-Student Learning_Portal.html b/quiz_game/Quiz_Game_Project-Student Learning_Portal.html new file mode 100644 index 0000000..325d8b8 --- /dev/null +++ b/quiz_game/Quiz_Game_Project-Student Learning_Portal.html @@ -0,0 +1,1098 @@ + + + + + + Russian Millionaire Quiz Game - Student Portal + + + +
+ +
+ +
+
+
+
๐Ÿ“‹
+

Project Overview

+

Understand the complete project structure and goals

+ +
+ +
+
โš™๏ธ
+

Backend Developer

+

Dima - Game logic, sessions, and prize system

+ +
+ +
+
๐Ÿ—ƒ๏ธ
+

Database Manager

+

Danil - Questions and answers in JSON format

+ +
+ +
+
๐ŸŽจ
+

Frontend Developer

+

Inna - User interface and game interaction

+ +
+ +
+
๐ŸŽจ
+

Graphics Designer

+

Artyom - Styling and Russian visual theme

+ +
+
+ + +
+
+

Project Overview & Structure

+ +
+ +
+

What We're Building

+

We're creating a "Who Wants to Be a Millionaire?" style quiz game with a Russian cultural theme. Players answer increasingly difficult questions to win virtual prize money.

+ +
+

Project File Structure:

+
russian-millionaire/
+
app.py (Main application file)
+
questions.json (All quiz questions)
+
templates/
+
index.html (Home page)
+
game.html (Game screen)
+
static/
+
style.css (All styling)
+
script.js (Game interaction)
+
+
+ +
+

How Flask Works

+

Flask is a web framework that lets us create web applications with Python. Think of it as a restaurant:

+ +
+

app.py = The restaurant kitchen (prepares everything)

+

Routes = The menu (different pages/actions)

+

Templates = The dining area (what customers see)

+

Static files = Decorations and utensils (CSS, JavaScript, images)

+
+ +

When a user visits our website, Flask serves the appropriate template and handles any requests, like when a player answers a question.

+
+ +
+

Development Workflow

+

We'll follow this process over 6 lessons:

+ +
+

Lessons 1-2: Setup & foundation - Get basic structure working

+

Lessons 3-4: Core development - Implement main features

+

Lessons 5-6: Completion & testing - Polish and fix issues

+
+ +

Each student has a specific role, but we'll integrate all our work at the end to create a complete, functional game!

+
+
+ + +
+
+

Backend Developer - Dima

+ +
+ +
+

Step 1: Prize System Setup

+

First, let's set up the prize money levels. Players earn more money for each correct answer.

+ +
+ +
# 1. This file should contain the game logic for the quiz game
+# TODO: Import Flask and setup the app
+# TODO: Define prize levels and guaranteed levels
+# TODO: Setup game session routes
+# TODO: Implement question serving functionality
+# TODO: Add lifeline functionality
+
+ +
+

What this does: Creates a list of prize amounts that players can win. Each number represents the prize for answering that question correctly. The amounts increase as questions get harder.

+

GUARANTEED_LEVELS: These are safety nets - if a player gets a question wrong after one of these levels, they still win the prize from that level.

+
+
+ +
+

Step 2: Game Session Setup

+

We need to track each player's game session - what question they're on, their prize money, etc.

+ +
+ +
from flask import Flask, session, redirect, url_for
+
+app = Flask(__name__)
+app.secret_key = 'your_secret_key_here'  # Needed for sessions
+
+@app.route('/start')
+def start_game():
+    # Initialize a new game session
+    session['current_question'] = 0
+    session['score'] = 0
+    session['lifelines'] = ['fifty_fifty']  # Only one lifeline implemented
+    return redirect(url_for('game_screen'))
+
+ +
+

What this does: Creates a "/start" route that begins a new game. It resets the player's progress to zero and gives them one lifeline: fifty_fifty.

+

Session: Like a digital backpack that remembers your game progress as you play.

+

Routes: Different web addresses that do different things in our app.

+

Note: Although the original plan included multiple lifelines, the current implementation only includes the fifty_fifty lifeline for simplicity.

+
+
+ +
+

Step 3: Question Serving

+

We need to send questions to the player one by one as they progress.

+ +
+ +
# 2. This file should contain the database connection and data handling
+# TODO: Load questions from JSON file
+# TODO: Implement answer checking functionality
+# TODO: Handle lifeline requests
+# TODO: Manage game state and sessions
+
+ +
+

What this does: Reads the questions from the JSON file and sends the appropriate question based on how far the player has progressed.

+

JSON: A file format that stores data in an organized way, like a digital filing cabinet.

+

Session.get(): Safely checks what question the player is currently on.

+
+
+ +
+

Pro Tip: Test your backend by running python app.py and visiting http://localhost:5000/start in your browser!

+
+
+ + +
+
+

Database Manager - Danil

+ +
+ +
+

Step 1: Understanding JSON Structure

+

Our "database" is a JSON file that stores all the quiz questions, options, and correct answers.

+ +
+ +
// 1. This file should contain the basic structure of the game page
+// TODO: Create the main game container
+// TODO: Add elements for displaying questions and answers
+// TODO: Include buttons for lifelines
+// TODO: Add a game over screen
+// TODO: Link to CSS and JavaScript files
+
+ +
+

What this does: Creates a list of question objects. Each question has:

+
    +
  • question: The actual question text
  • +
  • options: List of 4 possible answers
  • +
  • correct_answer: The index (0-3) of the right answer
  • +
+

Important: The correct_answer uses 0-based indexing, so 0 = first option, 1 = second option, etc.

+
+
+ +
+

Step 2: Creating Russian Culture Questions

+

Create questions about Russian history, culture, geography, and famous people.

+ +
+ +
{
+  "question": "What is the name of the famous Russian ballet company?",
+  "options": [
+    "Moscow Dance Theater",
+    "St. Petersburg Ballet",
+    "Bolshoi Ballet", 
+    "Russian National Ballet"
+  ],
+  "correct_answer": 2
+},
+
+{
+  "question": "Which Russian ruler was known as 'The Great' and modernized Russia?",
+  "options": [
+    "Ivan the Terrible",
+    "Catherine the Great", 
+    "Peter the Great",
+    "Alexander II"
+  ],
+  "correct_answer": 2
+},
+
+{
+  "question": "What is the traditional Russian soup made with beets?",
+  "options": [
+    "Shchi",
+    "Borscht",
+    "Solyanka", 
+    "Ukha"
+  ],
+  "correct_answer": 1
+}
+
+ +
+

What this does: Adds culturally relevant questions to our game. Make sure:

+
    +
  • Questions get progressively harder
  • +
  • Wrong answers are plausible (sound like they could be right)
  • +
  • Answers are factually accurate
  • +
+
+
+ +
+

Step 3: Complete Question Set

+

We need 15 questions total, with increasing difficulty.

+ +
+ +
// Example of a harder question for later in the game
+{
+  "question": "In which year did the Soviet Union dissolve?",
+  "options": [
+    "1989",
+    "1991", 
+    "1993",
+    "1985"
+  ],
+  "correct_answer": 1
+},
+
+{
+  "question": "What is the name of the Russian equivalent of NASA?",
+  "options": [
+    "Russian Space Agency",
+    "Soviet Space Program", 
+    "Roscosmos",
+    "Kosmonavtika"
+  ],
+  "correct_answer": 2
+}
+
+ +
+

What this does: Adds more challenging questions for the higher prize levels. These should require more specific knowledge.

+

Tip: Use a mix of history, geography, culture, science, and arts questions to make the game interesting!

+
+
+ +
+

Pro Tip: Validate your JSON at jsonlint.com to catch any syntax errors!

+
+
+ + +
+
+

Frontend Developer - Inna

+ +
+ +
+

Step 1: Basic Game HTML Structure

+

Create the main game screen where questions will be displayed.

+ +
+ +
<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Russian Quiz - Game</title>
+    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
+</head>
+<body>
+    <div class="container">
+        <h1>Russian Quiz</h1>
+        <div class="score">Prize: <span id="prize">0</span> โ‚ฝ</div>
+        
+        <div class="question-box">
+            <div class="question-number">Question <span id="q-number">1</span>/5</div>
+            <div class="question" id="question-text">Loading...</div>
+            
+            <div class="options" id="options">
+                <!-- Options go here -->
+            </div>
+            
+            <div class="result" id="result"></div>
+        </div>
+
+        <button class="lifeline" onclick="useFiftyFifty()">50:50 Lifeline</button>
+        
+        <div class="game-over" id="game-over" style="display: none;">
+            <h2>Game Over!</h2>
+            <p>You won: <span id="final-prize">0</span> โ‚ฝ</p>
+            <button onclick="restartGame()">Play Again</button>
+        </div>
+    </div>
+
+    <script src="{{ url_for('static', filename='script.js') }}"></script>
+</body>
+</html>
+
+ +
+

What this does: Creates the basic structure of our game page with:

+
    +
  • A header with the game title and prize display
  • +
  • A container for the question and answer options
  • +
  • A button for the 50:50 lifeline
  • +
  • A game over screen that appears when the game ends
  • +
+

URL_FOR: A Flask function that creates the correct path to our CSS and JavaScript files.

+
+
+ +
+

Step 2: Utility Functions for DRY Code

+

Create utility functions to avoid repeating code and make our application more maintainable.

+ +
+ +
// Utility function for making API requests
+function apiRequest(url, options = {}) {
+    return fetch(url, options)
+        .then(response => response.json())
+        .catch(error => {
+            console.error('Error:', error);
+            throw error;
+        });
+}
+
+// Utility function for updating element text content
+function updateElementText(id, text) {
+    const element = document.getElementById(id);
+    if (element) {
+        element.textContent = text;
+    }
+}
+
+// Utility function for showing/hiding elements
+function toggleElementVisibility(id, show = true) {
+    const element = document.getElementById(id);
+    if (element) {
+        element.style.display = show ? 'block' : 'none';
+    }
+}
+
+ +
+

What this does: These utility functions follow the DRY (Don't Repeat Yourself) principle:

+
    +
  • apiRequest(): Handles all API calls with consistent error handling
  • +
  • updateElementText(): Simplifies updating text content of elements
  • +
  • toggleElementVisibility(): Standardizes showing/hiding elements
  • +
+

DRY Principle: Writing code once and reusing it makes applications easier to maintain and less error-prone.

+
+
+ +
+

Step 3: JavaScript - Loading Questions

+

Use JavaScript to fetch questions from the backend and display them.

+ +
+ +
let currentQuestion = null;
+
+function loadQuestion() {
+    apiRequest('/get_question')
+        .then(data => {
+            if (data.game_over) {
+                endGame(data.final_score);
+                return;
+            }
+            
+            currentQuestion = data;
+            displayQuestion(data);
+        })
+        .catch(error => console.error('Error:', error));
+}
+
+function displayQuestion(data) {
+    updateElementText('q-number', data.question_number);
+    updateElementText('question-text', data.question);
+    updateElementText('prize', data.current_prize);
+    
+    const optionsContainer = document.getElementById('options');
+    optionsContainer.innerHTML = '';
+    
+    data.options.forEach((option, index) => {
+        const optionElement = document.createElement('div');
+        optionElement.className = 'option';
+        optionElement.textContent = option;
+        optionElement.onclick = () => selectAnswer(option);
+        optionsContainer.appendChild(optionElement);
+    });
+    
+    // Reset result display
+    toggleElementVisibility('result', false);
+    const result = document.getElementById('result');
+    if (result) {
+        result.className = 'result';
+    }
+}
+
+ +
+

What this does:

+
    +
  • apiRequest(): Uses our utility function to fetch questions from the backend
  • +
  • displayQuestion(): Updates the UI with the received question data
  • +
  • Utility functions: Uses our helper functions to simplify DOM manipulation
  • +
+

Event Handling: Makes the answer options clickable by assigning onclick handlers.

+
+
+ +
+

Step 4: Answer Selection & Game Flow

+

Handle what happens when a player selects an answer.

+ +
+ +
function selectAnswer(answer) {
+    apiRequest('/answer', {
+        method: 'POST',
+        headers: {'Content-Type': 'application/json'},
+        body: JSON.stringify({ answer: answer })
+    })
+    .then(data => {
+        const result = document.getElementById('result');
+        if (result) {
+            result.style.display = 'block';
+            
+            if (data.correct) {
+                result.textContent = 'Correct!';
+                result.className = 'result correct';
+                
+                setTimeout(() => {
+                    if (data.game_over) {
+                        endGame(data.final_score);
+                    } else {
+                        loadQuestion();
+                    }
+                }, 1500);
+            } else {
+                result.textContent = `Wrong! Correct answer: ${data.correct_answer}`;
+                result.className = 'result incorrect';
+                
+                setTimeout(() => {
+                    endGame(data.final_score);
+                }, 2000);
+            }
+        }
+    })
+    .catch(error => console.error('Error:', error));
+}
+
+function endGame(score) {
+    updateElementText('final-prize', score);
+    toggleElementVisibility('game-over', true);
+    toggleElementVisibility('question-box', false);
+    toggleElementVisibility('lifeline', false);
+}
+
+function restartGame() {
+    window.location.href = '/start';
+}
+
+// Start the game when page loads
+if (window.location.pathname === '/start') {
+    loadQuestion();
+}
+
+ +
+

What this does:

+
    +
  • selectAnswer(): Sends the chosen answer to the backend for checking
  • +
  • Visual feedback: Shows if the answer was correct or incorrect
  • +
  • Game flow: Progresses to the next question or ends the game based on the result
  • +
  • endGame(): Displays the final score and game over screen
  • +
+

setTimeout(): Adds a delay before progressing to give players time to see the result.

+
+
+ +
+

Step 5: Lifeline Implementation

+

Implement the 50:50 lifeline that removes two wrong answers.

+ +
+ +
// 2. This file should contain the interactive functionality of the game
+// TODO: Implement functions to load and display questions
+// TODO: Add event handlers for answer selection
+// TODO: Implement lifeline functionality
+// TODO: Add game flow control (next question, game over)
+
+ +
+

What this does:

+
    +
  • Disables the button: Prevents using the lifeline multiple times
  • +
  • API call: Requests the backend to determine which options to remove
  • +
  • Hides options: Visually removes two wrong answer options from the screen
  • +
+

Error handling: Gracefully handles errors and re-enables the button if the lifeline fails.

+
+
+
+ + +
+
+

Graphics Designer - Artyom

+ +
+ +
+

Step 1: Russian Color Theme

+

Create a color scheme inspired by the Russian flag and traditional colors.

+ +
+ +
/* Russian Color Theme */
+:root {
+    --russian-white: #ffffff;
+    --russian-blue: #1a3b8b;
+    --russian-red: #d52b1e;
+    --russian-gold: #daa520;
+    --russian-dark: #0a1a3a;
+}
+
+body {
+    background: linear-gradient(135deg, var(--russian-blue), var(--russian-dark));
+    color: var(--russian-white);
+    font-family: 'Arial', sans-serif;
+    min-height: 100vh;
+    margin: 0;
+    padding: 0;
+}
+
+.game-container {
+    max-width: 800px;
+    margin: 0 auto;
+    padding: 20px;
+    background-color: rgba(255, 255, 255, 0.95);
+    border-radius: 15px;
+    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
+    color: var(--russian-dark);
+}
+
+.header {
+    background: linear-gradient(to right, var(--russian-blue), var(--russian-red));
+    color: white;
+    padding: 20px;
+    border-radius: 10px;
+    text-align: center;
+    margin-bottom: 30px;
+}
+
+ +
+

What this does: Establishes a color palette based on the Russian flag colors and applies them to our game:

+
    +
  • CSS Variables: Define colors once, use everywhere (easy to change later)
  • +
  • Gradients: Create smooth color transitions for visual appeal
  • +
  • Box Shadow: Adds depth to elements so they don't look flat
  • +
+
+
+ +
+

Step 2: Question and Option Styling

+

Style the question display and answer options to be clear and attractive.

+ +
+ +
.question-container {
+    margin-bottom: 30px;
+}
+
+.question {
+    font-size: 1.5rem;
+    font-weight: bold;
+    text-align: center;
+    margin-bottom: 25px;
+    padding: 20px;
+    background-color: var(--russian-white);
+    border: 3px solid var(--russian-gold);
+    border-radius: 10px;
+    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+}
+
+.options {
+    display: grid;
+    grid-template-columns: 1fr 1fr;
+    gap: 15px;
+}
+
+.option {
+    padding: 15px 20px;
+    background: linear-gradient(to bottom, #f8f9fa, #e9ecef);
+    border: 2px solid var(--russian-blue);
+    border-radius: 8px;
+    font-size: 1.1rem;
+    cursor: pointer;
+    transition: all 0.3s ease;
+    color: var(--russian-dark);
+}
+
+.option:hover {
+    background: linear-gradient(to bottom, #e9ecef, #dee2e6);
+    transform: translateY(-2px);
+    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
+}
+
+.option:active {
+    transform: translateY(0);
+}
+
+/* Answer feedback styles */
+.option.correct {
+    background: linear-gradient(to bottom, #d4edda, #c3e6cb);
+    border-color: #28a745;
+    color: #155724;
+}
+
+.option.wrong {
+    background: linear-gradient(to bottom, #f8d7da, #f1b0b7);
+    border-color: #dc3545;
+    color: #721c24;
+}
+
+ +
+

What this does:

+
    +
  • Grid Layout: Arranges answer options in two columns
  • +
  • Hover Effects: Makes buttons feel interactive
  • +
  • Transitions: Creates smooth animations for state changes
  • +
  • Feedback Colors: Green for correct answers, red for incorrect
  • +
+

CSS Grid: Modern way to create responsive layouts without complex calculations.

+
+
+ +
+

Step 3: Lifeline and Prize Styling

+

Style the lifeline buttons and prize display to match the Russian theme.

+ +
+ +
.lifelines {
+    display: flex;
+    justify-content: center;
+    gap: 20px;
+    margin: 20px 0;
+}
+
+.lifeline {
+    padding: 10px 20px;
+    background: linear-gradient(to bottom, var(--russian-gold), #b8860b);
+    color: var(--russian-dark);
+    border: none;
+    border-radius: 25px;
+    font-weight: bold;
+    cursor: pointer;
+    transition: all 0.3s ease;
+    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
+}
+
+.lifeline:hover:not(:disabled) {
+    transform: translateY(-2px);
+    box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
+}
+
+.lifeline:disabled {
+    background: linear-gradient(to bottom, #6c757d, #495057);
+    color: #adb5bd;
+    cursor: not-allowed;
+    transform: none;
+    box-shadow: none;
+}
+
+.prize-display {
+    font-size: 1.5rem;
+    font-weight: bold;
+    color: var(--russian-gold);
+    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
+}
+
+/* Responsive design for mobile */
+@media (max-width: 768px) {
+    .options {
+        grid-template-columns: 1fr;
+    }
+    
+    .game-container {
+        margin: 10px;
+        padding: 15px;
+    }
+    
+    .question {
+        font-size: 1.2rem;
+    }
+}
+
+ +
+

What this does:

+
    +
  • Flexbox: Centers the lifeline buttons horizontally
  • +
  • Golden Gradient: Makes lifeline buttons stand out
  • +
  • Disabled State: Shows when lifelines have been used
  • +
  • Responsive Design: Adapts layout for mobile devices
  • +
+

Media Queries: Apply different styles based on screen size - crucial for mobile users!

+
+
+
+
+ +
+

Russian Millionaire Quiz Game - Student Learning Portal

+

Created for Technolyceum AI6 Module 2 Project

+
+ + + + \ No newline at end of file diff --git a/quiz_game/README.md b/quiz_game/README.md new file mode 100644 index 0000000..3f10ba0 --- /dev/null +++ b/quiz_game/README.md @@ -0,0 +1,13 @@ +# Quizimoto - Russian Millionaire Quiz Game + +## Team Roles: +- **Dima**: Backend Developer (app.py) +- **Inna**: Frontend Developer (templates/, static/script.js) +- **Danil**: Database Designer (questions.json) +- **Artyom**: Graphics/UX Designer (static/style.css, visual design) + +## Development Instructions: +1. Each team member focuses on their designated files +2. Commit and push changes regularly +3. Test your components independently +4. Collaborate on integration issues diff --git a/quiz_game/Russian_Millionaire_Quiz_Game_Comprehensive_Guide.html b/quiz_game/Russian_Millionaire_Quiz_Game_Comprehensive_Guide.html new file mode 100644 index 0000000..e62436e --- /dev/null +++ b/quiz_game/Russian_Millionaire_Quiz_Game_Comprehensive_Guide.html @@ -0,0 +1,876 @@ + + + + + + Russian Millionaire Quiz Game - Comprehensive Guide + + + +
+
+ +
+ +
+
Project Overview
+
+
+

Project File Structure:

+
russian-millionaire/
+
app.py (Main application file)
+
questions.json (All quiz questions)
+
templates/
+
index.html (Home page)
+
game.html (Game screen)
+
static/
+
style.css (All styling)
+
script.js (Game interaction)
+
+ +
+

Pro Tip: All project files are available at https://gitea.techshare.cc/technolyceum/ai6-m2.git

+
+
+
+ +
+
Installation Instructions
+
+
+
STEP 1
+

Clone the Repository

+

Open your terminal and run the following command to get the project files:

+
+
+ 1 + git clone https://gitea.techshare.cc/technolyceum/ai6-m2.git +
+
+
+ +
+
STEP 2
+

Navigate to Project Directory

+

Move into the project directory using:

+
+
+ 1 + cd ai6-m2 +
+
+
+ +
+
STEP 3
+

Install Requirements

+

Install the necessary Python packages:

+
+
+ 1 + pip install -r requirements.txt +
+
+
+
+
+ +
+
Database Setup - Danil
+
+
+
STEP 1
+

Open Database File

+

Navigate to the database file at:

+
+
+ 1 + /Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/starter_templates/docs/roles/database-designer-danil.md +
+
+
+ +
+
STEP 2
+

Set Up MongoDB Connection (Lines 1-5)

+

Add the MongoDB connection information:

+
+
+ 1 + // 1. Import MongoDB driver (line 1) +
+
+ 2 + from pymongo import MongoClient +
+
+ 3 + +
+
+ 4 + // 2. Connect to MongoDB using the connection URI (line 3-5) +
+
+ 5 + client = MongoClient('mongodb://localhost:27017/') +
+
+ 6 + +
+
+ 7 + // 3. Select the appropriate database (line 7) +
+
+ 8 + db = client['student_db'] +
+
+ 9 + +
+
+ 10 + // 4. Select the questions collection (line 9) +
+
+ 11 + questions_collection = db['questions'] +
+
+ 12 + +
+
+ 13 + // 5. Add error handling for database connection (line 11) +
+
+ 14 + try: +
+
+ 15 + client.admin.command('ping') +
+
+ 16 + print("Successfully connected to MongoDB!") +
+
+ 17 + except Exception as e: +
+
+ 18 + print(f"MongoDB connection error: {e}") +
+
+
+ +
+
STEP 3
+

Insert Questions into Database

+

Add your quiz questions to the database:

+
+
+ 1 + // Sample question format +
+
+ 2 + question = { +
+
+ 3 + // 1. Question text (line 1) +
+
+ 4 + "question": "What is the capital of Russia?", +
+
+ 5 + // 2. Answer options (line 2-5) +
+
+ 6 + "options": ["Moscow", "St. Petersburg", "Novosibirsk", "Kazan"], +
+
+ 7 + // 3. Correct answer index (line 6) +
+
+ 8 + "correct_answer": 0 +
+
+ 9 + } +
+
+ 10 + +
+
+ 11 + // Insert question into collection (line 8) +
+
+ 12 + questions_collection.insert_one(question) +
+
+
+
+
+ +
+
Backend Setup - Dima
+
+
+
STEP 1
+

Open Backend File

+

Navigate to the backend developer documentation:

+
+
+ 1 + /Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/starter_templates/docs/roles/backend-developer-dima.md +
+
+
+ +
+
STEP 2
+

Set Up Flask Application (Lines 1-6)

+

Add the Flask setup code:

+
+
+ 1 + // 1. Import Flask and PyMongo (line 1-2) +
+
+ 2 + from flask import Flask, session, redirect, url_for, request, jsonify +
+
+ 3 + from flask_pymongo import PyMongo +
+
+ 4 + +
+
+ 5 + // 2. Connect to MongoDB database (line 4-6) +
+
+ 6 + app = Flask(__name__) +
+
+ 7 + app.config['MONGO_URI'] = 'mongodb://localhost:27017/student_db' +
+
+ 8 + mongo = PyMongo(app) +
+
+
+ +
+
STEP 3
+

Define API Endpoints (Lines 8-14)

+

Add the API endpoints for getting questions and submitting answers:

+
+
+ 1 + // 3. Define API endpoint for getting questions (line 8-10) +
+
+ 2 + @app.route('/get_question') +
+
+ 3 + def get_question(): +
+
+ 4 + // 1. Get current question number from session +
+
+ 5 + question_num = session.get('current_question', 0) +
+
+ 6 + +
+
+ 7 + // 2. Get question from database +
+
+ 8 + question = mongo.db.questions.find_one({"question_number": question_num}) +
+
+ 9 + +
+
+ 10 + // 3. Format response +
+
+ 11 + if question: +
+
+ 12 + return jsonify({ +
+
+ 13 + "question": question['question'], +
+
+ 14 + "options": question['options'], +
+
+ 15 + "question_number": question_num, +
+
+ 16 + "current_prize": calculate_prize(question_num) +
+
+ 17 + }) +
+
+ 18 + else: +
+
+ 19 + return jsonify({"game_over": True, "final_score": calculate_final_score()}) +
+
+ 20 + +
+
+ 21 + // 4. Define API endpoint for submitting answers (line 12-14) +
+
+ 22 + @app.route('/answer', methods=['POST']) +
+
+ 23 + def answer_question(): +
+
+ 24 + // 1. Get user's answer +
+
+ 25 + user_answer = request.json.get('answer') +
+
+ 26 + +
+
+ 27 + // 2. Get current question +
+
+ 28 + question_num = session.get('current_question', 0) +
+
+ 29 + current_question = mongo.db.questions.find_one({"question_number": question_num}) +
+
+ 30 + +
+
+ 31 + // 3. Check if answer is correct +
+
+ 32 + is_correct = current_question['options'][current_question['correct_answer']] == user_answer +
+
+ 33 + +
+
+ 34 + // 4. Update game state +
+
+ 35 + if is_correct: +
+
+ 36 + session['current_question'] = question_num + 1 +
+
+ 37 + return jsonify({ +
+
+ 38 + "correct": True, +
+
+ 39 + "correct_answer": current_question['correct_answer'], +
+
+ 40 + "game_over": question_num + 1 >= TOTAL_QUESTIONS +
+
+ 41 + }) +
+
+ 42 + else: +
+
+ 43 + return jsonify({ +
+
+ 44 + "correct": False, +
+
+ 45 + "correct_answer": current_question['correct_answer'], +
+
+ 46 + "game_over": True +
+
+ 47 + }) +
+
+
+
+
+ +
+
Frontend Setup - Inna
+
+
+
STEP 1
+

Open Frontend File

+

Navigate to the frontend developer documentation:

+
+
+ 1 + /Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/starter_templates/docs/roles/frontend-developer-inna.md +
+
+
+ +
+
STEP 2
+

Create HTML Structure (Lines 1-5)

+

Add the basic HTML structure with game container:

+
+
+ 1 + // 1. Create HTML structure with game container (line 1-5) +
+
+ 2 + +
+
+ 3 + +
+
+ 4 + +
+
+ 5 + +
+
+ 6 + Russian Quiz +
+
+ 7 + +
+
+ 8 + +
+
+ 9 + +
+
+ 10 +
+
+
+ 11 +

Russian Quiz

+
+
+ 12 +
Prize: 0 โ‚ฝ
+
+
+ 13 + +
+
+ 14 +
+
+
+ 15 +
Question 1/5
+
+
+ 16 +
Loading...
+
+
+ 17 + +
+
+ 18 +
+
+
+ 19 + +
+
+ 20 +
+
+
+ 21 +
+
+
+
+ +
+
STEP 3
+

Add Game Controls (Lines 17-20)

+

Add the game control elements:

+
+
+ 1 + // 4. Implement game controls and lifelines (line 17-20) +
+
+ 2 + +
+
+ 3 + +
+
+ 4 +
+
+
+ 5 +
+
+
+ 6 + // 5. Add game over screen UI (line 22-25) +
+
+ 7 + +
+ 8 +

Game Over!

+
+
+ 9 +

You won: 0 โ‚ฝ

+
+
+ 10 + +
+
+ 11 +
+
+
+
+
+
+ +
+
Final Steps
+
+
+
STEP 1
+

Start MongoDB

+

Make sure MongoDB is running:

+
+
+ 1 + // Start MongoDB service +
+
+ 2 + sudo service mongod start +
+
+
+ +
+
STEP 2
+

Run the Application

+

Start the Flask application:

+
+
+ 1 + // Run the app +
+
+ 2 + python app.py +
+
+
+ +
+
STEP 3
+

Access the Game

+

Open your browser and go to:

+
+
+ 1 + http://localhost:5000/start +
+
+
+
+
+ +
+

ยฉ 2025 Technolyceum. All rights reserved.

+

For support, contact: techsupport@technolyceum.cc

+
+ + + \ No newline at end of file diff --git a/quiz_game/__pycache__/app.cpython-313.pyc b/quiz_game/__pycache__/app.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca34215ba568f7d0d3abab0b38c202158d44705c GIT binary patch literal 5467 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 len(questions): + return None + + return questions[current_q_index], current_q_index + +def calculate_guaranteed_prize(current_index): + """Calculate the guaranteed prize based on current question index""" + final_score = 0 + for level in sorted(GUARANTEED_LEVELS, reverse=True): + if current_index + 1 >= level: + final_score = PRIZE_LEVELS[level - 1] if level <= len(PRIZE_LEVELS) else 0 + break + return final_score + +@app.route('/') +def index(): + return render_template('index.html') + +@app.route('/start') +def start_game(): + # Initialize game session + session['score'] = 0 + session['current_question'] = 0 + session['lifelines'] = ['fifty_fifty'] + session['questions'] = random.sample(questions_data, min(15, len(questions_data))) # Select up to 15 random questions + return render_template('game.html') + +@app.route('/get_question') +def get_question(): + current_q_index = session.get('current_question', 0) + + # Check if game is over (15 questions answered or no more questions) + if current_q_index >= len(session.get('questions', [])) or current_q_index >= 15: + return jsonify({ + "game_over": True, + "final_score": session.get('score', 0) + }) + + question_data = session['questions'][current_q_index] + + return jsonify({ + "question_number": current_q_index + 1, + "question": question_data['question'], + "options": question_data['options'], + "current_prize": PRIZE_LEVELS[current_q_index] if current_q_index < len(PRIZE_LEVELS) else 1000000, + "game_over": False + }) + +@app.route('/answer', methods=['POST']) +def check_answer(): + data = request.get_json() + answer = data.get('answer', '') + + question_info = get_current_question() + if not question_info: + return jsonify({"error": "No more questions"}) + + question_data, current_q_index = question_info + correct = answer == question_data['correct_answer'] + + if correct: + session['current_q_index'] = current_q_index + 1 + session['score'] = PRIZE_LEVELS[current_q_index] if current_q_index < len(PRIZE_LEVELS) else session.get('score', 0) + + # Check if game is won (15th question answered correctly) + game_won = session['current_question'] >= min(15, len(session.get('questions', []))) + + return jsonify({ + "correct": True, + "correct_answer": question_data['correct_answer'], + "final_score": session['score'], + "game_over": game_won + }) + else: + # Game over with last guaranteed prize + final_score = calculate_guaranteed_prize(current_q_index) + + return jsonify({ + "correct": False, + "correct_answer": question_data['correct_answer'], + "final_score": final_score, + "game_over": True + }) + +@app.route('/lifeline/') +def use_lifeline(lifeline_name): + if lifeline_name != 'fifty_fifty': + return jsonify({"error": "Unknown lifeline"}) + + if 'fifty_fifty' not in session.get('lifelines', []): + return jsonify({"error": "Lifeline already used"}) + + question_info = get_current_question() + if not question_info: + return jsonify({"error": "No current question"}) + + # Remove the lifeline from available lifelines + session['lifelines'].remove('fifty_fifty') + + question_data, _ = question_info + correct_answer = question_data['correct_answer'] + options = question_data['options'] + + # Find indices of wrong answers to remove (we need to remove 2) + wrong_indices = [i for i, option in enumerate(options) if option != correct_answer] + + # Randomly select 2 wrong indices to remove + indices_to_remove = random.sample(wrong_indices, min(2, len(wrong_indices))) + indices_to_remove.sort(reverse=True) # Sort in descending order for safe removal + + return jsonify({ + "remove_indices": indices_to_remove + }) + +if __name__ == '__main__': + app.run(debug=True) \ No newline at end of file diff --git a/quiz_game/docs/.DS_Store b/quiz_game/docs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5b8e43425130f01cc048f98210719d9f3fadaad4 GIT binary patch literal 6148 zcmeH~O-jT-5QSgs2m`ZlmM;4OF1$fAj3@8{>WrWej2LI1o!9o&k75kMtX#+|sD9~6 zRhoQ@R0=@Z9QIeh8o-inig#P)X7|l!c9Id(;?EfN!>+sU`;Ob=%xcf@iXI&vFsVPs z8$&xh;u%lWJEmM>z>7z}Qja@FSt1|;A|L`HAOb-koAh!eAR-_FBJhKNeIF{_w55)r z{^{W2BLH>5up6&^mY`M(P+RI4$_TAQDK$zPSuZqagm9@Ul8~Jw#FT6 literal 0 HcmV?d00001 diff --git a/quiz_game/docs/README.md b/quiz_game/docs/README.md new file mode 100644 index 0000000..f8941a8 --- /dev/null +++ b/quiz_game/docs/README.md @@ -0,0 +1,19 @@ +# Project Documentation + +This directory contains all the documentation for the Millionaire Quiz Game project. + +## Structure + +- [/roles](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/docs/roles) - Role-specific instructions and guidelines for team members +- [/technical-specs](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/docs/technical-specs) - Technical specifications and architecture documents + +## Role Documentation + +Each team member has their own instruction file: + +- [Frontend Developer (Inna)](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/docs/roles/frontend-developer-inna.md) +- [Backend Developer (Dima)](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/docs/roles/backend-developer-dima.md) +- [Database Designer (Danil)](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/docs/roles/database-designer-danil.md) +- [Graphics Designer (Artyom)](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/docs/roles/graphics-designer-artyom.md) + +These documents contain step-by-step instructions for implementing various parts of the application. \ No newline at end of file diff --git a/quiz_game/docs/roles/backend-developer-dima.md b/quiz_game/docs/roles/backend-developer-dima.md new file mode 100644 index 0000000..49ee568 --- /dev/null +++ b/quiz_game/docs/roles/backend-developer-dima.md @@ -0,0 +1,185 @@ +DIMA - BACKEND DEVELOPER MISSION +Your Role: Game Brain Developer | Your File: app.py + +๐Ÿ’ก What You're Building: You're creating the "brain" of the game - all the rules, scoring, and game logic! + +๐Ÿ“‹ LESSON 1-2: SETUP & PRIZE SYSTEM + +Step 1: Fork and Clone (10 minutes) +1. Go to: https://gitea.techshare.cc/technolyceum/ai6-m2 +2. Click the "Fork" button (creates your copy) +3. Copy your forked repository URL +4. Open Terminal and type: + git clone [YOUR-FORKED-URL-HERE] + cd ai6-m2 + git checkout -b dima-backend-work + +Step 2: Create the Prize Money System (20 minutes) +Open app.py and find these lines around line 13: + +# Prize structure (15 levels) +PRIZE_LEVELS = [ + 100, 200, 300, 500, 1000, + 2000, 4000, 8000, 16000, 32000, + 64000, 125000, 250000, 500000, 1000000 +] + +This is already implemented! Notice how the prizes increase as the player progresses through the questions. + +Step 3: Review Game Session Management (15 minutes) +Look at the [start_game](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/app.py#L42-L48) function (around line 42): + +```python +@app.route('/start') +def start_game(): + # Initialize game session + session['score'] = 0 + session['current_question'] = 0 + session['lifelines'] = ['fifty_fifty'] + session['questions'] = random.sample(questions_data, min(15, len(questions_data))) + return render_template('game.html') +``` + +This function initializes the game session with: +- Starting score of 0 +- Current question index of 0 +- One lifeline available: fifty_fifty +- A random selection of up to 15 questions from the database + +๐Ÿ“‹ LESSON 3-4: QUESTION RETRIEVAL & ANSWER VALIDATION + +Step 4: Review Question Retrieval (15 minutes) +Check the [get_question](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/app.py#L50-L66) function (around line 50): + +```python +@app.route('/get_question') +def get_question(): + current_q_index = session.get('current_question', 0) + + # Check if game is over + if current_q_index >= min(15, len(session.get('questions', []))): + return jsonify({ + "game_over": True, + "final_score": session.get('score', 0) + }) + + question_data = session['questions'][current_q_index] + + return jsonify({ + "question_number": current_q_index + 1, + "question": question_data['question'], + "options": question_data['options'], + "current_prize": PRIZE_LEVELS[current_q_index] if current_q_index < len(PRIZE_LEVELS) else 1000000, + "game_over": False + }) +``` + +This function retrieves the current question and formats it for the frontend. + +Step 5: Review Answer Validation (20 minutes) +Look at the [check_answer](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/app.py#L68-L103) function (around line 68): + +```python +@app.route('/answer', methods=['POST']) +def check_answer(): + data = request.get_json() + answer = data.get('answer', '') + + question_info = get_current_question() + if not question_info: + return jsonify({"error": "No more questions"}) + + question_data, current_q_index = question_info + correct = answer == question_data['correct_answer'] + + if correct: + session['current_question'] = current_q_index + 1 + session['score'] = PRIZE_LEVELS[current_q_index] if current_q_index < len(PRIZE_LEVELS) else session.get('score', 0) + + # Check if game is won (15th question answered correctly) + game_won = session['current_question'] >= min(15, len(session.get('questions', []))) + + return jsonify({ + "correct": True, + "correct_answer": question_data['correct_answer'], + "final_score": session['score'], + "game_over": game_won + }) + else: + # Game over with last guaranteed prize + final_score = calculate_guaranteed_prize(current_q_index) + + return jsonify({ + "correct": False, + "correct_answer": question_data['correct_answer'], + "final_score": final_score, + "game_over": True + }) +``` + +Notice the helper functions: +- [get_current_question()](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/app.py#L20-L28) - Gets the current question data from session +- [calculate_guaranteed_prize()](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/app.py#L30-L37) - Calculates prize based on guaranteed levels + +๐Ÿ“‹ LESSON 5-6: LIFELINES & REFACTORING + +Step 6: Review Lifeline Implementation (15 minutes) +Check the [use_lifeline](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/app.py#L105-L133) function (around line 105): + +```python +@app.route('/lifeline/') +def use_lifeline(lifeline_name): + if lifeline_name != 'fifty_fifty': + return jsonify({"error": "Unknown lifeline"}) + + if 'fifty_fifty' not in session.get('lifelines', []): + return jsonify({"error": "Lifeline already used"}) + + question_info = get_current_question() + if not question_info: + return jsonify({"error": "No current question"}) + + # Remove the lifeline from available lifelines + session['lifelines'].remove('fifty_fifty') + + question_data, _ = question_info + correct_answer = question_data['correct_answer'] + options = question_data['options'] + + # Find indices of wrong answers to remove (we need to remove 2) + wrong_indices = [i for i, option in enumerate(options) if option != correct_answer] + + # Randomly select 2 wrong indices to remove + indices_to_remove = random.sample(wrong_indices, min(2, len(wrong_indices))) + indices_to_remove.sort(reverse=True) # Sort in descending order for safe removal + + return jsonify({ + "remove_indices": indices_to_remove + }) +``` + +Notice the improvements: +- Uses list comprehension for finding wrong indices +- Uses helper functions to reduce code duplication +- Has clear error handling + +## Database Configuration + +The application should connect to the MongoDB database using the following connection string: +```python +MONGO_URI = "mongodb://ai6s3:Student123!@localhost:27017/student_db" +``` + +This connection string should be set in the application's configuration file or environment variables. + +โœ… DIMA'S COMPLETION CHECKLIST +โ˜ Understand the prize system structure +โ˜ Review game session initialization +โ˜ Understand question retrieval logic +โ˜ Review answer validation process +โ˜ Understand lifeline implementation +โ˜ Recognize the use of helper functions for DRY code +โ˜ All code pushed to your branch +โ˜ Created Pull Request for teacher to review + +๐ŸŽ‰ Congratulations Dima! You built the entire game backend! \ No newline at end of file diff --git a/quiz_game/docs/roles/database-designer-danil.md b/quiz_game/docs/roles/database-designer-danil.md new file mode 100644 index 0000000..121c5c7 --- /dev/null +++ b/quiz_game/docs/roles/database-designer-danil.md @@ -0,0 +1,100 @@ +DANIL - DATABASE DESIGNER MISSION +Your Role: Question Master | Your File: questions.json + +๐Ÿ’ก What You're Building: You're creating all the quiz questions about Russian culture! + +๐Ÿ“‹ LESSON 1-2: SETUP & BASIC QUESTIONS + +Step 1: Fork and Clone (10 minutes) +1. Go to: https://gitea.techshare.cc/technolyceum/ai6-m2 +2. Click the "Fork" button (creates your copy) +3. Copy your forked repository URL +4. Open Terminal and type: + git clone [YOUR-FORKED-URL-HERE] + cd ai6-m2 + git checkout -b danil-database-work + +Step 2: Review the Question Format (10 minutes) +Open questions.json and look at the example: + +```json +[ + { + "question": "What is the capital of Russia?", + "options": ["St. Petersburg", "Moscow", "Kazan", "Sochi"], + "correct_answer": "Moscow" + }, + { + "question": "Which Russian author wrote 'War and Peace'?", + "options": ["Dostoevsky", "Tolstoy", "Pushkin", "Chekhov"], + "correct_answer": "Tolstoy" + } +] +``` + +Each question needs: +- question: The actual question text +- options: 4 possible answers (A, B, C, D) +- correct_answer: The right answer (must match exactly one of the options) + +Step 3: Understand the Current Implementation (15 minutes) +Notice that the current implementation: +- Has properly formatted JSON (no comments) +- Has 5 sample questions about Russian culture +- Follows the correct structure for integration with the backend + +๐Ÿ“‹ LESSON 3-4: EXPANDING THE DATABASE + +Step 4: Add More Questions (30 minutes) +Add at least 10 more questions to reach a total of 15. Here are some examples: + +```json + { + "question": "What is the traditional Russian soup made with beets?", + "options": ["Shchi", "Borscht", "Solyanka", "Ukha"], + "correct_answer": "Borscht" + }, + { + "question": "Which Russian ruler was known as 'The Terrible'?", + "options": ["Peter I", "Catherine II", "Ivan IV", "Nicholas II"], + "correct_answer": "Ivan IV" + }, + { + "question": "What is the name of the famous Russian ballet company?", + "options": ["Moscow Ballet", "St. Petersburg Ballet", "Bolshoi Ballet", "Russian National Ballet"], + "correct_answer": "Bolshoi Ballet" + } +``` + +Requirements for new questions: +- Make sure questions cover different aspects of Russian culture (history, literature, food, arts, geography) +- Ensure plausible wrong answers that are not obviously incorrect +- Verify that the correct_answer exactly matches one of the options + +## MongoDB Connection Instructions + +To connect to the MongoDB database: +- URL: `mongodb://ai6s3:Student123!@localhost:27017/student_db` +- Username: `ai6s3` +- Password: `Student123!` +- Database: `student_db` + +To import your JSON data: +1. Save your JSON data in a file named `data.json` +2. Run the following command in terminal: +```bash +mongoimport --uri="mongodb://ai6s3:Student123!@localhost:27017/student_db" --collection=questions --type=json --file=data.json --jsonArray +``` + +Make sure your JSON data format matches the expected schema for the application. + +โœ… DANIL'S COMPLETION CHECKLIST +โ˜ Understand the question format +โ˜ Review current implementation +โ˜ Add 10+ more questions about Russian culture +โ˜ Verify all questions follow the correct structure +โ˜ Check that correct_answer matches exactly one option +โ˜ All code pushed to your branch +โ˜ Created Pull Request for teacher to review + +๐ŸŽ‰ Congratulations Danil! You built the entire question database! \ No newline at end of file diff --git a/quiz_game/docs/roles/frontend-developer-inna.md b/quiz_game/docs/roles/frontend-developer-inna.md new file mode 100644 index 0000000..94ef866 --- /dev/null +++ b/quiz_game/docs/roles/frontend-developer-inna.md @@ -0,0 +1,225 @@ +INNA - FRONTEND DEVELOPER MISSION +Your Role: Game Interface Designer | Your Files: templates/ and static/script.js + +๐Ÿ’ก What You're Building: You're creating what players see and click on! + +๐Ÿ“‹ LESSON 1-2: SETUP & BASIC GAME FLOW + +Step 1: Fork and Clone (10 minutes) +1. Go to: https://gitea.techshare.cc/technolyceum/ai6-m2 +2. Click the "Fork" button (creates your copy) +3. Copy your forked repository URL +4. Open Terminal and type: + git clone [YOUR-FORKED-URL-HERE] + cd ai6-m2 + git checkout -b inna-frontend-work + +Step 2: Review Question Loading (15 minutes) +Open static/script.js and look at the [loadQuestion](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/static/script.js#L9-L19) function: + +```javascript +function loadQuestion() { + apiRequest('/get_question') + .then(data => { + if (data.game_over) { + endGame(data.final_score); + return; + } + + currentQuestion = data; + displayQuestion(data); + }) + .catch(error => console.error('Error:', error)); +} +``` + +Notice how it uses the [apiRequest](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/static/script.js#L5-L12) utility function for cleaner code. + +Step 3: Review Question Display (15 minutes) +Look at the [displayQuestion](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/static/script.js#L21-L41) function: + +```javascript +function displayQuestion(data) { + updateElementText('q-number', data.question_number); + updateElementText('question-text', data.question); + updateElementText('prize', data.current_prize); + + const optionsContainer = document.getElementById('options'); + optionsContainer.innerHTML = ''; + + data.options.forEach((option, index) => { + const optionElement = document.createElement('div'); + optionElement.className = 'option'; + optionElement.textContent = option; + optionElement.onclick = () => selectAnswer(option); + optionsContainer.appendChild(optionElement); + }); + + // Reset result display + toggleElementVisibility('result', false); + const result = document.getElementById('result'); + if (result) { + result.className = 'result'; + } +} +``` + +Notice the utility functions: +- [updateElementText()](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/static/script.js#L14-L19) - Simplifies updating element text +- [toggleElementVisibility()](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/static/script.js#L21-L27) - Standardizes showing/hiding elements + +๐Ÿ“‹ LESSON 3-4: ANSWER HANDLING & LIFELINES + +Step 4: Review Answer Selection (15 minutes) +Check the [selectAnswer](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/static/script.js#L43-L72) function: + +```javascript +function selectAnswer(answer) { + apiRequest('/answer', { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify({ answer: answer }) + }) + .then(data => { + const result = document.getElementById('result'); + if (result) { + result.style.display = 'block'; + + if (data.correct) { + result.textContent = 'Correct!'; + result.className = 'result correct'; + + setTimeout(() => { + if (data.game_over) { + endGame(data.final_score); + } else { + loadQuestion(); + } + }, 1500); + } else { + result.textContent = `Wrong! Correct answer: ${data.correct_answer}`; + result.className = 'result incorrect'; + + setTimeout(() => { + endGame(data.final_score); + }, 2000); + } + } + }) + .catch(error => console.error('Error:', error)); +} +``` + +Step 5: Review Lifeline Implementation (15 minutes) +Look at the [useFiftyFifty](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/static/script.js#L74-L100) function: + +```javascript +function useFiftyFifty() { + const lifelineBtn = document.querySelector('.lifeline'); + if (lifelineBtn) { + lifelineBtn.disabled = true; + } + + apiRequest('/lifeline/fifty_fifty') + .then(data => { + if (data.error) { + alert(data.error); + if (lifelineBtn) { + lifelineBtn.disabled = false; + } + return; + } + + // Hide two wrong options + const options = document.querySelectorAll('.option'); + data.remove_indices.forEach(index => { + if (options[index]) { + options[index].style.display = 'none'; + } + }); + }) + .catch(error => { + console.error('Error:', error); + if (lifelineBtn) { + lifelineBtn.disabled = false; + } + }); +} +``` + +Notice the improvements: +- Uses the [apiRequest](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/static/script.js#L5-L12) utility function +- Has proper error handling with element checks +- Cleaner, more maintainable code + +Step 6: Review Utility Functions (10 minutes) +At the top of script.js, notice the utility functions that make the code DRY: + +```javascript +// Utility function for making API requests +function apiRequest(url, options = {}) { + return fetch(url, options) + .then(response => response.json()) + .catch(error => { + console.error('Error:', error); + throw error; + }); +} + +// Utility function for updating element text content +function updateElementText(id, text) { + const element = document.getElementById(id); + if (element) { + element.textContent = text; + } +} + +// Utility function for showing/hiding elements +function toggleElementVisibility(id, show = true) { + const element = document.getElementById(id); + if (element) { + element.style.display = show ? 'block' : 'none'; + } +} +``` + +๐Ÿ“‹ LESSON 5-6: GAME FLOW COMPLETION + +Step 7: Review Game End and Restart (10 minutes) +Look at the [endGame](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/static/script.js#L102-L108) and [restartGame](file:///Users/home/YandexDisk/TECHNOLYCEUM/ict_repos/ai6-m2/static/script.js#L110-L112) functions: + +```javascript +function endGame(score) { + updateElementText('final-prize', score); + toggleElementVisibility('game-over', true); + toggleElementVisibility('question-box', false); + toggleElementVisibility('lifeline', false); +} + +function restartGame() { + window.location.href = '/start'; +} +``` + +Notice how they use the utility functions to simplify the code. + +โœ… INNA'S COMPLETION CHECKLIST +โ˜ Review question loading implementation +โ˜ Understand question display logic +โ˜ Review answer handling process +โ˜ Understand lifeline implementation +โ˜ Recognize utility functions for DRY code +โ˜ Review game flow completion +โ˜ All code pushed to your branch +โ˜ Created Pull Request for teacher to review + +## Connection Requirements + +The frontend communicates with the backend API, which must be properly configured with the MongoDB connection string: +```python +MONGO_URI = "mongodb://ai6s3:Student123!@localhost:27017/student_db" +``` + +Ensure the backend developer has correctly configured this connection string in the application's configuration. + +๐ŸŽ‰ Congratulations Inna! You built the entire game interface! \ No newline at end of file diff --git a/quiz_game/docs/roles/graphics-designer-artyom.md b/quiz_game/docs/roles/graphics-designer-artyom.md new file mode 100644 index 0000000..e0bb500 --- /dev/null +++ b/quiz_game/docs/roles/graphics-designer-artyom.md @@ -0,0 +1,319 @@ +ARTYOM - GRAPHICS DESIGNER MISSION +Your Role: Visual Designer | Your File: static/style.css + +๐Ÿ’ก What You're Building: You're making the game look amazing with Russian themes! + +๐Ÿ“‹ LESSON 1-2: SETUP & RUSSIAN COLOR THEME + +Step 1: Fork and Clone (10 minutes) +1. Go to: https://gitea.techshare.cc/technolyceum/ai6-m2 +2. Click the "Fork" button (creates your copy) +3. Copy your forked repository URL +4. Open Terminal and type: + git clone [YOUR-FORKED-URL-HERE] + cd ai6-m2 + git checkout -b artyom-graphics-work + +Step 2: Enhance the Russian Color Theme (30 minutes) +Open static/style.css and find the body section. + +DELETE these lines: + +body { + background: #1a2a6c; + color: white; + min-height: 100vh; + padding: 20px; +} + +TYPE THIS instead: + +body { + background: linear-gradient(135deg, #1a2a6c, #b21f1f, #fdbb2d); + color: white; + min-height: 100vh; + padding: 20px; + font-family: 'Arial', 'Helvetica', sans-serif; +} + +Step 3: Make the Header Look Russian (20 minutes) +Find the header section. + +DELETE these lines: + +header { + text-align: center; + margin-bottom: 20px; + padding: 15px; + background: #b21f1f; + border-radius: 8px; +} + +TYPE THIS instead: + +/* Keep container styling from current implementation */ +.container { + background: rgba(255, 255, 255, 0.9); + color: #333; + padding: 20px; + border-radius: 10px; + box-shadow: 0 2px 5px rgba(0,0,0,0.1); + margin: 15px 0; +} + +h1 { + color: #1a237e; + text-align: center; + font-size: 2.5rem; + margin: 20px 0; +} + +Save and push: + git add static/style.css + git commit -m "feat: enhanced Russian color theme" + git push origin artyom-graphics-work + +๐Ÿ“‹ LESSON 3-4: GAME ELEMENTS STYLING + +Step 4: Style the Question Container (25 minutes) +Find the question-container section. + +DELETE these lines: + +.question-box { + background: rgba(255, 255, 255, 0.9); + color: #333; + padding: 15px; + border-radius: 8px; + margin: 15px 0; + box-shadow: 0 2px 5px rgba(0,0,0,0.2); +} + +.question { + font-size: 1.4rem; + margin-bottom: 15px; + text-align: center; + font-weight: bold; +} + +TYPE THIS instead: + +.question-container { + background: rgba(255, 255, 255, 0.15); + padding: 25px; + border-radius: 15px; + margin-bottom: 25px; + border: 1px solid rgba(253, 187, 45, 0.3); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); + backdrop-filter: blur(10px); +} + +.question { + font-size: 1.4rem; + margin-bottom: 25px; + text-align: center; + font-weight: bold; + color: #fdbb2d; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); +} + +.question-number { + color: #fdbb2d; + font-size: 1.1rem; + margin-bottom: 15px; + text-align: center; + font-weight: bold; +} + +Step 5: Make Answer Buttons Beautiful (25 minutes) +Find the option styling. + +DELETE these lines: + +.option { + background: #2196f3; + color: white; + padding: 12px; + border-radius: 5px; + cursor: pointer; + text-align: center; + margin: 5px 0; + transition: background 0.3s; + font-weight: bold; +} + +.option:hover { + background: #1976d2; +} + +.option.correct { + background: #4caf50; +} + +.option.wrong { + background: #f44336; +} + +TYPE THIS instead: + +.option { + background: linear-gradient(135deg, #fdbb2d, #e6a923); + color: #1a2a6c; + padding: 18px; + border-radius: 10px; + cursor: pointer; + text-align: center; + font-weight: bold; + border: 2px solid #1a2a6c; + transition: all 0.3s ease; + font-size: 1.1rem; + box-shadow: 0 3px 8px rgba(0, 0, 0, 0.2); +} + +.option:hover { + background: linear-gradient(135deg, #e6a923, #fdbb2d); + transform: translateY(-3px); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); +} + +.option:active { + transform: translateY(1px); +} + +Save and push: + git add static/style.css + git commit -m "feat: enhanced question and option styling" + git push origin artyom-graphics-work + +๐Ÿ“‹ LESSON 5-6: LIFELINES & FINAL TOUCHES + +Step 6: Style Lifelines and Game Over Screen (40 minutes) +Find the lifelines section. + +DELETE these lines: + +.lifelines { + background: rgba(255, 255, 255, 0.1); + padding: 15px; + border-radius: 8px; +} + +.lifeline-buttons { + display: flex; + gap: 10px; + justify-content: center; +} + +.lifeline-btn { + background: #1a2a6c; + color: white; + border: none; + padding: 10px 15px; + border-radius: 5px; + cursor: pointer; +} + +TYPE THIS instead: + +.result.correct { + background: #c8e6c9; + color: #2e7d32; + padding: 10px; + border-radius: 5px; + margin: 10px 0; +} + +.result.incorrect { + background: #ffcdd2; + color: #c62828; + padding: 10px; + border-radius: 5px; + margin: 10px 0; +} + +.lifeline { + background: #ff9800; + color: white; + border: none; + padding: 12px 20px; + border-radius: 5px; + cursor: pointer; + display: block; + margin: 15px auto; + font-weight: bold; + transition: background 0.3s; +} + +.lifeline:hover { + background: #f57c00; +} + +.lifeline:disabled { + background: #ccc; + cursor: not-allowed; +} + +Step 7: Make Game Over Screen Epic (20 minutes) +Find the game-over-screen section. + +DELETE these lines: + +.game-over-screen { + text-align: center; + padding: 30px; +} + +TYPE THIS instead: + +.game-over-screen { + text-align: center; + padding: 30px; + background: white; + border-radius: 10px; + box-shadow: 0 2px 5px rgba(0,0,0,0.1); + margin: 15px 0; +} + +.game-over-screen h2 { + color: #d32f2f; + font-size: 2rem; + margin-bottom: 15px; +} + +.game-over-screen p { + font-size: 1.2rem; + margin-bottom: 20px; + color: #333; +} + +.game-over-screen button { + background: #d32f2f; + color: white; + border: none; + padding: 12px 24px; + border-radius: 5px; + font-size: 1rem; + cursor: pointer; + transition: background 0.3s; +} + +.game-over-screen button:hover { + background: #b71c1c; +} + +Final push: + git add static/style.css + git commit -m "feat: completed Russian-themed visual design" + git push origin artyom-graphics-work + +โœ… ARTYOM'S COMPLETION CHECKLIST +โ˜ Russian flag colors used throughout (white, blue, red, gold) +โ˜ Gradient backgrounds look professional +โ˜ Buttons have hover effects and animations +โ˜ Game elements have shadows and borders +โ˜ Text is readable with good contrast +โ˜ Game over screen looks exciting +โ˜ All code pushed to your branch +โ˜ Created Pull Request for teacher to review + +๐ŸŽ‰ Congratulations Artyom! You made the game look amazing! \ No newline at end of file diff --git a/quiz_game/docs/technical-specs/teacher-project-guide.md b/quiz_game/docs/technical-specs/teacher-project-guide.md new file mode 100644 index 0000000..a290800 --- /dev/null +++ b/quiz_game/docs/technical-specs/teacher-project-guide.md @@ -0,0 +1,262 @@ +# Teacher - Complete Project Manager Guide + +## YOUR ROLES: +- Team Lead - Guide students through development +- Git Master - Manage repositories and merges +- User Tester - Verify all components work +- Integration Manager - Combine all student work + +## PROJECT TIMELINE (6 Lessons) + +========================================= + +## LESSON 1-2: SETUP & FOUNDATION +========================================= + +### STUDENT GOALS: +- Dima: Implement prize money system and game logic in app.py +- Danil: Create first 5 Russian culture questions +- Inna: Make basic question loading and display work +- Artyom: Start Russian color theme in CSS + +### TEACHER TASKS: + +โœ… Setup Verification: +1. Ensure main repo is ready: + https://gitea.techshare.cc/technolyceum/ai6-m2 + +2. Verify all students have: + - Forked the repository + - Created their role-specific branch + - Made first commit + +3. Quick Progress Check (Terminal): +```bash +# Check each student's fork manually in Gitea web interface +# Look for 4 branches: +# - dima-backend-work +# - inna-frontend-work +# - danil-database-work +# - artyom-graphics-work +``` + +โœ… Individual Progress Checks: +```bash +# Temporary check for each student: +git clone [STUDENT-FORK-URL] temp-check +cd temp-check +git checkout [THEIR-BRANCH] + +# Dima Check: +grep -A 15 "PRIZE_LEVELS" app.py + +# Danil Check: +python3 -c "import json; print('Questions:', len(json.load(open('questions.json'))))" + +# Inna Check: +grep -c "function" static/script.js + +# Artyom Check: +grep -c "background" static/style.css + +cd .. +rm -rf temp-check +``` + +========================================= + +## LESSON 3-4: CORE DEVELOPMENT +========================================= + +### STUDENT GOALS: +- Dima: Complete game session management and answer validation +- Danil: 10+ questions completed +- Inna: Answer handling system and lifelines +- Artyom: Enhanced question/option styling + +### TEACHER TASKS: + +โœ… Code Review Workshop: +Show examples of DRY (Don't Repeat Yourself) principles: + +**Before (repetitive code):** +```javascript +document.getElementById('q-number').textContent = data.question_number; +document.getElementById('question-text').textContent = data.question; +document.getElementById('prize').textContent = data.current_prize; +``` + +**After (DRY code with utility functions):** +```javascript +updateElementText('q-number', data.question_number); +updateElementText('question-text', data.question); +updateElementText('prize', data.current_prize); +``` + +โœ… Git Workshop: +```bash +# Help students resolve merge conflicts: +git fetch origin +git checkout main +git pull origin main +git checkout [THEIR-BRANCH] +git merge main + +# If conflicts occur: +# 1. Edit conflicted files +# 2. Remove conflict markers +# 3. git add . +# 4. git commit +``` + +========================================= + +## LESSON 5-6: INTEGRATION & TESTING +========================================= + +### STUDENT GOALS: +- Dima: Finalize lifelines and error handling +- Danil: Complete 15 questions with difficulty progression +- Inna: Complete game flow and end game screens +- Artyom: Polish all visual elements and animations + +### FINAL INTEGRATION: + +โœ… Integration Steps: +1. Merge all branches to main: +```bash +# On main branch: +git merge dima-backend-work +git merge danil-database-work +git merge inna-frontend-work +git merge artyom-graphics-work +``` + +2. Resolve any conflicts + +3. Test complete game flow: + - Start game from index.html + - Play through all questions + - Test lifelines + - Verify scoring system + - Check end game states + +โœ… Final Testing Checklist: +- [ ] All 15 questions load correctly +- [ ] Answer validation works +- [ ] Scoring system functions properly +- [ ] Lifelines function correctly +- [ ] Game over states work (win/lose) +- [ ] Restart functionality works +- [ ] Responsive design on different screens +- [ ] No console errors in browser + +========================================= + +## PROJECT ARCHITECTURE OVERVIEW +========================================= + +### File Structure: +``` +/ai6-m2 +โ”œโ”€โ”€ app.py # Flask backend (Dima) +โ”œโ”€โ”€ questions.json # Question database (Danil) +โ”œโ”€โ”€ static/ +โ”‚ โ”œโ”€โ”€ script.js # Frontend logic (Inna) +โ”‚ โ””โ”€โ”€ style.css # Styling (Artyom) +โ”œโ”€โ”€ templates/ +โ”‚ โ”œโ”€โ”€ index.html # Landing page +โ”‚ โ””โ”€โ”€ game.html # Game interface +โ”œโ”€โ”€ docs/ +โ”‚ โ”œโ”€โ”€ roles/ # Role-specific instructions +โ”‚ โ””โ”€โ”€ technical-specs/ # Technical documentation +โ””โ”€โ”€ README.md # Project overview +``` + +### Technical Implementation: + +**Backend (app.py):** +- Flask routes for game operations +- Session management for game state +- JSON data handling for questions +- Helper functions for DRY code + +**Frontend (script.js):** +- API communication with backend +- DOM manipulation for game interface +- Utility functions for common operations +- Event handling for user interactions + +**Database (questions.json):** +- JSON format for easy parsing +- Structured question data with options +- Correct answer validation + +**Styling (style.css):** +- Responsive design principles +- Russian-themed color scheme +- Component-based styling approach + +========================================= + +## TROUBLESHOOTING GUIDE +========================================= + +### Common Issues and Solutions: + +1. **"TypeError: Cannot read properties of undefined"** + - Usually caused by API returning error instead of data + - Solution: Check backend implementation and JSON formatting + +2. **Lifelines not working** + - Check session management for lifeline state + - Verify frontend-backend communication + +3. **Scoring issues** + - Verify prize structure in backend + - Check guaranteed level calculations + +4. **Git merge conflicts** + - Use systematic approach to resolve conflicts + - Communicate with team members about changes + +### Verification Commands: + +```bash +# Run the application +export FLASK_APP=app.py +python -m flask run + +# Check for syntax errors +python -m py_compile app.py +npx eslint static/script.js + +# Validate JSON +python -m json.tool questions.json +``` + +========================================= + +## ASSESSMENT CRITERIA +========================================= + +### Technical Skills: +- Code quality and organization (20%) +- Implementation of requirements (30%) +- Problem-solving and debugging (20%) +- Git usage and collaboration (15%) +- Documentation and comments (15%) + +### Collaboration: +- Team communication +- Code review participation +- Helpfulness to teammates +- Integration contribution + +### Final Product: +- Game functions without errors +- All features implemented +- Visually appealing interface +- Good user experience + +๐ŸŽ‰ Congratulations on completing the Russian Millionaire Quiz Game project! \ No newline at end of file diff --git a/quiz_game/gitea passwords.rtf b/quiz_game/gitea passwords.rtf new file mode 100644 index 0000000..766008e --- /dev/null +++ b/quiz_game/gitea passwords.rtf @@ -0,0 +1,36 @@ +{\rtf1\ansi\ansicpg1252\cocoartf2818 +\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fnil\fcharset0 .SFNS-Regular_wdth_opsz110000_GRAD_wght2580000;} +{\colortbl;\red255\green255\blue255;\red19\green21\blue25;\red255\green255\blue255;} +{\*\expandedcolortbl;;\cssrgb\c9412\c10980\c12941;\cssrgb\c100000\c100000\c100000;} +\paperw11900\paperh16840\margl1440\margr1440\vieww11900\viewh14080\viewkind1 +\deftab720 +\pard\pardeftab720\partightenfactor0 + +\f0\b\fs32 \cf2 \cb3 \expnd0\expndtw0\kerning0 +Inna\ +ai6s4\ +ai6s4@ict.ru\ +\pard\pardeftab720\partightenfactor0 +\cf2 Passwords: Student123!\ +\ +\cf2 \ +\pard\pardeftab720\partightenfactor0 +\cf2 Daniel\ +ai6s3\ +ai6s3@ict.ru\ +\pard\pardeftab720\partightenfactor0 +\cf2 Passwords: Student123!\cf2 \ +\pard\pardeftab720\partightenfactor0 +\cf2 \ +\ +Artyom\ +ai6s2\ +ai6s2@ict.ru\ +\pard\pardeftab720\partightenfactor0 +\cf2 Passwords: Student123!\cf2 \ +\pard\pardeftab720\partightenfactor0 +\cf2 \ +Dima\ +ai6s1\ +ai6s1@ict.ru\ +Passwords: Student123!} \ No newline at end of file diff --git a/quiz_game/questions.json b/quiz_game/questions.json new file mode 100644 index 0000000..aa3aaee --- /dev/null +++ b/quiz_game/questions.json @@ -0,0 +1,27 @@ +[ + { + "question": "What is the capital of Russia?", + "options": ["St. Petersburg", "Moscow", "Kazan", "Sochi"], + "correct_answer": "Moscow" + }, + { + "question": "Which Russian author wrote 'War and Peace'?", + "options": ["Dostoevsky", "Tolstoy", "Pushkin", "Chekhov"], + "correct_answer": "Tolstoy" + }, + { + "question": "What is the traditional Russian soup made with beets?", + "options": ["Shchi", "Borscht", "Solyanka", "Ukha"], + "correct_answer": "Borscht" + }, + { + "question": "Which Russian ruler was known as 'The Terrible'?", + "options": ["Peter I", "Catherine II", "Ivan IV", "Nicholas II"], + "correct_answer": "Ivan IV" + }, + { + "question": "What is the name of the famous Russian ballet company?", + "options": ["Moscow Ballet", "St. Petersburg Ballet", "Bolshoi Ballet", "Russian National Ballet"], + "correct_answer": "Bolshoi Ballet" + } +] \ No newline at end of file diff --git a/quiz_game/requirements.txt b/quiz_game/requirements.txt new file mode 100644 index 0000000..7b5701b --- /dev/null +++ b/quiz_game/requirements.txt @@ -0,0 +1,2 @@ +# requirements.txt +Flask==2.3.3 \ No newline at end of file diff --git a/quiz_game/starter_templates/app.py b/quiz_game/starter_templates/app.py new file mode 100644 index 0000000..8c447e2 --- /dev/null +++ b/quiz_game/starter_templates/app.py @@ -0,0 +1,5 @@ +// 1. This file should contain the main application logic +// TODO: Implement Flask app setup +// TODO: Connect to MongoDB database +// TODO: Implement game state management +// TODO: Create API endpoints for game functionality \ No newline at end of file diff --git a/quiz_game/starter_templates/docs/README.md b/quiz_game/starter_templates/docs/README.md new file mode 100644 index 0000000..f8b660f --- /dev/null +++ b/quiz_game/starter_templates/docs/README.md @@ -0,0 +1,5 @@ +// 1. This file should contain project structure documentation +// TODO: Describe directory structure +// TODO: Document file naming conventions +// TODO: Specify documentation standards +// TODO: Add contribution guidelines \ No newline at end of file diff --git a/quiz_game/starter_templates/docs/roles/backend-developer-dima.md b/quiz_game/starter_templates/docs/roles/backend-developer-dima.md new file mode 100644 index 0000000..273a1e8 --- /dev/null +++ b/quiz_game/starter_templates/docs/roles/backend-developer-dima.md @@ -0,0 +1,55 @@ +// 1. This file should contain backend API documentation +// TODO: Import Flask and PyMongo (line 1-2) +from flask import Flask, session, redirect, url_for, request, jsonify +from flask_pymongo import PyMongo + +// TODO: Connect to MongoDB database (line 4-6) +app = Flask(__name__) +app.config['MONGO_URI'] = 'mongodb://localhost:27017/student_db' +mongo = PyMongo(app) + +// TODO: Define API endpoint for getting questions (line 8-10) +@app.route('/get_question') +def get_question(): + question_num = session.get('current_question', 0) + question = mongo.db.questions.find_one({"question_number": question_num}) + + if question: + return jsonify({ + "question": question['question'], + "options": question['options'], + "question_number": question_num, + "current_prize": calculate_prize(question_num) + }) + else: + return jsonify({"game_over": True, "final_score": calculate_final_score()}) + +// TODO: Define API endpoint for submitting answers (line 12-14) +@app.route('/answer', methods=['POST']) +def answer_question(): + user_answer = request.json.get('answer') + question_num = session.get('current_question', 0) + current_question = mongo.db.questions.find_one({"question_number": question_num}) + + is_correct = current_question['options'][current_question['correct_answer']] == user_answer + + if is_correct: + session['current_question'] = question_num + 1 + return jsonify({ + "correct": True, + "correct_answer": current_question['correct_answer'], + "game_over": question_num + 1 >= TOTAL_QUESTIONS + }) + else: + return jsonify({ + "correct": False, + "correct_answer": current_question['correct_answer'], + "game_over": True + }) + +// TODO: Add error handling for database connection (line 16-18) +try: + mongo.db.command("ping") + print("Successfully connected to MongoDB!") +except Exception as e: + print(f"MongoDB connection error: {e}") \ No newline at end of file diff --git a/quiz_game/starter_templates/docs/roles/database-designer-danil.md b/quiz_game/starter_templates/docs/roles/database-designer-danil.md new file mode 100644 index 0000000..e6e003a --- /dev/null +++ b/quiz_game/starter_templates/docs/roles/database-designer-danil.md @@ -0,0 +1,45 @@ +// 1. This file should contain database connection information +// TODO: Import MongoDB driver (line 1) +import pymongo + +// TODO: Connect to MongoDB using the connection URI (line 3-5) +client = pymongo.MongoClient("mongodb://localhost:27017/") + +// TODO: Select the appropriate database (line 7) +db = client["student_db"] + +// TODO: Select the questions collection (line 9) +questions_collection = db["questions"] + +// TODO: Add error handling for database connection (line 11) +try: + client.admin.command('ping') + print("Successfully connected to MongoDB!") +except Exception as e: + print(f"MongoDB connection error: {e}") + +// 2. Database population instructions (new section) +// TODO: Create function to insert questions into database (line 13-25) +def insert_questions(): + questions = [ + { + "question_number": 0, + "question": "What is the capital of Russia?", + "options": ["Moscow", "Saint Petersburg", "Novosibirsk", "Yekaterinburg"], + "correct_answer": 0 + }, + { + "question_number": 1, + "question": "Which river is the longest in Russia?", + "options": ["Volga", "Yenisey", "Ob", "Amur"], + "correct_answer": 1 + } + ] + + # Insert questions into collection + db.questions.insert_many(questions) + print("Questions inserted successfully!") + +// TODO: Call insert_questions function (line 27) +if __name__ == "__main__":: + insert_questions() \ No newline at end of file diff --git a/quiz_game/starter_templates/docs/roles/frontend-developer-inna.md b/quiz_game/starter_templates/docs/roles/frontend-developer-inna.md new file mode 100644 index 0000000..070178c --- /dev/null +++ b/quiz_game/starter_templates/docs/roles/frontend-developer-inna.md @@ -0,0 +1,46 @@ +// 1. This file should contain frontend implementation instructions + +// TODO: Create HTML structure with game container (line 1-5) + + + + + Russian Quiz + + +// TODO: Add question display elements (line 7-10) + +
+

Russian Quiz

+
Prize: 0 โ‚ฝ
+ +
+
Question 1/5
+
Loading...
+ +
+ +
+ +
+
+ +// TODO: Create answer option buttons (line 12-15) +
+ +
+ + + +// TODO: Implement game controls and lifelines (line 17-20) + + + + + +// TODO: Add game over screen UI (line 22-25) +// Game over screen is already included above as part of the main structure \ No newline at end of file diff --git a/quiz_game/starter_templates/static/script.js b/quiz_game/starter_templates/static/script.js new file mode 100644 index 0000000..ddc4447 --- /dev/null +++ b/quiz_game/starter_templates/static/script.js @@ -0,0 +1,5 @@ +// 1. This file should contain the game logic +// TODO: Implement question loading from API +// TODO: Implement answer handling +// TODO: Implement lifeline functionality +// TODO: Add event listeners for game controls \ No newline at end of file diff --git a/quiz_game/starter_templates/static/style.css b/quiz_game/starter_templates/static/style.css new file mode 100644 index 0000000..76822f4 --- /dev/null +++ b/quiz_game/starter_templates/static/style.css @@ -0,0 +1,6 @@ +/* 1. This file should contain basic styling for the game + * TODO: Add styles for game container + * TODO: Style question display elements + * TODO: Style answer options + * TODO: Add styles for game controls and lifelines + */ \ No newline at end of file diff --git a/quiz_game/starter_templates/templates/game.html b/quiz_game/starter_templates/templates/game.html new file mode 100644 index 0000000..1028931 --- /dev/null +++ b/quiz_game/starter_templates/templates/game.html @@ -0,0 +1,5 @@ +// 1. This file should contain game HTML structure +// TODO: Add game container +// TODO: Add question display elements +// TODO: Add answer options container +// TODO: Add game controls and lifelines buttons \ No newline at end of file diff --git a/quiz_game/starter_templates/templates/index.html b/quiz_game/starter_templates/templates/index.html new file mode 100644 index 0000000..98a7f54 --- /dev/null +++ b/quiz_game/starter_templates/templates/index.html @@ -0,0 +1,5 @@ +// 1. This file should contain the main page structure +// TODO: Add welcome message +// TODO: Add game start button +// TODO: Add instructions section +// TODO: Add footer with credits \ No newline at end of file diff --git a/quiz_game/static/script.js b/quiz_game/static/script.js new file mode 100644 index 0000000..c051f66 --- /dev/null +++ b/quiz_game/static/script.js @@ -0,0 +1,149 @@ +// script.js +let currentQuestion = null; + +// Utility function for making API requests +function apiRequest(url, options = {}) { + return fetch(url, options) + .then(response => response.json()) + .catch(error => { + console.error('Error:', error); + throw error; + }); +} + +// Utility function for updating element text content +function updateElementText(id, text) { + const element = document.getElementById(id); + if (element) { + element.textContent = text; + } +} + +// Utility function for showing/hiding elements +function toggleElementVisibility(id, show = true) { + const element = document.getElementById(id); + if (element) { + element.style.display = show ? 'block' : 'none'; + } +} + +function loadQuestion() { + apiRequest('/get_question') + .then(data => { + if (data.game_over) { + endGame(data.final_score); + return; + } + + currentQuestion = data; + displayQuestion(data); + }) + .catch(error => console.error('Error:', error)); +} + +function displayQuestion(data) { + updateElementText('q-number', data.question_number); + updateElementText('question-text', data.question); + updateElementText('prize', data.current_prize); + + const optionsContainer = document.getElementById('options'); + optionsContainer.innerHTML = ''; + + data.options.forEach((option, index) => { + const optionElement = document.createElement('div'); + optionElement.className = 'option'; + optionElement.textContent = option; + optionElement.onclick = () => selectAnswer(option); + optionsContainer.appendChild(optionElement); + }); + + // Reset result display + toggleElementVisibility('result', false); + const result = document.getElementById('result'); + if (result) { + result.className = 'result'; + } +} + +function selectAnswer(answer) { + apiRequest('/answer', { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify({ answer: answer }) + }) + .then(data => { + const result = document.getElementById('result'); + if (result) { + result.style.display = 'block'; + + if (data.correct) { + result.textContent = 'Correct!'; + result.className = 'result correct'; + + setTimeout(() => { + if (data.game_over) { + endGame(data.final_score); + } else { + loadQuestion(); + } + }, 1500); + } else { + result.textContent = `Wrong! Correct answer: ${data.correct_answer}`; + result.className = 'result incorrect'; + + setTimeout(() => { + endGame(data.final_score); + }, 2000); + } + } + }) + .catch(error => console.error('Error:', error)); +} + +function useFiftyFifty() { + const lifelineBtn = document.querySelector('.lifeline'); + if (lifelineBtn) { + lifelineBtn.disabled = true; + } + + apiRequest('/lifeline/fifty_fifty') + .then(data => { + if (data.error) { + alert(data.error); + if (lifelineBtn) { + lifelineBtn.disabled = false; + } + return; + } + + // Hide two wrong options + const options = document.querySelectorAll('.option'); + data.remove_indices.forEach(index => { + if (options[index]) { + options[index].style.display = 'none'; + } + }); + }) + .catch(error => { + console.error('Error:', error); + if (lifelineBtn) { + lifelineBtn.disabled = false; + } + }); +} + +function endGame(score) { + updateElementText('final-prize', score); + toggleElementVisibility('game-over', true); + toggleElementVisibility('question-box', false); + toggleElementVisibility('lifeline', false); +} + +function restartGame() { + window.location.href = '/start'; +} + +// Start the game when page loads +if (window.location.pathname === '/start') { + loadQuestion(); +} \ No newline at end of file diff --git a/quiz_game/static/style.css b/quiz_game/static/style.css new file mode 100644 index 0000000..bc60293 --- /dev/null +++ b/quiz_game/static/style.css @@ -0,0 +1,109 @@ +/* style.css */ +body { + font-family: Arial, sans-serif; + max-width: 600px; + margin: 0 auto; + padding: 20px; + background: #f0f0f0; +} + +.container { + background: white; + padding: 20px; + border-radius: 10px; + box-shadow: 0 2px 5px rgba(0,0,0,0.1); +} + +h1 { + color: #1a237e; + text-align: center; +} + +.score { + text-align: center; + font-size: 1.2em; + margin: 10px 0; + color: #d32f2f; +} + +.question-box { + background: #e3f2fd; + padding: 15px; + border-radius: 8px; + margin: 15px 0; +} + +.question-number { + font-weight: bold; + margin-bottom: 10px; +} + +.question { + font-size: 1.1em; + margin-bottom: 15px; +} + +.options { + display: grid; + gap: 8px; +} + +.option { + background: #2196f3; + color: white; + padding: 10px; + border-radius: 5px; + cursor: pointer; + text-align: center; +} + +.option:hover { + background: #1976d2; +} + +.option.correct { + background: #4caf50; +} + +.option.wrong { + background: #f44336; +} + +.result { + margin-top: 10px; + padding: 10px; + border-radius: 5px; + text-align: center; + display: none; +} + +.result.correct { + background: #c8e6c9; + color: #2e7d32; +} + +.result.incorrect { + background: #ffcdd2; + color: #c62828; +} + +.start-btn, .lifeline { + background: #ff9800; + color: white; + border: none; + padding: 10px 20px; + border-radius: 5px; + cursor: pointer; + display: block; + margin: 10px auto; +} + +.lifeline:disabled { + background: #ccc; + cursor: not-allowed; +} + +.game-over { + text-align: center; + padding: 20px; +} \ No newline at end of file diff --git a/quiz_game/templates/game.html b/quiz_game/templates/game.html new file mode 100644 index 0000000..2a867fc --- /dev/null +++ b/quiz_game/templates/game.html @@ -0,0 +1,37 @@ + + + + + + + Russian Quiz - Game + + + +
+

Russian Quiz

+
Prize: 0 โ‚ฝ
+ +
+
Question 1/5
+
Loading...
+ +
+ +
+ +
+
+ + + + +
+ + + + \ No newline at end of file diff --git a/quiz_game/templates/index.html b/quiz_game/templates/index.html new file mode 100644 index 0000000..0591a67 --- /dev/null +++ b/quiz_game/templates/index.html @@ -0,0 +1,23 @@ + + + + + + + Russian Quiz Game + + + +
+

Russian Quiz

+

Answer questions about Russian culture!

+ +
+ + + + \ No newline at end of file