forked from technolyceum/ai6-m2
Added instruction sheets
This commit is contained in:
328
Artyom - Graphics Designer Instructions.txt
Normal file
328
Artyom - Graphics Designer Instructions.txt
Normal file
@@ -0,0 +1,328 @@
|
||||
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:
|
||||
|
||||
header {
|
||||
text-align: center;
|
||||
margin-bottom: 30px;
|
||||
padding: 20px;
|
||||
background: linear-gradient(90deg, #1a2a6c, #b21f1f);
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
|
||||
border: 2px solid #fdbb2d;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 3rem;
|
||||
margin-bottom: 10px;
|
||||
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
color: #fdbb2d;
|
||||
}
|
||||
|
||||
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-container {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
padding: 20px;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
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: #fdbb2d;
|
||||
color: #1a2a6c;
|
||||
padding: 15px;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.option:hover {
|
||||
background: #e6a923;
|
||||
}
|
||||
|
||||
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:
|
||||
|
||||
.lifelines {
|
||||
background: rgba(255, 255, 255, 0.15);
|
||||
padding: 20px;
|
||||
border-radius: 15px;
|
||||
border: 1px solid rgba(253, 187, 45, 0.3);
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.lifelines h3 {
|
||||
color: #fdbb2d;
|
||||
text-align: center;
|
||||
margin-bottom: 15px;
|
||||
font-size: 1.3rem;
|
||||
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.lifeline-buttons {
|
||||
display: flex;
|
||||
gap: 15px;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.lifeline-btn {
|
||||
background: linear-gradient(135deg, #1a2a6c, #2a3a8c);
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 12px 20px;
|
||||
border-radius: 25px;
|
||||
cursor: pointer;
|
||||
font-weight: bold;
|
||||
transition: all 0.3s ease;
|
||||
border: 2px solid #fdbb2d;
|
||||
min-width: 120px;
|
||||
}
|
||||
|
||||
.lifeline-btn:hover:not(:disabled) {
|
||||
background: linear-gradient(135deg, #2a3a8c, #1a2a6c);
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.lifeline-btn:disabled {
|
||||
background: #666;
|
||||
cursor: not-allowed;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.lifeline-result {
|
||||
background: rgba(253, 187, 45, 0.2);
|
||||
padding: 15px;
|
||||
border-radius: 10px;
|
||||
margin-top: 15px;
|
||||
text-align: center;
|
||||
border: 1px solid #fdbb2d;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
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: 40px;
|
||||
background: rgba(255, 255, 255, 0.15);
|
||||
border-radius: 20px;
|
||||
border: 3px solid #fdbb2d;
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
|
||||
backdrop-filter: blur(10px);
|
||||
max-width: 500px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.game-over-screen h2 {
|
||||
font-size: 3rem;
|
||||
margin-bottom: 20px;
|
||||
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.game-over-screen p {
|
||||
font-size: 1.3rem;
|
||||
margin-bottom: 25px;
|
||||
color: #fdbb2d;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.game-over-screen button {
|
||||
background: linear-gradient(135deg, #1a2a6c, #b21f1f);
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 15px 30px;
|
||||
border-radius: 25px;
|
||||
font-size: 1.2rem;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
border: 2px solid #fdbb2d;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.game-over-screen button:hover {
|
||||
background: linear-gradient(135deg, #b21f1f, #1a2a6c);
|
||||
transform: translateY(-3px);
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
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!
|
||||
154
Danil - Database Designer Instructions.txt
Normal file
154
Danil - Database Designer Instructions.txt
Normal file
@@ -0,0 +1,154 @@
|
||||
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: Understand the Question Format (10 minutes)
|
||||
Open questions.json and look at the example:
|
||||
|
||||
[
|
||||
{
|
||||
"question": "EXAMPLE: What is the capital of Russia?",
|
||||
"options": ["St. Petersburg", "Moscow", "Kazan", "Sochi"],
|
||||
"correct_answer": "Moscow"
|
||||
}
|
||||
]
|
||||
|
||||
Each question needs:
|
||||
- question: The actual question text
|
||||
- options: 4 possible answers (A, B, C, D)
|
||||
- correct_answer: The right answer (must match exactly)
|
||||
|
||||
Step 3: Create Your First 5 Questions (30 minutes)
|
||||
DELETE everything in questions.json and TYPE THIS instead:
|
||||
|
||||
[
|
||||
{
|
||||
"question": "What is the capital of Russia?",
|
||||
"options": ["St. Petersburg", "Moscow", "Kazan", "Sochi"],
|
||||
"correct_answer": "Moscow"
|
||||
},
|
||||
{
|
||||
"question": "Which Russian composer wrote the music for Swan Lake?",
|
||||
"options": ["Tchaikovsky", "Rachmaninoff", "Shostakovich", "Stravinsky"],
|
||||
"correct_answer": "Tchaikovsky"
|
||||
},
|
||||
{
|
||||
"question": "What is the traditional Russian doll called?",
|
||||
"options": ["Babushka", "Matryoshka", "Krasnaya", "Kukla"],
|
||||
"correct_answer": "Matryoshka"
|
||||
},
|
||||
{
|
||||
"question": "Which Russian river is the longest in Europe?",
|
||||
"options": ["Don River", "Volga River", "Yenisei River", "Lena River"],
|
||||
"correct_answer": "Volga River"
|
||||
},
|
||||
{
|
||||
"question": "What is the name of the Russian space agency?",
|
||||
"options": ["Rosaviakosmos", "Roscosmos", "Soviet Space Program", "Starfleet Russia"],
|
||||
"correct_answer": "Roscosmos"
|
||||
}
|
||||
]
|
||||
|
||||
Save and push:
|
||||
git add questions.json
|
||||
git commit -m "feat: added first 5 Russian questions"
|
||||
git push origin danil-database-work
|
||||
|
||||
📋 LESSON 3-4: MORE RUSSIAN CULTURE QUESTIONS
|
||||
|
||||
Step 4: Add 5 More Questions (40 minutes)
|
||||
Add these questions AFTER your first 5 (don't delete the first ones!):
|
||||
|
||||
{
|
||||
"question": "Which Russian leader introduced the policy of perestroika?",
|
||||
"options": ["Vladimir Putin", "Joseph Stalin", "Mikhail Gorbachev", "Boris Yeltsin"],
|
||||
"correct_answer": "Mikhail Gorbachev"
|
||||
},
|
||||
{
|
||||
"question": "What is borscht?",
|
||||
"options": ["A type of Russian bread", "A fermented drink", "A beet soup", "A meat pastry"],
|
||||
"correct_answer": "A beet soup"
|
||||
},
|
||||
{
|
||||
"question": "Which animal appears on the Russian coat of arms?",
|
||||
"options": ["Bear", "Eagle", "Wolf", "Lion"],
|
||||
"correct_answer": "Eagle"
|
||||
},
|
||||
{
|
||||
"question": "What is the currency of Russia?",
|
||||
"options": ["Ruble", "Krone", "Zloty", "Forint"],
|
||||
"correct_answer": "Ruble"
|
||||
},
|
||||
{
|
||||
"question": "Which Russian city was formerly called Stalingrad?",
|
||||
"options": ["Moscow", "Volgograd", "Yekaterinburg", "Kursk"],
|
||||
"correct_answer": "Volgograd"
|
||||
}
|
||||
|
||||
Save and push:
|
||||
git add questions.json
|
||||
git commit -m "feat: added 5 more Russian culture questions"
|
||||
git push origin danil-database-work
|
||||
|
||||
📋 LESSON 5-6: FINAL QUESTIONS & DIFFICULT ONES
|
||||
|
||||
Step 5: Add the Last 5 Challenging Questions (40 minutes)
|
||||
Add these 5 final questions:
|
||||
|
||||
{
|
||||
"question": "What is the name of the famous Russian ballet company?",
|
||||
"options": ["Moscow Ballet", "Bolshoi Ballet", "St. Petersburg Ballet", "Imperial Russian Ballet"],
|
||||
"correct_answer": "Bolshoi Ballet"
|
||||
},
|
||||
{
|
||||
"question": "Which Russian scientist created the periodic table of elements?",
|
||||
"options": ["Mikhail Lomonosov", "Dmitri Mendeleev", "Ivan Pavlov", "Nikola Tesla"],
|
||||
"correct_answer": "Dmitri Mendeleev"
|
||||
},
|
||||
{
|
||||
"question": "What was Sputnik famous for?",
|
||||
"options": ["First animal in space", "First human in space", "First satellite in space", "First space station"],
|
||||
"correct_answer": "First satellite in space"
|
||||
},
|
||||
{
|
||||
"question": "Which Russian mountain range separates Europe from Asia?",
|
||||
"options": ["Caucasus Mountains", "Ural Mountains", "Altai Mountains", "Sayan Mountains"],
|
||||
"correct_answer": "Ural Mountains"
|
||||
},
|
||||
{
|
||||
"question": "Who was the first woman in space from Russia?",
|
||||
"options": ["Svetlana Savitskaya", "Yelena Kondakova", "Valentina Tereshkova", "Anna Kikina"],
|
||||
"correct_answer": "Valentina Tereshkova"
|
||||
}
|
||||
|
||||
Step 6: Test Your Questions (10 minutes)
|
||||
Make sure you have exactly 15 questions total!
|
||||
|
||||
Final push:
|
||||
git add questions.json
|
||||
git commit -m "feat: completed all 15 Russian questions"
|
||||
git push origin danil-database-work
|
||||
|
||||
✅ DANIL'S COMPLETION CHECKLIST
|
||||
☐ 15 questions total (no more, no less)
|
||||
☐ All questions about Russian culture/history
|
||||
☐ Each question has 4 options
|
||||
☐ Correct answers are accurate
|
||||
☐ No spelling mistakes
|
||||
☐ All questions are different topics
|
||||
☐ All code pushed to your branch
|
||||
☐ Created Pull Request for teacher to review
|
||||
|
||||
🎉 Congratulations Danil! You created the entire question database!
|
||||
262
Dima - Backend Developer Instructions.txt
Normal file
262
Dima - Backend Developer Instructions.txt
Normal file
@@ -0,0 +1,262 @@
|
||||
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 8:
|
||||
|
||||
# TODO: Dima - Implement prize structure (15 levels)
|
||||
PRIZE_LEVELS = [
|
||||
# Format: [1000, 2000, 4000, 8000, 16000, 32000, ... up to 15 values]
|
||||
]
|
||||
|
||||
DELETE those lines and TYPE THIS instead:
|
||||
|
||||
PRIZE_LEVELS = [
|
||||
1000, # Level 1 - Question 1
|
||||
2000, # Level 2 - Question 2
|
||||
4000, # Level 3 - Question 3
|
||||
8000, # Level 4 - Question 4
|
||||
16000, # Level 5 - Question 5 ✅ Safe level!
|
||||
32000, # Level 6 - Question 6
|
||||
64000, # Level 7 - Question 7
|
||||
128000, # Level 8 - Question 8
|
||||
256000, # Level 9 - Question 9
|
||||
512000, # Level 10 - Question 10 ✅ Safe level!
|
||||
1024000, # Level 11 - Question 11
|
||||
2048000, # Level 12 - Question 12
|
||||
4096000, # Level 13 - Question 13
|
||||
8192000, # Level 14 - Question 14
|
||||
16384000 # Level 15 - Question 15 🏆 JACKPOT!
|
||||
]
|
||||
|
||||
Save the file and test:
|
||||
git add app.py
|
||||
git commit -m "feat: added prize money system"
|
||||
git push origin dima-backend-work
|
||||
|
||||
📋 LESSON 3-4: GAME SESSION & QUESTIONS
|
||||
|
||||
Step 3: Make the Game Start Working (25 minutes)
|
||||
Find these lines around line 25:
|
||||
|
||||
@app.route('/start')
|
||||
def start_game():
|
||||
# TODO: Dima - Initialize game session
|
||||
# Set up: score, current_question, lifelines, questions
|
||||
return render_template('game.html')
|
||||
|
||||
DELETE those lines and TYPE THIS instead:
|
||||
|
||||
@app.route('/start')
|
||||
def start_game():
|
||||
# Initialize a new game session
|
||||
session['score'] = 0
|
||||
session['current_question'] = 0
|
||||
session['guaranteed_prize'] = 0
|
||||
session['lifelines'] = {
|
||||
'fifty_fifty': True,
|
||||
'phone_friend': True
|
||||
}
|
||||
session['game_over'] = False
|
||||
|
||||
# Load questions and shuffle them
|
||||
with open('questions.json', 'r') as f:
|
||||
session['questions'] = json.load(f)
|
||||
|
||||
return render_template('game.html')
|
||||
|
||||
Step 4: Make Questions Appear (15 minutes)
|
||||
Find these lines around line 35:
|
||||
|
||||
@app.route('/get_question')
|
||||
def get_question():
|
||||
# TODO: Dima - Serve questions to frontend
|
||||
# Return: question, options, question_number, current_prize
|
||||
return jsonify({"error": "Not implemented"})
|
||||
|
||||
DELETE those lines and TYPE THIS instead:
|
||||
|
||||
@app.route('/get_question')
|
||||
def get_question():
|
||||
if session.get('game_over'):
|
||||
return jsonify({'error': 'Game over'})
|
||||
|
||||
question_index = session.get('current_question', 0)
|
||||
questions = session.get('questions', [])
|
||||
|
||||
if question_index >= len(questions):
|
||||
session['game_over'] = True
|
||||
return jsonify({'game_over': True, 'final_score': session['score']})
|
||||
|
||||
question = questions[question_index]
|
||||
current_prize = PRIZE_LEVELS[question_index] if question_index < len(PRIZE_LEVELS) else 0
|
||||
|
||||
return jsonify({
|
||||
'question': question['question'],
|
||||
'options': question['options'],
|
||||
'question_number': question_index + 1,
|
||||
'total_questions': len(questions),
|
||||
'current_prize': current_prize,
|
||||
'score': session['score']
|
||||
})
|
||||
|
||||
Save and push:
|
||||
git add app.py
|
||||
git commit -m "feat: game start and questions working"
|
||||
git push origin dima-backend-work
|
||||
|
||||
📋 LESSON 5-6: ANSWER CHECKING & LIFELINES
|
||||
|
||||
Step 5: Make Answer Checking Work (30 minutes)
|
||||
Find these lines around line 45:
|
||||
|
||||
@app.route('/answer', methods=['POST'])
|
||||
def check_answer():
|
||||
# TODO: Dima - Validate answers and update score
|
||||
# Check if answer is correct, update session, return result
|
||||
return jsonify({"error": "Not implemented"})
|
||||
|
||||
DELETE those lines and TYPE THIS instead:
|
||||
|
||||
@app.route('/answer', methods=['POST'])
|
||||
def check_answer():
|
||||
if session.get('game_over'):
|
||||
return jsonify({'error': 'Game over'})
|
||||
|
||||
data = request.json
|
||||
user_answer = data.get('answer')
|
||||
question_index = session.get('current_question', 0)
|
||||
questions = session.get('questions', [])
|
||||
|
||||
if question_index >= len(questions):
|
||||
return jsonify({'error': 'No more questions'})
|
||||
|
||||
question = questions[question_index]
|
||||
correct_answer = question['correct_answer']
|
||||
prize_won = PRIZE_LEVELS[question_index] if question_index < len(PRIZE_LEVELS) else 0
|
||||
|
||||
if user_answer == correct_answer:
|
||||
# Correct answer! Update score
|
||||
session['score'] = prize_won
|
||||
|
||||
# Update guaranteed prize if reached safe level
|
||||
if (question_index + 1) in GUARANTEED_LEVELS:
|
||||
session['guaranteed_prize'] = prize_won
|
||||
|
||||
session['current_question'] += 1
|
||||
|
||||
# Check if game is won
|
||||
if session['current_question'] >= len(questions):
|
||||
session['game_over'] = True
|
||||
return jsonify({
|
||||
'correct': True,
|
||||
'score': session['score'],
|
||||
'prize_won': prize_won,
|
||||
'game_won': True,
|
||||
'final_score': session['score']
|
||||
})
|
||||
|
||||
return jsonify({
|
||||
'correct': True,
|
||||
'score': session['score'],
|
||||
'prize_won': prize_won,
|
||||
'next_question': session['current_question'] < len(questions)
|
||||
})
|
||||
else:
|
||||
# Wrong answer - game over!
|
||||
session['game_over'] = True
|
||||
final_prize = session.get('guaranteed_prize', 0)
|
||||
|
||||
return jsonify({
|
||||
'correct': False,
|
||||
'correct_answer': correct_answer,
|
||||
'game_over': True,
|
||||
'final_score': final_prize,
|
||||
'prize_lost': prize_won
|
||||
})
|
||||
|
||||
Step 6: Create Lifelines (20 minutes)
|
||||
Find these lines around line 55:
|
||||
|
||||
@app.route('/lifeline/<lifeline_name>')
|
||||
def use_lifeline(lifeline_name):
|
||||
# TODO: Dima - Implement 50:50 and Phone a Friend
|
||||
# Note: Ask AI will be version 2
|
||||
return jsonify({"error": "Not implemented"})
|
||||
|
||||
DELETE those lines and TYPE THIS instead:
|
||||
|
||||
@app.route('/lifeline/<lifeline_name>')
|
||||
def use_lifeline(lifeline_name):
|
||||
if session.get('game_over'):
|
||||
return jsonify({'error': 'Game over'})
|
||||
|
||||
if lifeline_name not in session['lifelines']:
|
||||
return jsonify({'error': 'Invalid lifeline'})
|
||||
|
||||
if not session['lifelines'][lifeline_name]:
|
||||
return jsonify({'error': 'Lifeline already used'})
|
||||
|
||||
question_index = session.get('current_question', 0)
|
||||
questions = session.get('questions', [])
|
||||
question = questions[question_index]
|
||||
|
||||
if lifeline_name == 'fifty_fifty':
|
||||
# Remove two wrong answers
|
||||
correct_answer = question['correct_answer']
|
||||
options = question['options'].copy()
|
||||
|
||||
# Keep correct answer + one wrong answer
|
||||
remaining_options = [correct_answer]
|
||||
wrong_options = [opt for opt in options if opt != correct_answer]
|
||||
remaining_options.append(random.choice(wrong_options))
|
||||
random.shuffle(remaining_options)
|
||||
|
||||
session['lifelines'][lifeline_name] = False
|
||||
return jsonify({
|
||||
'lifeline': 'fifty_fifty',
|
||||
'remaining_options': remaining_options
|
||||
})
|
||||
|
||||
elif lifeline_name == 'phone_friend':
|
||||
# Phone a friend simulation
|
||||
correct_answer = question['correct_answer']
|
||||
friend_names = ["Ivan", "Svetlana", "Dmitri", "Anastasia"]
|
||||
confidence = random.randint(50, 90)
|
||||
|
||||
session['lifelines'][lifeline_name] = False
|
||||
return jsonify({
|
||||
'lifeline': 'phone_friend',
|
||||
'friend_says': f"{random.choice(friend_names)} says: 'I think it's {correct_answer}, but I'm only {confidence}% sure'"
|
||||
})
|
||||
|
||||
Final push:
|
||||
git add app.py
|
||||
git commit -m "feat: completed backend with answers and lifelines"
|
||||
git push origin dima-backend-work
|
||||
|
||||
✅ DIMA'S COMPLETION CHECKLIST
|
||||
☐ Prize money system (15 levels) working
|
||||
☐ Game starts and creates new session
|
||||
☐ Questions load from JSON file
|
||||
☐ Answer checking works (right/wrong)
|
||||
☐ 50:50 lifeline removes 2 wrong answers
|
||||
☐ Phone a Friend gives hints
|
||||
☐ Safe levels save your money at Q5 and Q10
|
||||
☐ All code pushed to your branch
|
||||
☐ Created Pull Request for teacher to review
|
||||
|
||||
🎉 Congratulations Dima! You built the entire game engine!
|
||||
349
Inna - Frontend Developer Instructions.txt
Normal file
349
Inna - Frontend Developer Instructions.txt
Normal file
@@ -0,0 +1,349 @@
|
||||
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: Make the Game Load Questions (30 minutes)
|
||||
Open static/script.js and find the loadQuestion function.
|
||||
|
||||
DELETE these lines:
|
||||
|
||||
function loadQuestion() {
|
||||
fetch('/get_question')
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.error) {
|
||||
console.error(data.error);
|
||||
return;
|
||||
}
|
||||
if (data.game_over) {
|
||||
endGame(data.final_score);
|
||||
return;
|
||||
}
|
||||
gameState.currentQuestion = data;
|
||||
displayQuestion(data);
|
||||
})
|
||||
.catch(error => console.error('Error:', error));
|
||||
}
|
||||
|
||||
TYPE THIS instead:
|
||||
|
||||
function loadQuestion() {
|
||||
fetch('/get_question')
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.error) {
|
||||
alert("Game error: " + data.error);
|
||||
return;
|
||||
}
|
||||
if (data.game_over) {
|
||||
endGame(data.final_score);
|
||||
return;
|
||||
}
|
||||
gameState.currentQuestion = data;
|
||||
displayQuestion(data);
|
||||
})
|
||||
.catch(error => {
|
||||
alert("Network error - check if server is running!");
|
||||
console.error('Error:', error);
|
||||
});
|
||||
}
|
||||
|
||||
Step 3: Make Questions Display Properly (20 minutes)
|
||||
Find the displayQuestion function.
|
||||
|
||||
DELETE these lines:
|
||||
|
||||
function displayQuestion(questionData) {
|
||||
document.getElementById('question-num').textContent = questionData.question_number;
|
||||
document.getElementById('question-text').textContent = questionData.question;
|
||||
|
||||
const optionsContainer = document.getElementById('options-container');
|
||||
optionsContainer.innerHTML = '';
|
||||
|
||||
const optionLetters = ['A', 'B', 'C', 'D'];
|
||||
questionData.options.forEach((option, index) => {
|
||||
const optionElement = document.createElement('div');
|
||||
optionElement.className = 'option';
|
||||
optionElement.textContent = `${optionLetters[index]}. ${option}`;
|
||||
optionElement.onclick = () => selectAnswer(option);
|
||||
optionsContainer.appendChild(optionElement);
|
||||
});
|
||||
|
||||
document.getElementById('feedback').style.display = 'none';
|
||||
gameState.optionsDisabled = false;
|
||||
}
|
||||
|
||||
TYPE THIS instead:
|
||||
|
||||
function displayQuestion(questionData) {
|
||||
// Update question number and text
|
||||
document.getElementById('question-num').textContent = questionData.question_number;
|
||||
document.getElementById('question-text').textContent = questionData.question;
|
||||
document.getElementById('current-prize').textContent = questionData.current_prize;
|
||||
|
||||
// Clear previous options
|
||||
const optionsContainer = document.getElementById('options-container');
|
||||
optionsContainer.innerHTML = '';
|
||||
|
||||
// Create new option buttons
|
||||
const optionLetters = ['A', 'B', 'C', 'D'];
|
||||
questionData.options.forEach((option, index) => {
|
||||
const optionElement = document.createElement('div');
|
||||
optionElement.className = 'option';
|
||||
optionElement.textContent = `${optionLetters[index]}. ${option}`;
|
||||
optionElement.onclick = () => selectAnswer(option);
|
||||
optionsContainer.appendChild(optionElement);
|
||||
});
|
||||
|
||||
// Reset feedback and enable clicking
|
||||
document.getElementById('feedback').style.display = 'none';
|
||||
document.getElementById('feedback').className = 'feedback';
|
||||
gameState.optionsDisabled = false;
|
||||
|
||||
// Clear lifeline result
|
||||
document.getElementById('lifeline-result').textContent = '';
|
||||
}
|
||||
|
||||
Save and push:
|
||||
git add static/script.js
|
||||
git commit -m "feat: basic question loading working"
|
||||
git push origin inna-frontend-work
|
||||
|
||||
📋 LESSON 3-4: ANSWER HANDLING
|
||||
|
||||
Step 4: Make Answer Selection Work (30 minutes)
|
||||
Find the selectAnswer function.
|
||||
|
||||
DELETE these lines:
|
||||
|
||||
function selectAnswer(selectedAnswer) {
|
||||
if (gameState.optionsDisabled) return;
|
||||
gameState.optionsDisabled = true;
|
||||
|
||||
fetch('/answer', {
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
body: JSON.stringify({ answer: selectedAnswer })
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
const feedback = document.getElementById('feedback');
|
||||
feedback.style.display = 'block';
|
||||
|
||||
if (data.correct) {
|
||||
feedback.textContent = 'Correct! 🎉';
|
||||
feedback.className = 'feedback correct';
|
||||
setTimeout(() => {
|
||||
if (data.next_question) loadQuestion();
|
||||
else endGame(data.final_score, true);
|
||||
}, 1500);
|
||||
} else {
|
||||
feedback.textContent = `Incorrect! Correct answer: ${data.correct_answer}`;
|
||||
feedback.className = 'feedback incorrect';
|
||||
setTimeout(() => endGame(data.final_score), 2000);
|
||||
}
|
||||
})
|
||||
.catch(error => console.error('Error:', error));
|
||||
}
|
||||
|
||||
TYPE THIS instead:
|
||||
|
||||
function selectAnswer(selectedAnswer) {
|
||||
// Prevent double-clicking
|
||||
if (gameState.optionsDisabled) return;
|
||||
gameState.optionsDisabled = true;
|
||||
|
||||
// Disable all options while checking
|
||||
document.querySelectorAll('.option').forEach(btn => {
|
||||
btn.style.pointerEvents = 'none';
|
||||
});
|
||||
|
||||
// Send answer to server
|
||||
fetch('/answer', {
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
body: JSON.stringify({ answer: selectedAnswer })
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
const feedback = document.getElementById('feedback');
|
||||
feedback.style.display = 'block';
|
||||
|
||||
if (data.correct) {
|
||||
feedback.textContent = 'Correct! 🎉 +' + data.prize_won + ' ₽';
|
||||
feedback.className = 'feedback correct';
|
||||
|
||||
// Wait then load next question or end game
|
||||
setTimeout(() => {
|
||||
if (data.game_won) {
|
||||
endGame(data.final_score, true);
|
||||
} else if (data.next_question) {
|
||||
loadQuestion();
|
||||
} else {
|
||||
endGame(data.final_score);
|
||||
}
|
||||
}, 2000);
|
||||
} else {
|
||||
feedback.textContent = `Incorrect! Correct answer was: ${data.correct_answer}`;
|
||||
feedback.className = 'feedback incorrect';
|
||||
|
||||
// Highlight correct answer in green
|
||||
document.querySelectorAll('.option').forEach(btn => {
|
||||
if (btn.textContent.includes(data.correct_answer)) {
|
||||
btn.style.background = '#4CAF50';
|
||||
btn.style.color = 'white';
|
||||
}
|
||||
});
|
||||
|
||||
setTimeout(() => endGame(data.final_score), 3000);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
alert("Error sending answer!");
|
||||
console.error('Error:', error);
|
||||
});
|
||||
}
|
||||
|
||||
Step 5: Make Lifelines Work (20 minutes)
|
||||
Find the useLifeline function.
|
||||
|
||||
DELETE these lines:
|
||||
|
||||
function useLifeline(lifelineName) {
|
||||
fetch(`/lifeline/${lifelineName}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.error) {
|
||||
alert(data.error);
|
||||
return;
|
||||
}
|
||||
document.getElementById('lifeline-result').textContent =
|
||||
data.hint || data.friend_says || 'Lifeline used!';
|
||||
})
|
||||
.catch(error => console.error('Error:', error));
|
||||
}
|
||||
|
||||
TYPE THIS instead:
|
||||
|
||||
function useLifeline(lifelineName) {
|
||||
// Disable the lifeline button
|
||||
document.querySelector(`button[onclick="useLifeline('${lifelineName}')"]`).disabled = true;
|
||||
|
||||
fetch(`/lifeline/${lifelineName}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.error) {
|
||||
alert(data.error);
|
||||
document.querySelector(`button[onclick="useLifeline('${lifelineName}')"]`).disabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
const resultElement = document.getElementById('lifeline-result');
|
||||
|
||||
if (lifelineName === 'fifty_fifty') {
|
||||
// Hide the wrong options
|
||||
document.querySelectorAll('.option').forEach(option => {
|
||||
const optionText = option.textContent.substring(3); // Remove "A. ", "B. ", etc.
|
||||
if (!data.remaining_options.includes(optionText)) {
|
||||
option.style.display = 'none';
|
||||
}
|
||||
});
|
||||
resultElement.textContent = 'Two wrong answers removed!';
|
||||
} else if (lifelineName === 'phone_friend') {
|
||||
resultElement.textContent = data.friend_says;
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
alert("Lifeline error!");
|
||||
console.error('Error:', error);
|
||||
});
|
||||
}
|
||||
|
||||
Save and push:
|
||||
git add static/script.js
|
||||
git commit -m "feat: answer handling and lifelines working"
|
||||
git push origin inna-frontend-work
|
||||
|
||||
📋 LESSON 5-6: GAME FLOW COMPLETION
|
||||
|
||||
Step 6: Complete the Game Flow (40 minutes)
|
||||
Find the endGame function.
|
||||
|
||||
DELETE these lines:
|
||||
|
||||
function endGame(finalScore, isWin = false) {
|
||||
document.getElementById('final-prize').textContent = finalScore;
|
||||
document.getElementById('game-over-screen').style.display = 'block';
|
||||
document.querySelector('.game-area').style.display = 'none';
|
||||
}
|
||||
|
||||
TYPE THIS instead:
|
||||
|
||||
function endGame(finalScore, isWin = false) {
|
||||
const finalPrizeElement = document.getElementById('final-prize');
|
||||
const gameOverScreen = document.getElementById('game-over-screen');
|
||||
const gameOverTitle = document.getElementById('game-over-title');
|
||||
const gameOverMessage = document.getElementById('game-over-message');
|
||||
|
||||
finalPrizeElement.textContent = finalScore.toLocaleString();
|
||||
|
||||
if (isWin) {
|
||||
gameOverTitle.innerHTML = '🎉 YOU WIN! 🎉';
|
||||
gameOverTitle.style.color = '#fdbb2d';
|
||||
gameOverMessage.textContent = 'Congratulations! You won the top prize!';
|
||||
} else if (finalScore > 0) {
|
||||
gameOverTitle.textContent = 'Game Over!';
|
||||
gameOverTitle.style.color = '#1a2a6c';
|
||||
gameOverMessage.textContent = 'You reached a guaranteed prize level!';
|
||||
} else {
|
||||
gameOverTitle.textContent = 'Game Over!';
|
||||
gameOverTitle.style.color = '#b21f1f';
|
||||
gameOverMessage.textContent = 'Better luck next time!';
|
||||
}
|
||||
|
||||
gameOverScreen.style.display = 'block';
|
||||
document.querySelector('.game-area').style.display = 'none';
|
||||
}
|
||||
|
||||
Also update the restartGame function:
|
||||
|
||||
DELETE this line:
|
||||
function restartGame() {
|
||||
window.location.href = '/start';
|
||||
}
|
||||
|
||||
TYPE THIS instead:
|
||||
function restartGame() {
|
||||
// Reload the page to start fresh
|
||||
window.location.reload();
|
||||
}
|
||||
|
||||
Final push:
|
||||
git add static/script.js
|
||||
git commit -m "feat: completed frontend game flow"
|
||||
git push origin inna-frontend-work
|
||||
|
||||
✅ INNA'S COMPLETION CHECKLIST
|
||||
☐ Questions load and display correctly
|
||||
☐ Answer buttons work and show feedback
|
||||
☐ Prize money updates when answering
|
||||
☐ 50:50 lifeline hides wrong answers
|
||||
☐ Phone a Friend shows hints
|
||||
☐ Game over screen shows correct messages
|
||||
☐ Restart button works
|
||||
☐ All code pushed to your branch
|
||||
☐ Created Pull Request for teacher to review
|
||||
|
||||
🎉 Congratulations Inna! You built the entire game interface!
|
||||
510
Teacher - Complete Project Manager Guide.txt
Normal file
510
Teacher - Complete Project Manager Guide.txt
Normal file
@@ -0,0 +1,510 @@
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf2818
|
||||
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 AppleColorEmoji;\f2\fnil\fcharset0 AppleSymbols;
|
||||
\f3\fnil\fcharset0 LucidaGrande;}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
{\*\expandedcolortbl;;}
|
||||
\paperw11900\paperh16840\margl1440\margr1440\vieww11900\viewh14080\viewkind1
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0
|
||||
|
||||
\f0\fs24 \cf0 # Teacher - Complete Project Manager Guide.txt\
|
||||
\
|
||||
```\
|
||||
TEACHER - COMPLETE PROJECT MANAGER GUIDE\
|
||||
Russian Millionaire Quiz Game - 6 Lesson Project\
|
||||
\
|
||||
|
||||
\f1 \uc0\u55357 \u56523
|
||||
\f0 YOUR ROLES:\
|
||||
\'95 Team Lead - Guide students through development\
|
||||
\'95 Git Master - Manage repositories and merges\
|
||||
\'95 User Tester - Verify all components work\
|
||||
\'95 Integration Manager - Combine all student work\
|
||||
\
|
||||
|
||||
\f1 \uc0\u55356 \u57263
|
||||
\f0 PROJECT TIMELINE (6 Lessons)\
|
||||
\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
LESSON 1-2: SETUP & FOUNDATION\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
STUDENT GOALS:\
|
||||
\'95 Dima: Implement prize money system in app.py\
|
||||
\'95 Danil: Create first 5 Russian culture questions\
|
||||
\'95 Inna: Make basic question loading work\
|
||||
\'95 Artyom: Start Russian color theme in CSS\
|
||||
\
|
||||
TEACHER TASKS:\
|
||||
\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Setup Verification:\
|
||||
1. Ensure main repo is ready: \
|
||||
https://gitea.techshare.cc/technolyceum/ai6-m2\
|
||||
\
|
||||
2. Verify all students have:\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Forked the repository\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Created their role-specific branch\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 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\
|
||||
```\
|
||||
\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 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\
|
||||
```\
|
||||
\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
LESSON 3-4: CORE DEVELOPMENT\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
STUDENT GOALS:\
|
||||
\'95 Dima: Game session & question loading\
|
||||
\'95 Danil: 10+ questions completed \
|
||||
\'95 Inna: Answer handling system\
|
||||
\'95 Artyom: Enhanced question/option styling\
|
||||
\
|
||||
TEACHER TASKS:\
|
||||
\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Daily Monitoring:\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 All students have pushed latest work\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 No Git conflicts detected\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Students approximately 60% complete\
|
||||
\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Progress Verification Commands:\
|
||||
```bash\
|
||||
# Dima - Session Management:\
|
||||
grep -A 10 "session\\[" app.py\
|
||||
\
|
||||
# Danil - Question Count:\
|
||||
python3 -c "import json; data=json.load(open('questions.json')); print(f'Total: \{len(data)\} questions')"\
|
||||
\
|
||||
# Inna - Answer Handling:\
|
||||
grep -A 5 "selectAnswer" static/script.js\
|
||||
\
|
||||
# Artyom - Enhanced Styling:\
|
||||
grep -c "border-radius.*15\\|box-shadow" static/style.css\
|
||||
```\
|
||||
\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Early Integration Test:\
|
||||
```bash\
|
||||
# Test backend basics:\
|
||||
python3 app.py\
|
||||
# Open http://localhost:5000\
|
||||
# Check: Home page loads? /start works?\
|
||||
```\
|
||||
\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
LESSON 5-6: FEATURE COMPLETION & TESTING\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
STUDENT GOALS:\
|
||||
\'95 Dima: Answer checking & lifelines complete\
|
||||
\'95 Danil: All 15 questions finished\
|
||||
\'95 Inna: Lifelines & game flow working\
|
||||
\'95 Artyom: Complete visual design\
|
||||
\
|
||||
TEACHER TASKS:\
|
||||
\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Final Progress Check:\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 All features implemented\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Students created Pull Requests\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Ready for final integration\
|
||||
\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 PR Review Checklist:\
|
||||
\
|
||||
DIMA'S BACKEND PR:\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 All routes work (/start, /get_question, /answer, /lifeline)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Prize system calculates correctly\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 No syntax errors in app.py\
|
||||
\
|
||||
DANIL'S DATABASE PR:\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Exactly 15 questions\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Russian culture themes\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 No spelling errors\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Plausible wrong answers\
|
||||
\
|
||||
INNA'S FRONTEND PR:\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Questions display correctly\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Answer selection works\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Lifelines functional\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Game flow complete\
|
||||
\
|
||||
ARTYOM'S GRAPHICS PR:\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Russian color theme throughout\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Professional styling\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Good user experience\
|
||||
\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
FINAL INTEGRATION & MERGING\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Merge Strategy (Do in Gitea Web Interface):\
|
||||
1. FIRST: Danil's questions.json (database)\
|
||||
2. SECOND: Dima's app.py (backend)\
|
||||
3. THIRD: Artyom's static/style.css (styling) \
|
||||
4. FOURTH: Inna's templates/ and static/script.js (frontend)\
|
||||
\
|
||||
Merge Commands (Gitea Web):\
|
||||
\'95 Go to each PR\
|
||||
\'95 Click "Merge Pull Request"\
|
||||
\'95 Resolve conflicts if needed (prioritize more complete code)\
|
||||
\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Final Integration Test:\
|
||||
```bash\
|
||||
# After all merges:\
|
||||
git clone https://gitea.techshare.cc/technolyceum/ai6-m2.git final-game\
|
||||
cd final-game\
|
||||
\
|
||||
# Install dependencies:\
|
||||
pip install flask\
|
||||
\
|
||||
# Test complete application:\
|
||||
python3 app.py\
|
||||
\
|
||||
# Manual Testing Checklist:\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Home page loads with Russian theme\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Start game button works\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Questions display with styling\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Answer selection works\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Prize money updates correctly\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 50:50 lifeline removes wrong answers\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Phone a Friend gives hints\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Game over screen appears\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Restart button works\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 No console errors in browser\
|
||||
```\
|
||||
\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
TROUBLESHOOTING GUIDE\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
COMMON ISSUES & SOLUTIONS:\
|
||||
\
|
||||
|
||||
\f1 \uc0\u10060
|
||||
\f0 "ModuleNotFoundError: No module named 'flask'"\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Solution: pip install flask\
|
||||
\
|
||||
|
||||
\f1 \uc0\u10060
|
||||
\f0 JSON syntax error in questions.json\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Solution: Use https://jsonlint.com to validate\
|
||||
\
|
||||
|
||||
\f1 \uc0\u10060
|
||||
\f0 Game starts but no questions appear\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Solution: Check browser console for errors, verify backend routes\
|
||||
\
|
||||
|
||||
\f1 \uc0\u10060
|
||||
\f0 CSS not loading\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Solution: Check static file paths, clear browser cache\
|
||||
\
|
||||
|
||||
\f1 \uc0\u10060
|
||||
\f0 Git merge conflicts\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Solution: Manually resolve in Gitea, prioritize more complete implementation\
|
||||
\
|
||||
|
||||
\f1 \uc0\u10060
|
||||
\f0 Student stuck on task\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Solution: Use exact code from their instruction sheet\
|
||||
\
|
||||
|
||||
\f1 \uc0\u10060
|
||||
\f0 Prize money not updating\
|
||||
|
||||
\f1 \uc0\u9989
|
||||
\f0 Solution: Check Dima's PRIZE_LEVELS array and answer validation\
|
||||
\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
ASSESSMENT RUBRIC\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
GRADING (25 points per student):\
|
||||
\
|
||||
BACKEND (DIMA):\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Prize system implemented (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Game session management (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Question serving (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Answer validation (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Lifeline functionality (5pts)\
|
||||
\
|
||||
DATABASE (DANIL):\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 15 questions total (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Russian culture theme (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Accurate answers (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Good wrong options (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 No errors (5pts)\
|
||||
\
|
||||
FRONTEND (INNA):\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Question display (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Answer handling (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Game flow (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Lifeline integration (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Error handling (5pts)\
|
||||
\
|
||||
GRAPHICS (ARTYOM):\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Russian theme (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Professional styling (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 User experience (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Consistency (5pts)\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Visual appeal (5pts)\
|
||||
\
|
||||
EXTRA CREDIT (5pts):\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Early completion\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Extra features\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Exceptional quality\
|
||||
\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
QUICK REFERENCE COMMANDS\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
```bash\
|
||||
# Check any student's progress:\
|
||||
git clone [STUDENT-FORK-URL] temp\
|
||||
cd temp && git checkout [BRANCH]\
|
||||
\
|
||||
# Backend check:\
|
||||
grep -A 15 "PRIZE_LEVELS" app.py\
|
||||
\
|
||||
# Database check:\
|
||||
python3 -c "import json; print(len(json.load(open('questions.json'))))"\
|
||||
\
|
||||
# Frontend check:\
|
||||
grep -c "function" static/script.js\
|
||||
\
|
||||
# Graphics check:\
|
||||
grep -c "gradient" static/style.css\
|
||||
\
|
||||
# Test integrated game:\
|
||||
python3 app.py\
|
||||
# Open: http://localhost:5000\
|
||||
```\
|
||||
\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
FINAL TEACHER CHECKLIST\
|
||||
\uc0\u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \u9473 \
|
||||
\
|
||||
BEFORE PROJECT:\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Main repo prepared with boilerplate\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Students understand fork workflow\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Instruction sheets distributed\
|
||||
\
|
||||
DURING PROJECT:\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Daily progress monitoring\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Individual student support\
|
||||
|
||||
\f3 \uc0\u65533 \u65039
|
||||
\f0 Regular Git status checks\
|
||||
\
|
||||
AFTER PROJECT:\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 All PRs reviewed and merged\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Final integration tested\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Game fully functional\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Grades assigned using rubric\
|
||||
|
||||
\f2 \uc0\u9744
|
||||
\f0 Student achievements celebrated!
|
||||
\f1 \uc0\u55356 \u57225
|
||||
\f0 \
|
||||
\
|
||||
|
||||
\f1 \uc0\u55356 \u57225
|
||||
\f0 CONGRATULATIONS! You successfully guided a complete software development project from concept to working application!\
|
||||
```\
|
||||
\
|
||||
This single file contains everything you need as project manager - timeline, monitoring commands, troubleshooting, assessment, and final integration steps all in one printable document!}
|
||||
Reference in New Issue
Block a user