forked from technolyceum/ai6-m2
Added instruction sheets
This commit is contained in:
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!
|
||||
Reference in New Issue
Block a user