diff --git a/ar-SA/code/target-practice-solution/main.py b/ar-SA/code/target-practice-solution/main.py new file mode 100644 index 000000000..9b71b07d4 --- /dev/null +++ b/ar-SA/code/target-practice-solution/main.py @@ -0,0 +1,55 @@ +## Import library code + +from p5 import * +from random import randint + + +# The mouse_pressed function goes here +def mouse_pressed(): + # print('🎯') + if hit_colour == Color("blue").hex: + print("You hit the outer circle, 50 points!") + elif hit_colour == Color("red").hex: + print("You hit the inner circle, 200 points!") + elif hit_colour == Color("yellow").hex: + print("You hit the middle, 500 points!") + else: + print("You missed! No points!") + + +# The shoot_arrow function goes here +def shoot_arrow(): + global hit_colour + arrow_x = randint(100, 300) + arrow_y = randint(100, 300) + hit_colour = get(arrow_x, arrow_y).hex + # print(hit_colour) + fill("brown") + circle(arrow_x, arrow_y, 15) + + +def setup(): + # Set up your game here + size(400, 400) + no_stroke() + + +def draw(): + # Things to do in every frame + fill("cyan") + rect(0, 0, 400, 250) + fill("lightgreen") + rect(0, 250, 400, 150) + fill("brown") + triangle(150, 350, 200, 150, 250, 350) + fill("blue") + circle(200, 200, 170) + fill("red") + circle(200, 200, 110) # Draw the inner circle + fill("yellow") + circle(200, 200, 30) # Draw the middle circle + shoot_arrow() + + +# Keep this to run your code +run(frame_rate=2) diff --git a/ar-SA/code/target-practice-solution/project_config.yml b/ar-SA/code/target-practice-solution/project_config.yml new file mode 100644 index 000000000..2c45eb56c --- /dev/null +++ b/ar-SA/code/target-practice-solution/project_config.yml @@ -0,0 +1,3 @@ +name: 'Target Practice Example' +identifier: 'target-practice-solution' +type: 'python' diff --git a/ar-SA/code/target-practice-starter/main.py b/ar-SA/code/target-practice-starter/main.py new file mode 100644 index 000000000..03f477ff0 --- /dev/null +++ b/ar-SA/code/target-practice-starter/main.py @@ -0,0 +1,24 @@ +## Import library code +from p5 import * +from random import randint + +# The mouse_pressed function goes here + + +# The shoot_arrow function goes here + + +def setup(): + # Set up your game here + size(400, 400) + no_stroke() + + +def draw(): + # Things to do in every frame + fill("cyan") + rect(0, 0, 400, 250) + + +# Keep this to run your code +run(frame_rate=2) diff --git a/ar-SA/code/target-practice-starter/project_config.yml b/ar-SA/code/target-practice-starter/project_config.yml new file mode 100644 index 000000000..1f6832901 --- /dev/null +++ b/ar-SA/code/target-practice-starter/project_config.yml @@ -0,0 +1,3 @@ +name: "Target Practice" +identifier: 'target-practice-starter' +type: 'python' diff --git a/ar-SA/images/alternative-colours.png b/ar-SA/images/alternative-colours.png new file mode 100644 index 000000000..e630dd54b Binary files /dev/null and b/ar-SA/images/alternative-colours.png differ diff --git a/ar-SA/images/animation_bg_erase.gif b/ar-SA/images/animation_bg_erase.gif new file mode 100644 index 000000000..d241286f5 Binary files /dev/null and b/ar-SA/images/animation_bg_erase.gif differ diff --git a/ar-SA/images/animation_no_bg_erase.gif b/ar-SA/images/animation_no_bg_erase.gif new file mode 100644 index 000000000..c96d54052 Binary files /dev/null and b/ar-SA/images/animation_no_bg_erase.gif differ diff --git a/ar-SA/images/arrow-centre.png b/ar-SA/images/arrow-centre.png new file mode 100644 index 000000000..14dba17ee Binary files /dev/null and b/ar-SA/images/arrow-centre.png differ diff --git a/ar-SA/images/arrow-middle.png b/ar-SA/images/arrow-middle.png new file mode 100644 index 000000000..945ca5b23 Binary files /dev/null and b/ar-SA/images/arrow-middle.png differ diff --git a/ar-SA/images/arrow-target.png b/ar-SA/images/arrow-target.png new file mode 100644 index 000000000..64e413737 Binary files /dev/null and b/ar-SA/images/arrow-target.png differ diff --git a/ar-SA/images/background.png b/ar-SA/images/background.png new file mode 100644 index 000000000..7d2a272de Binary files /dev/null and b/ar-SA/images/background.png differ diff --git a/ar-SA/images/banner.png b/ar-SA/images/banner.png new file mode 100644 index 000000000..ddd9a5786 Binary files /dev/null and b/ar-SA/images/banner.png differ diff --git a/ar-SA/images/blue-circle.png b/ar-SA/images/blue-circle.png new file mode 100644 index 000000000..65c8564cc Binary files /dev/null and b/ar-SA/images/blue-circle.png differ diff --git a/ar-SA/images/blue-points.png b/ar-SA/images/blue-points.png new file mode 100644 index 000000000..7c1a8049a Binary files /dev/null and b/ar-SA/images/blue-points.png differ diff --git a/ar-SA/images/blue_circle_points.gif b/ar-SA/images/blue_circle_points.gif new file mode 100644 index 000000000..e6308eb07 Binary files /dev/null and b/ar-SA/images/blue_circle_points.gif differ diff --git a/ar-SA/images/bottom-right.png b/ar-SA/images/bottom-right.png new file mode 100644 index 000000000..2c4fb9e43 Binary files /dev/null and b/ar-SA/images/bottom-right.png differ diff --git a/ar-SA/images/centre.png b/ar-SA/images/centre.png new file mode 100644 index 000000000..1ce8e6fc4 Binary files /dev/null and b/ar-SA/images/centre.png differ diff --git a/ar-SA/images/circle-coords.png b/ar-SA/images/circle-coords.png new file mode 100644 index 000000000..a888286e1 Binary files /dev/null and b/ar-SA/images/circle-coords.png differ diff --git a/ar-SA/images/coords_animation.gif b/ar-SA/images/coords_animation.gif new file mode 100644 index 000000000..e684f63a6 Binary files /dev/null and b/ar-SA/images/coords_animation.gif differ diff --git a/ar-SA/images/difficulty-setting.png b/ar-SA/images/difficulty-setting.png new file mode 100644 index 000000000..eb2d42527 Binary files /dev/null and b/ar-SA/images/difficulty-setting.png differ diff --git a/ar-SA/images/fire_arrow.gif b/ar-SA/images/fire_arrow.gif new file mode 100644 index 000000000..c084db578 Binary files /dev/null and b/ar-SA/images/fire_arrow.gif differ diff --git a/ar-SA/images/five_circles.png b/ar-SA/images/five_circles.png new file mode 100644 index 000000000..524db6c9c Binary files /dev/null and b/ar-SA/images/five_circles.png differ diff --git a/ar-SA/images/green-grass.png b/ar-SA/images/green-grass.png new file mode 100644 index 000000000..8c7f5794e Binary files /dev/null and b/ar-SA/images/green-grass.png differ diff --git a/ar-SA/images/grey-circle.png b/ar-SA/images/grey-circle.png new file mode 100644 index 000000000..3e8d5d182 Binary files /dev/null and b/ar-SA/images/grey-circle.png differ diff --git a/ar-SA/images/grey-points.png b/ar-SA/images/grey-points.png new file mode 100644 index 000000000..b516035b9 Binary files /dev/null and b/ar-SA/images/grey-points.png differ diff --git a/ar-SA/images/initial_target.png b/ar-SA/images/initial_target.png new file mode 100644 index 000000000..caaca5115 Binary files /dev/null and b/ar-SA/images/initial_target.png differ diff --git a/ar-SA/images/missed-points.png b/ar-SA/images/missed-points.png new file mode 100644 index 000000000..0cd14626c Binary files /dev/null and b/ar-SA/images/missed-points.png differ diff --git a/ar-SA/images/missed_no_points.gif b/ar-SA/images/missed_no_points.gif new file mode 100644 index 000000000..212ca30e4 Binary files /dev/null and b/ar-SA/images/missed_no_points.gif differ diff --git a/ar-SA/images/outline-circles.png b/ar-SA/images/outline-circles.png new file mode 100644 index 000000000..fb31925b0 Binary files /dev/null and b/ar-SA/images/outline-circles.png differ diff --git a/ar-SA/images/points-scored.gif b/ar-SA/images/points-scored.gif new file mode 100644 index 000000000..e6ddac2a3 Binary files /dev/null and b/ar-SA/images/points-scored.gif differ diff --git a/ar-SA/images/quiz-colour.png b/ar-SA/images/quiz-colour.png new file mode 100644 index 000000000..e6012953c Binary files /dev/null and b/ar-SA/images/quiz-colour.png differ diff --git a/ar-SA/images/random-side.png b/ar-SA/images/random-side.png new file mode 100644 index 000000000..212ea6368 Binary files /dev/null and b/ar-SA/images/random-side.png differ diff --git a/ar-SA/images/rectangle-diagram.png b/ar-SA/images/rectangle-diagram.png new file mode 100644 index 000000000..8b1a8d348 Binary files /dev/null and b/ar-SA/images/rectangle-diagram.png differ diff --git a/ar-SA/images/showcase_rocket.png b/ar-SA/images/showcase_rocket.png new file mode 100644 index 000000000..6586fe933 Binary files /dev/null and b/ar-SA/images/showcase_rocket.png differ diff --git a/ar-SA/images/showcase_static.png b/ar-SA/images/showcase_static.png new file mode 100644 index 000000000..312d7fac1 Binary files /dev/null and b/ar-SA/images/showcase_static.png differ diff --git a/ar-SA/images/sky_coords.png b/ar-SA/images/sky_coords.png new file mode 100644 index 000000000..5f918d7ef Binary files /dev/null and b/ar-SA/images/sky_coords.png differ diff --git a/ar-SA/images/sky_stroke.png b/ar-SA/images/sky_stroke.png new file mode 100644 index 000000000..0d088147f Binary files /dev/null and b/ar-SA/images/sky_stroke.png differ diff --git a/ar-SA/images/stand_coords.png b/ar-SA/images/stand_coords.png new file mode 100644 index 000000000..98550a379 Binary files /dev/null and b/ar-SA/images/stand_coords.png differ diff --git a/ar-SA/images/step_4_preview.gif b/ar-SA/images/step_4_preview.gif new file mode 100644 index 000000000..06af11669 Binary files /dev/null and b/ar-SA/images/step_4_preview.gif differ diff --git a/ar-SA/images/step_5_preview.gif b/ar-SA/images/step_5_preview.gif new file mode 100644 index 000000000..49c6e41a3 Binary files /dev/null and b/ar-SA/images/step_5_preview.gif differ diff --git a/ar-SA/images/target-stand.png b/ar-SA/images/target-stand.png new file mode 100644 index 000000000..c64259beb Binary files /dev/null and b/ar-SA/images/target-stand.png differ diff --git a/ar-SA/images/target_area.png b/ar-SA/images/target_area.png new file mode 100644 index 000000000..c6633448f Binary files /dev/null and b/ar-SA/images/target_area.png differ diff --git a/ar-SA/images/target_printed.gif b/ar-SA/images/target_printed.gif new file mode 100644 index 000000000..b29a244fe Binary files /dev/null and b/ar-SA/images/target_printed.gif differ diff --git a/ar-SA/images/three-circles.png b/ar-SA/images/three-circles.png new file mode 100644 index 000000000..90a5e243a Binary files /dev/null and b/ar-SA/images/three-circles.png differ diff --git a/ar-SA/images/top-left.png b/ar-SA/images/top-left.png new file mode 100644 index 000000000..3cb3e458f Binary files /dev/null and b/ar-SA/images/top-left.png differ diff --git a/ar-SA/images/triangles-coords.png b/ar-SA/images/triangles-coords.png new file mode 100644 index 000000000..1eec68b23 Binary files /dev/null and b/ar-SA/images/triangles-coords.png differ diff --git a/ar-SA/images/upgrade-ideas.png b/ar-SA/images/upgrade-ideas.png new file mode 100644 index 000000000..bfda023ae Binary files /dev/null and b/ar-SA/images/upgrade-ideas.png differ diff --git a/ar-SA/images/yellow-points.png b/ar-SA/images/yellow-points.png new file mode 100644 index 000000000..5e702c248 Binary files /dev/null and b/ar-SA/images/yellow-points.png differ diff --git a/ar-SA/meta.yml b/ar-SA/meta.yml new file mode 100644 index 000000000..f2472fdb0 --- /dev/null +++ b/ar-SA/meta.yml @@ -0,0 +1,41 @@ +--- +title: تمرين الرماية +hero_image: images/banner.png +description: استخدم Python لرسم هدف وتسجيل نقاط بضربه بالسهام +meta_title: Python coding projects for kids and teens | Target practice +meta_description: Learn Python with the Raspberry Pi Foundation's coding projects for kids and teens. Use Python to draw a target and score points by hitting it with arrows. +version: 4 +listed: true +copyedit: true +last_tested: "2021-10-06" +steps: + - + title: المقدمة + - + title: قم بإنشاء خلفية + - + title: ارسم هدفك + completion: + - engaged + - + title: أطلق سهمك + - + title: تسجيل النقاط + - + title: تفكير + completion: + - external + - + title: قم بتطوير مشروعك + knowledge_quiz: + path: quiz1 + version: 1 + questions: 3 + passing_score: 3 + completion: + - external + - + title: ما التالي؟ + challenge: true + - + title: What can you do now? diff --git a/ar-SA/python-comments-demo.txt b/ar-SA/python-comments-demo.txt new file mode 100644 index 000000000..86261a0a7 --- /dev/null +++ b/ar-SA/python-comments-demo.txt @@ -0,0 +1,73 @@ +Setup your game here + +width and height of screen + +Things to do in every frame + +Red = 92, Green = 204, Blue = 206 + +Set the fill colour to grass + +x, y, width, height + +Set the stand fill colour to wood + +Set the circle fill colour to outer + +x, y, width of the circle + +Blue + +Red + +Yellow + +Set the circle fill colour to inner + +Inner circle - x, y, width of the circle + +Set the circle fill colour to middle + +Middle circle - x, y, width of the circle + +The shoot_arrow function goes here + +Store a random number between 100 and 300 + +Set the arrow to fill colour to wood + +Draw a small circle at random coordinates + +Get the hit colour + +The mouse_pressed function goes here + +Can be used in other functions + +Save the colour before drawing the arrow + +Like functions, 'if' statements are indented + +Import library code + +Keep this to run your code + +Definitions for compatibility with the p5py processing library + +Shape + +Fonts + +Text + +Colour + +Images + +Environment + +Transform + +Keyboard + +Set the fill colour to grass diff --git a/ar-SA/python-comments.txt b/ar-SA/python-comments.txt new file mode 100644 index 000000000..cac92f5d4 --- /dev/null +++ b/ar-SA/python-comments.txt @@ -0,0 +1,27 @@ +أشياء للقيام بها في كل إطار + +Draw the inner circle + +Draw the middle circle + +نضع دالة shoot_arrow هنا + +نضع دالة mouse_pressed هنا + +You hit the outer circle, 50 points! + +You hit the inner circle, 200 points! + +You hit the middle, 500 points! + +You hit the middle, 500 points! + +You missed! No points! + +Super fast + +Pretty quick + +Very fast + +Speed not recognised! \ No newline at end of file diff --git a/ar-SA/python-translatable-demo.txt b/ar-SA/python-translatable-demo.txt new file mode 100644 index 000000000..71707d059 --- /dev/null +++ b/ar-SA/python-translatable-demo.txt @@ -0,0 +1,37 @@ +wood + +sky + +grass + +outer + +inner + +middle + +shoot_arrow + +arrow_x + +arrow_y + +hit_color + +You hit the outer circle, 50 points! + +You hit the inner circle, 200 points! + +You hit the middle, 500 points! + +You missed! No points! + +Super fast + +Pretty quick + +Very fast + +Speed not recognised! + +speed diff --git a/ar-SA/python-translatable.txt b/ar-SA/python-translatable.txt new file mode 100644 index 000000000..1e4f01f6b --- /dev/null +++ b/ar-SA/python-translatable.txt @@ -0,0 +1,9 @@ +shoot_arrow + +arrow_x + +arrow_y + +hit_colour + +speed \ No newline at end of file diff --git a/ar-SA/quiz1/question_1.md b/ar-SA/quiz1/question_1.md new file mode 100644 index 000000000..21d17d151 --- /dev/null +++ b/ar-SA/quiz1/question_1.md @@ -0,0 +1,60 @@ +## Quick quiz + +Answer the three questions. There are hints to guide you to the correct answer. + +بعد كل سؤال ، اضغط على **إرسال**. سيتم توجيهك نحو الإجابة الصحيحة. + +إستمتع! + +--- question --- +--- +legend: السؤال 1 من 3 +--- +In your project you added `randint(100, 300)` to your `shoot_arrow()` function. What does `randint(100, 300)` do? + +--- code --- +--- +language: python +--- + +def shoot_arrow(): global hit_colour arrow_x = randint(100, 300) arrow_y = randint(100, 300) + +--- /code --- + +--- choices --- + +- (x) It chooses a random whole number between 100 and 300. + + --- feedback --- + +هذا صحيح! This chooses a random x coordinate for your arrow. + + --- /feedback --- + +- ( ) It makes the arrow move randomly around the screen. + + --- feedback --- + +Not quite. This code part of how the arrow moves randomly but you need other code too to achieve that goal. + + --- /feedback --- + +- () It gets the colour that was hit by the arrow. + + --- feedback --- + + Not quite. The get() function would be used to get the colour. + + --- /feedback --- + +- ( ) It draws a circle of a random size. + + --- feedback --- + + Not quite. The circle() function would be used to draw a circle. + + --- /feedback --- + +--- /choices --- + +--- /question --- diff --git a/ar-SA/quiz1/question_2.md b/ar-SA/quiz1/question_2.md new file mode 100644 index 000000000..a2b1a1ca1 --- /dev/null +++ b/ar-SA/quiz1/question_2.md @@ -0,0 +1,49 @@ + +--- question --- +--- +legend: السؤال 2 من 3 +--- + +في مشروعك ، استخدمت `if` و `elif`و `else` للتحقق من اللون الذي سقط عليه السهم. + +In the example below, a variable called `speed` has the number `6` stored in it. عند تشغيل هذا التعليمات البرمجية ، ما الذي سيتم طباعته في منطقة المخرجات ؟ + +--- code --- +--- +language: python +--- +speed = 6 + +if speed == 7: print('Super fast') elif speed == 5: print('Pretty quick') elif speed == 6: print('Very fast') else: print('Speed not recognised!') + +--- /code --- + +--- choices --- + +- سريع جدًا + + --- feedback --- + + هذا صحيح! تم تخصيص متغير **speed** للقيمة `6`، مما يجعل `speed == 6` شرط **صحيح** ويطبع `سريع جدًا`. + + --- /feedback --- + +- ( ) `لا يمكن تمييز السرعة!` + + --- feedback --- + + ليس تمامًا ، انظر إلى القيمة المخصصة للمتغير **speed**. + + --- /feedback --- + +- لا تتم طباعة أي شيء + + --- feedback --- + + Try again, `else` is used as a final option for when all the above conditions are false. Look through the conditions again, are any of the conditions true? + + --- /feedback --- + +--- /choices --- + +--- /question --- diff --git a/ar-SA/quiz1/question_3.md b/ar-SA/quiz1/question_3.md new file mode 100644 index 000000000..759d22943 --- /dev/null +++ b/ar-SA/quiz1/question_3.md @@ -0,0 +1,64 @@ + +--- question --- +--- +legend: السؤال 3 من 3 +--- + +يتم رسم القطع الناقص باستخدام التعليمات البرمجية التالي: + +--- code --- +--- +language: python +--- + +def setup(): +size(400, 400) +fill(0,255,0) +no_stroke() + +def draw(): +ellipse(0,0,300,300) + +run() + +--- /code --- + +أي من الصور أدناه توضح الموضع الصحيح لهذا القطع الناقص في منطقة المخرجات؟ + +--- choices --- + +- ( )  + + --- feedback --- + + ليس تمامًا ، لتوسيط الدائرة في الزاوية اليمنى السفلية ، يجب أن تكون الإحداثيات هي نفس حجم الشاشة. في هذا المثال ، سيكون القطع الناقص `ellipse(400,400,300,300)`. + + --- /feedback --- + +- ( )  + + --- feedback --- + + ليس تمامًا ، لتوسيط الدائرة في المنتصف ، يجب أن تكون الإحداثيات نصف حجم الشاشة. في هذا المثال ، `ellipse(200,200,300,300)`. + + --- /feedback --- + +- (x)  + + --- feedback --- + + هذا صحيح! تتركز هذه الدائرة عند الإحداثيات (0،0) ، الزاوية العلوية اليسرى من الشاشة. + + --- /feedback --- + +- ( )  + + --- feedback --- + + لا ، سيكون لهذه الدائرة التعليمات البرمجية `ellipse(350,150,300,300)` لتوسيطها في أعلى يمين الشاشة. الإحداثي `×` هو مدى المسافة بين القطع الناقص عبر الشاشة ، والإحداثي `y` هو مدى المسافة أسفل الشاشة. + + --- /feedback --- + +--- /choices --- + +--- /question --- diff --git a/ar-SA/resources/main.py b/ar-SA/resources/main.py new file mode 100644 index 000000000..8d0da5672 --- /dev/null +++ b/ar-SA/resources/main.py @@ -0,0 +1,61 @@ +#!/bin/python3 + +# Import library code +from p5 import * +from math import * +from random import randint + +# The mouse_pressed function goes here +def mouse_pressed(): + if hit_color == outer: + print('You hit the outer circle, 50 points!') #Like functions, 'if' statements are indented + elif hit_color == inner: + print('You hit the inner circle, 200 points!') + elif hit_color == bullseye: + print('You hit the bullseye, 500 points!') + else: + print('You missed! No points!') + +# The shoot_arrow function goes here +def shoot_arrow(): + global hit_color + arrow_x = randint(100, 300) + arrow_y = randint(100, 300) + hit_color = get(arrow_x, arrow_y) + ellipse(arrow_x, arrow_y, 15, 15) + +def setup(): +# Setup your game here + size(400, 400) # width and height + frame_rate(2) + + +def draw(): +# Things to do in every frame + global outer, inner, bullseye + sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206 + grass = color(149, 212, 122) + wood = color(145, 96, 51) + outer = color(0, 120, 180) + inner = color(210, 60, 60) + bullseye = color(220, 200, 0) + + no_stroke() + fill(sky) + rect(0, 0, 400, 250) + fill(grass) + rect(0, 250, 400, 150) + + fill(wood) + triangle(150, 350, 200, 150, 250, 350) + fill(outer) + ellipse(200, 200, 170, 170) + fill(inner) + ellipse(200, 200, 110, 110) #Inner circle + fill(bullseye) + ellipse(200, 200, 30, 30) #Bullseye + + fill(wood) + shoot_arrow() +# Keep this to run your code +run() diff --git a/ar-SA/resources/p5.py b/ar-SA/resources/p5.py new file mode 100644 index 000000000..fc023ee64 --- /dev/null +++ b/ar-SA/resources/p5.py @@ -0,0 +1,135 @@ +# Definitions for compatibility with the p5py processing library +from processing import * +import __main__ + +# Shape +from processing import rectMode as rect_mode +from processing import ellipseMode as ellipse_mode +from processing import strokeWeight as stroke_weight +from processing import strokeCap as stroke_cap +from processing import strokeJoin as stroke_join +from processing import noStroke as no_stroke +from processing import noFill as no_fill + +# Fonts +from processing import createFont as create_font +from processing import loadFont as load_font +from processing import textFont as text_font + +# Text +from processing import textAlign as text_align +from processing import textLeading as text_leading +from processing import textMode as text_mode +from processing import textSize as text_size +from processing import textWidth as text_width + +# Colour +from processing import blendColor as blend_color +from processing import lerpColor as lerp_color +from processing import color as Color + +# Images +from processing import createImage as create_image +from processing import imageMode as image_mode +from processing import loadImage as load_image +from processing import noTint as no_tint +from processing import requestImage as request_image + +# Environment +from processing import frameRate as frame_rate +from processing import noCursor as no_cursor +from processing import noLoop as no_loop + +# Transform +from processing import applyMatrix as apply_matrix +from processing import popMatrix as pop_matrix +from processing import printMatrix as print_matrix +from processing import pushMatrix as push_matrix +from processing import resetMatrix as reset_matrix +from processing import rotateX as rotate_x +from processing import rotateY as rotate_y +from processing import pushStyle as push_style +from processing import popStyle as pop_style + +from processing import run as main_run + +# Keyboard + +def mousePressed(): + if hasattr(__main__, "mouse_pressed"): + mouse_pressed = getattr(__main__, "mouse_pressed") + mouse_pressed() + +def mouseReleased(): + if hasattr(__main__, "mouse_released"): + mouse_released = getattr(__main__, "mouse_released") + mouse_released() + +__main__.mouse_x = 0 +__main__.mouse_y = 0 +__main__.mouse_px = 0 +__main__.mouse_py = 0 +__main__.frame_count = 0 +__main__.frame_rate = 60 + +def mouseMoved(): + __main__.mouse_x = mouse.x + __main__.mouse_y = mouse.y + __main__.mouse_px = mouse.px + __main__.mouse_py = mouse.py + if hasattr(__main__, "mouse_moved"): + mouse_moved = getattr(__main__, "mouse_moved") + mouse_moved() + +def mouseDragged(): + if hasattr(__main__, "mouse_dragged"): + mouse_dragged = getattr(__main__, "mouse_dragged") + mouse_dragged() + +def new_draw(): + __main__.frame_count = frameCount + frameRate = __main__.frame_rate + old_draw() + +def run(): + global old_draw + old_draw = __main__.draw + __main__.draw = new_draw + main_run() + +def grid(): + pushMatrix() + stroke(200) + fill(0) + line(0, height/2, width, height/2) + line(width/2, 0, width/2, height) + x_coords = [0, width/2, width] + y_coords = [0, height/2, height] + + for x in x_coords: + for y in y_coords: + show_coord(x, y) + + popMatrix() + +def show_coord(x, y): + if x == width: + x_align = RIGHT + elif x == 0: + x_align = LEFT + else: + x_align = CENTER + + if y == height: + y_align = BASELINE + elif y == 0: + y_align = TOP + else: + y_align = CENTER + + pushStyle() + fill(100) + text_align(x_align, y_align) + text('(' + str(int(x)) + ', ' + str(int(y)) + ')', x, y) + popStyle() + diff --git a/ar-SA/step_1.md b/ar-SA/step_1.md new file mode 100644 index 000000000..f0c7f755b --- /dev/null +++ b/ar-SA/step_1.md @@ -0,0 +1,29 @@ +## What you will make + +استخدم Python ، مع مكتبة الرسومات `p5` ، لرسم هدف وتسجيل نقاط بضربه بالسهام. + +--- print-only --- + +{:width="640px"} + +--- /print-only --- + +--- no-print --- +
+ RGB colours have values between 0 and 255 for each of R(ed), G(reen), and B(lue). Purple has values R,G,B (128, 0, 128) — medium amounts of red and blue, with no green. Video game artists and graphic designers work with RGB colours. +
+ +--- no-print --- + +--- task --- + +### Try it ++The oldest evidence of archery comes from the Sibudu Cave in KwaZulu-Natal, South Africa. Remains of stone and bone arrowheads have been found, which date to between 60,000 and 70,000 years ago. +
diff --git a/es-419/step_2.md b/es-419/step_2.md new file mode 100644 index 000000000..b6734be61 --- /dev/null +++ b/es-419/step_2.md @@ -0,0 +1,141 @@ +## Create a background + +Computer games, videos, and animations create the effect of movement by showing lots of images one after another. Each image is called a frame . The speed that the image changes at is called the frame rate and is given in fps or frames per second. +
+ +The `frame_rate(2)` line in `setup()` sets the frame rate to 2 frames per second. + +The `draw()` function is called every frame. You are going to draw the arrow in a random position each time `draw()` is called. + +The background and target will be drawn over the old arrow. This means you only see one arrow at a time. + +--- task --- + +Find the `import` statements, at the top of your code, you are going to use `randint` from the `random` library. + +--- code --- +--- +language: python filename: main.py line_numbers: true +line_number_start: 3 +--- + +# Import library code +from p5 import * +from math import * +from random import randint + +--- /code --- + +--- /task --- + +--- task --- + +Go to your `shoot_arrow()` function and add two new `arrow_x` and `arrow_y` variables to store random numbers between `100` and `300`. + +This will let some shots miss the target, without them going all the way to the edges of your game. + +Change your `ellipse()` to use the new variables to position your arrow. + + + +--- code --- +--- +language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 10 +line_highlights: 12-14 +--- + +# The shoot_arrow function goes here +def shoot_arrow(): +arrow_x = randint(100, 300) +arrow_y = randint(100, 300) +ellipse(arrow_x, arrow_y, 15, 15) #Upate to random coordinates + +--- /code --- + +--- /task --- + +### Get the colour the arrow hits + +The `get()` function returns the colour of a pixel. + ++A pixel, short for picture element, is a single coloured dot within an image. Images are made up of lots of coloured pixels. +
+ +--- task --- + +You need to store the colour that the arrow is aiming at before you draw an arrow on top of it. + +Add code to store the `hit_color`. Use the `get()` function, to get the colour of the pixel at the `arrow_x` and `arrow_y` coordinates — the centre of the arrow. + +--- code --- +--- +language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 10 +line_highlights: 14 +--- + +# The shoot_arrow function goes here +def shoot_arrow(): +arrow_x = randint(100, 300) +arrow_y = randint(100, 300) +hit_color = get(arrow_x, arrow_y) #Save the colour before drawing the arrow +ellipse(arrow_x, arrow_y, 15, 15) + +--- /code --- + +**Tip:** The code to get the colour and save it needs to be **before** the code to draw the ellipse otherwise you will always save the wood colour of the arrow! + +--- /task --- + +The `p5` library 'listens' for certain events, one of these is the press of the mouse button. When it detects that the button has been pressed, it will run whatever code it has been given in the `mouse_pressed()` function. + +--- task --- + +Find the comment **#The mouse_pressed function goes here** and below it add code to define your `mouse_pressed()` function. + +Add code to print the amounts of red, green, and blue in the pixel the arrow lands on. + +--- code --- +--- +language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 8 +line_highlights: 9-10 +--- + +# The mouse_pressed function goes here +def mouse_pressed(): +print( red(hit_color), green(hit_color), blue(hit_color) ) + +--- /code --- + +--- /task --- + +--- task --- + +You have defined two functions `shoot_arrow()` and `mouse_pressed()`, both of these functions need to use the `hit_color` variable. + +A variable that needs to be used thoughout a program is known as a **global variable**. Add code to your `shoot_arrow()` function to make `hit_color` a global variable: + +--- code --- +--- +language: python filename: main.py - shoot_arrow() line_numbers: true line_number_start: 12 +line_highlights: 14 +--- + +# The shoot_arrow function goes here +def shoot_arrow(): +global hit_color #Can be used in other functions +arrow_x = randint(100, 300) +arrow_y = randint(100, 300) +hit_color = get(arrow_x, arrow_y) #Save the colour before drawing the arrow +ellipse(arrow_x, arrow_y, 15, 15) + +--- /code --- + +--- /task --- + +--- task --- + +**Test:** Run your project. The arrow is redrawn at random coordinates. + +The project gets the `hit_color` each time the arrow is redrawn and prints the colour value in the output area underneath the target. + + + +**Debug:** If you are seeing a message about `hit_colour` being 'not defined', then go back to `shoot_arrow()` and check that you have the `global hit_color` line. + +**Debug:** Check the `print` line really carefully for commas and brackets. + +--- /task --- + +--- save --- + diff --git a/es-419/step_5.md b/es-419/step_5.md new file mode 100644 index 000000000..5695ef1d9 --- /dev/null +++ b/es-419/step_5.md @@ -0,0 +1,165 @@ +## Score points + ++We use conditions all the time to make decisions. We could say 'if the pencil is blunt, then sharpen it'. Similarly, `if` conditions let us write code that does something different depending on whether a condition is true or false. +
+ +--- task --- + +To `print` a message for the target's outer circle, add code to your `mouse_pressed()` function to check if the `hit_color` is `==` to `outer`. + +Be careful when using the `=` symbol in Python: + + `=` is used for **assignment** — like `arrow_x = 200` to set the value of a variable + + `==` is used to test **equivalence** — like `hit_color == bullseye` — if the things on either side have the same value, then the test is `True`, otherwise it is `False` + +Change the code in your `print()` to give a score: + +--- code --- +--- +language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 8 +line_highlights: 10-11 +--- + +# The mouse_pressed function goes here +def mouse_pressed(): +if hit_color == outer: +print('You hit the outer circle, 50 points!') #Like functions, 'if' statements are indented + +--- /code --- + +--- /task --- + +--- task --- + +**Test:** Run your project. Try to stop the arrow on the blue outer circle to see your message. The colour of the pixel at the centre of the arrow is the colour that is saved and checked. + +**Tip:** `frame_rate()`, in `setup()`, controls how fast your game draws. If it's going too fast, set it to a lower number. + + + +**Debug:** Make sure your code matches exactly and you indented the code inside your `if` statement. The indent tells Python that the code should only run if the condition is `True`. + +--- /task --- + +As points will be scored if the arrow lands on the `inner` or `bullseye` circles too, `outer` is not the only circle you need to check. To do this, use `elif` (a shortened version of else - if). + ++We use else - if to make decisions in real life. When you are painting a picture of the sky, you might check if there is a yellow paint for the sun. Else, if there is no yellow paint, you look for orange. Else, if there is no yellow or orange paint, you might use red — really lightly! +
+ +--- task --- + +An `elif` can only be used with an `if` statement and, like an `if`, it checks a condition. If the condition is `True`, the `elif` runs some code. + +What makes `elif` different is that it will only make that check if the conditions of the `if` and any `elif`s before it are `False`. + +Add `elif` statements for `inner` and `bullseye`. + +--- code --- +--- +language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 9 +line_highlights: 12-15 +--- + +def mouse_pressed(): +if hit_color == outer: +print('You hit the outer circle, 50 points!') +elif hit_color == inner: +print('You hit the inner circle, 200 points!') +elif hit_color == bullseye: +print('You hit the bullseye, 500 points!') + +--- /code --- + +--- /task --- + +--- task --- + +**Test:** Run your project. Try to stop the arrow on the red and yellow circles to see their messages. + + + +**Debug:** Make sure your `elif` is at the same indentation level as your `if`, and the code inside your `elif` is at the same level as the code inside your `if`. + +**Debug:** If you see a message about `inner` or `bullseye` being 'not defined', then go back to `draw()` and check that they are on the line that declares variables global. + +```python +global outer, inner, bullseye +``` + +--- /task --- + +There is one more decision you need to make: what happens if the arrow does not land on any of the target circles? To do this last check, you use `else`. + ++We use if … else to make decisions. When you wake up, you check and if it is morning you get up, else you go back to sleep. Can you think of any if ... else decisions you make? +
+ +--- task --- + +Add code to `print` a message `else` none of the `if` and `elif` statements have been met. + +--- code --- +--- +language: python filename: main.py line_numbers: true line_number_start: 9 +line_highlights: 16-17 +--- + +def mouse_pressed(): +if hit_color == outer: +print('You hit the outer circle, 50 points!') +elif hit_color == inner: +print('You hit the inner circle, 200 points!') +elif hit_color == bullseye: +print('You hit the bullseye, 500 points!') +else: +print('You missed! No points!') + +--- /code --- + +--- /task --- + +--- task --- + +**Test:** Run your project. Try to stop the arrow in the grass or sky to see the miss message. Change the number of points scored for the different colours if you like. + + + +--- /task --- + +--- save --- diff --git a/es-419/step_6.md b/es-419/step_6.md new file mode 100644 index 000000000..d7bab7933 --- /dev/null +++ b/es-419/step_6.md @@ -0,0 +1 @@ +## Reflection \ No newline at end of file diff --git a/es-419/step_7.md b/es-419/step_7.md new file mode 100644 index 000000000..a3696bcb3 --- /dev/null +++ b/es-419/step_7.md @@ -0,0 +1,36 @@ +## Upgrade your project + +x` निर्देशांक यह है कि कितनी दूर स्क्रीन पर दीर्घवृत्त है, और `y` निर्देशांक है कि स्क्रीन कितनी नीचे है।
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/hi-IN/resources/main.py b/hi-IN/resources/main.py
new file mode 100644
index 000000000..8d0da5672
--- /dev/null
+++ b/hi-IN/resources/main.py
@@ -0,0 +1,61 @@
+#!/bin/python3
+
+# Import library code
+from p5 import *
+from math import *
+from random import randint
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+ if hit_color == outer:
+ print('You hit the outer circle, 50 points!') #Like functions, 'if' statements are indented
+ elif hit_color == inner:
+ print('You hit the inner circle, 200 points!')
+ elif hit_color == bullseye:
+ print('You hit the bullseye, 500 points!')
+ else:
+ print('You missed! No points!')
+
+# The shoot_arrow function goes here
+def shoot_arrow():
+ global hit_color
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_color = get(arrow_x, arrow_y)
+ ellipse(arrow_x, arrow_y, 15, 15)
+
+def setup():
+# Setup your game here
+ size(400, 400) # width and height
+ frame_rate(2)
+
+
+def draw():
+# Things to do in every frame
+ global outer, inner, bullseye
+ sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+ grass = color(149, 212, 122)
+ wood = color(145, 96, 51)
+ outer = color(0, 120, 180)
+ inner = color(210, 60, 60)
+ bullseye = color(220, 200, 0)
+
+ no_stroke()
+ fill(sky)
+ rect(0, 0, 400, 250)
+ fill(grass)
+ rect(0, 250, 400, 150)
+
+ fill(wood)
+ triangle(150, 350, 200, 150, 250, 350)
+ fill(outer)
+ ellipse(200, 200, 170, 170)
+ fill(inner)
+ ellipse(200, 200, 110, 110) #Inner circle
+ fill(bullseye)
+ ellipse(200, 200, 30, 30) #Bullseye
+
+ fill(wood)
+ shoot_arrow()
+# Keep this to run your code
+run()
diff --git a/hi-IN/resources/p5.py b/hi-IN/resources/p5.py
new file mode 100644
index 000000000..fc023ee64
--- /dev/null
+++ b/hi-IN/resources/p5.py
@@ -0,0 +1,135 @@
+# Definitions for compatibility with the p5py processing library
+from processing import *
+import __main__
+
+# Shape
+from processing import rectMode as rect_mode
+from processing import ellipseMode as ellipse_mode
+from processing import strokeWeight as stroke_weight
+from processing import strokeCap as stroke_cap
+from processing import strokeJoin as stroke_join
+from processing import noStroke as no_stroke
+from processing import noFill as no_fill
+
+# Fonts
+from processing import createFont as create_font
+from processing import loadFont as load_font
+from processing import textFont as text_font
+
+# Text
+from processing import textAlign as text_align
+from processing import textLeading as text_leading
+from processing import textMode as text_mode
+from processing import textSize as text_size
+from processing import textWidth as text_width
+
+# Colour
+from processing import blendColor as blend_color
+from processing import lerpColor as lerp_color
+from processing import color as Color
+
+# Images
+from processing import createImage as create_image
+from processing import imageMode as image_mode
+from processing import loadImage as load_image
+from processing import noTint as no_tint
+from processing import requestImage as request_image
+
+# Environment
+from processing import frameRate as frame_rate
+from processing import noCursor as no_cursor
+from processing import noLoop as no_loop
+
+# Transform
+from processing import applyMatrix as apply_matrix
+from processing import popMatrix as pop_matrix
+from processing import printMatrix as print_matrix
+from processing import pushMatrix as push_matrix
+from processing import resetMatrix as reset_matrix
+from processing import rotateX as rotate_x
+from processing import rotateY as rotate_y
+from processing import pushStyle as push_style
+from processing import popStyle as pop_style
+
+from processing import run as main_run
+
+# Keyboard
+
+def mousePressed():
+ if hasattr(__main__, "mouse_pressed"):
+ mouse_pressed = getattr(__main__, "mouse_pressed")
+ mouse_pressed()
+
+def mouseReleased():
+ if hasattr(__main__, "mouse_released"):
+ mouse_released = getattr(__main__, "mouse_released")
+ mouse_released()
+
+__main__.mouse_x = 0
+__main__.mouse_y = 0
+__main__.mouse_px = 0
+__main__.mouse_py = 0
+__main__.frame_count = 0
+__main__.frame_rate = 60
+
+def mouseMoved():
+ __main__.mouse_x = mouse.x
+ __main__.mouse_y = mouse.y
+ __main__.mouse_px = mouse.px
+ __main__.mouse_py = mouse.py
+ if hasattr(__main__, "mouse_moved"):
+ mouse_moved = getattr(__main__, "mouse_moved")
+ mouse_moved()
+
+def mouseDragged():
+ if hasattr(__main__, "mouse_dragged"):
+ mouse_dragged = getattr(__main__, "mouse_dragged")
+ mouse_dragged()
+
+def new_draw():
+ __main__.frame_count = frameCount
+ frameRate = __main__.frame_rate
+ old_draw()
+
+def run():
+ global old_draw
+ old_draw = __main__.draw
+ __main__.draw = new_draw
+ main_run()
+
+def grid():
+ pushMatrix()
+ stroke(200)
+ fill(0)
+ line(0, height/2, width, height/2)
+ line(width/2, 0, width/2, height)
+ x_coords = [0, width/2, width]
+ y_coords = [0, height/2, height]
+
+ for x in x_coords:
+ for y in y_coords:
+ show_coord(x, y)
+
+ popMatrix()
+
+def show_coord(x, y):
+ if x == width:
+ x_align = RIGHT
+ elif x == 0:
+ x_align = LEFT
+ else:
+ x_align = CENTER
+
+ if y == height:
+ y_align = BASELINE
+ elif y == 0:
+ y_align = TOP
+ else:
+ y_align = CENTER
+
+ pushStyle()
+ fill(100)
+ text_align(x_align, y_align)
+ text('(' + str(int(x)) + ', ' + str(int(y)) + ')', x, y)
+ popStyle()
+
diff --git a/hi-IN/step_1.md b/hi-IN/step_1.md
new file mode 100644
index 000000000..7606cb493
--- /dev/null
+++ b/hi-IN/step_1.md
@@ -0,0 +1,29 @@
+## What you will make
+
+Use Python to draw a target and score points by hitting it with arrows.
+
+--- print-only ---
+
+{:width="640px"}
+
+--- /print-only ---
+
+--- no-print ---
+
+
+
+Click the **Run** button below to start the game. When the dot appears on the target 🎯, click the mouse (or tap on your tablet) to fire your arrow.
+
+
+
+
+
+--- /no-print ---
+
+
+
+
+
diff --git a/hi-IN/step_2.md b/hi-IN/step_2.md
new file mode 100644
index 000000000..b55168c94
--- /dev/null
+++ b/hi-IN/step_2.md
@@ -0,0 +1,37 @@
+## घास बनाएं
+
+--- task ---
+
+[ PLASS Statch starding ](https://editor.raspberrypi.org/en/projects/target-practice-starter){:target="_blank"} प्रोजेक्ट खोलें।
+
+--- /task ---
+
+--- task ---
+
+**Add** code to draw a green rectangle at the bottom of the screen to represent the grass.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 17
+line_highlights: 21-22
+---
+def draw(): # Things to do in every frame fill('cyan')
+rect(0, 0, 400, 250)
+fill('lightgreen')
+rect(0, 250, 400, 150)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your project to view the background.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/hi-IN/step_3.md b/hi-IN/step_3.md
new file mode 100644
index 000000000..48c1824f0
--- /dev/null
+++ b/hi-IN/step_3.md
@@ -0,0 +1,115 @@
+## अपना लक्ष्य बनाएँ
+
+
+
+आपके गेम को पर तीर चलाने के लिए एक लक्ष्य की आवश्यकता है।
+
+
+
+{:width="300px"}
+
+
+
+
+### एक त्रिकोणीय स्टैंड बनाएं
+
+--- task ---
+
+Set the fill colour to `brown`.
+
+प्रत्येक कोनों के लिए x और y निर्देशांक का उपयोग करके एक त्रिकोण बनाएं।
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 21
+line_highlights: 23-24
+---
+
+ fill('lightgreen')
+ rect(0, 250, 400, 150)
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the stand for your target:
+
+{:width="400px"}
+
+--- /task ---
+
+### लक्ष्य वृत्त बनाएं
+
+--- task ---
+
+लक्ष्य का सबसे बड़ा भाग एक नीला ** अपलोड ** है।
+
+भरण रंग को ` > ` पर सेट करें।
+
+इसके केंद्र और चौड़ाई के लिए x और y निर्देशांक के साथ एक वृत्त बनाएं।
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 23
+line_highlights: 25-26
+---
+
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+ fill('blue')
+ circle(200, 200, 170)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+** >:** पहला बड़ा नीला वृत्त देखने के लिए अपना कोड चलाता है।
+
+नीले घेरे को स्टैंड के बाद खींचा गया था इसलिए यह सामने है।
+
+{:width="400px"}
+
+--- /task ---
+
+लक्ष्य एक ही केंद्र निर्देशांक (200, 200) के साथ अलग-अलग आकार के वृत्तों से बना होता है।
+
+--- task ---
+
+लक्ष्य के भीतरी और मध्य भागों के लिए ** > ** रंगीन घेरे।
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 25
+line_highlights: 27-30
+---
+
+ fill('blue')
+ circle(200, 200, 170)
+ fill('red')
+ circle(200, 200, 110) # Draw the inner circle
+ fill('yellow')
+ circle(200, 200, 30) # Draw the middle circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your project to see the target with three coloured circles.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/hi-IN/step_4.md b/hi-IN/step_4.md
new file mode 100644
index 000000000..8ead9abaa
--- /dev/null
+++ b/hi-IN/step_4.md
@@ -0,0 +1,88 @@
+## Add an arrow
+
+
+
+Add an even smaller circle to represent an arrow.
+
+
+
+{:width="300px"}
+
+
+
+
+### Where will you shoot?
+
+--- task ---
+
+Add a function to draw a brown circle at coordinates `200`, `200`.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 8
+line_highlights: 9-13
+---
+# shoot_arrow फ़ंक्शन यहाँ जाता है
+def shoot_arrow():
+arrow_x = 200 arrow_y = 200 fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Call your new `shoot_arrow()`{:.language-python} function at the end of your `draw()`{:.language-python} function.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 33
+line_highlights: 35
+---
+
+ fill('yellow')
+ circle(200, 200, 30)
+ shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see the arrow in the centre.
+
+
+
+
+--- /task ---
+
+The arrow needs to move randomly.
+
+
+--- task ---
+
+Change the `arrow_x`{:.language-python} and `arrow_y`{:.language-python} variables to choose a random number between 100 and 300.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10-11
+---
+def shoot_arrow(): arrow_x = randint(100, 300) arrow_y = randint(100, 300) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+
+--- task ---
+
+
+**Test:** Click the **Run** button. You should see the arrow jump around the target.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/hi-IN/step_5.md b/hi-IN/step_5.md
new file mode 100644
index 000000000..8d30135a2
--- /dev/null
+++ b/hi-IN/step_5.md
@@ -0,0 +1,80 @@
+## What colour did you hit?
+
+Next, you will add some code to get the colour at the location of the arrow.
+
+### Get the colour hit by the arrow
+
+--- task ---
+
+Add a new **global variable** called `hit_colour`.
+
+Add code to `get` the colour at the centre of the arrow ,and store it in the `hit_colour` variable.
+
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10, 13, 14
+---
+def shoot_arrow(): global hit_colour
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300) hit_colour = get(arrow_x, arrow_y).hex print(hit_colour) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+**Tip:** The code to `get` the colour needs to be **before** the code to draw the `circle` otherwise you will always save the brown colour of the arrow!
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see colours being printed in the **Text output**, in hexadecimal format.
+
+--- /task ---
+
+### Run code when the mouse is pressed
+
+--- task ---
+
+Comment out the line that prints the colour. This means it will not run.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 13
+line_highlights: 14
+---
+
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Add code to print the target emoji 🎯 **when the mouse is clicked**.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 5
+line_highlights: 6-7
+---
+# mouse_powed फ़ंक्शन यहाँ जाता है
+def mouse_pressed():
+print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see the 🎯 character printed when you click the mouse on the target.
+
+
+
+--- /task ---
+
+--- save ---
\ No newline at end of file
diff --git a/hi-IN/step_6.md b/hi-IN/step_6.md
new file mode 100644
index 000000000..9449522ab
--- /dev/null
+++ b/hi-IN/step_6.md
@@ -0,0 +1,112 @@
+## Score points
+
+
+
+Add a score based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Comment out the line to print the 🎯 character so that it no longer runs.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 7
+---
+def mouse_pressed(): # print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Display a message **if** the `hit_colour`{:.language-python} is equal to the `outer` circle colour (blue).
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 8-9
+---
+def mouse_pressed():
+# print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!')
+
+--- /code ---
+
+**Tip:** If you changed the colour of your outer circle then you will need to replace `blue` with the colour name that you have chosen.
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Wait for the arrow to land on the blue circle, then click your left mouse button. 
+
+--- /task ---
+
+`elif`{:.language-python} can be used to add more conditions to your `if`{:.language-python} statement.
+
+--- task ---
+
+Add some more code to score points if the arrow lands on the **inner** or **middle** circles.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 10-14
+---
+
+def mouse_pressed(): # print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!') elif hit_colour == Color('red').hex: print('You hit the inner circle, 200 points!') elif hit_colour == Color('yellow').hex: print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button.You should score points whenever you hit the target.
+
+
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles?
+
+To do this last check, you use `else`{:.language-python}.
+
+--- task ---
+
+Add code to `print` a message when none of the `if` and `elif` statements are true.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 12
+line_highlights: 14-15
+---
+
+ elif hit_colour == Color('yellow').hex:
+ print('You hit the middle, 500 points!')
+ else:
+ print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Fire the arrow in the grass or sky to see the miss message.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/hi-IN/step_7.md b/hi-IN/step_7.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/hi-IN/step_7.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/hi-IN/step_8.md b/hi-IN/step_8.md
new file mode 100644
index 000000000..910635d28
--- /dev/null
+++ b/hi-IN/step_8.md
@@ -0,0 +1,36 @@
+## Challenge
+
+--- challenge ---
+
+
+You could:
+
+
+--- task ---
+
+Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position
+
+--- /task ---
+
+--- task ---
+
+Put emojis in your print messages ([here's a list of emojis](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from)
+
+--- /task ---
+
+--- task ---
+
+Make the game easier or harder by changing the `frame_rate=2` value
+
+
+--- /task ---
+
+--- task ---
+
+Add a variable to keep track of the total score, adding the correct number of points to it each time.
+
+--- /task ---
+
+
+
+--- /challenge ---
diff --git a/hi-IN/step_9.md b/hi-IN/step_9.md
new file mode 100644
index 000000000..86edf4a89
--- /dev/null
+++ b/hi-IN/step_9.md
@@ -0,0 +1,21 @@
+## What can you do now?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+\--- print-only ---
+
+{:width="600px"}
+
+\--- /print-only ---
+
+\--- no-print ---
+
+Click the **Run** button to view an example of this project.
+
+
+
+\--- /no-print ---
+
+Or, why not try out another [Python](https://projects.raspberrypi.org/en/projects?software%5B%5D=python) project.
+
diff --git a/hr-HR/images/alternative-colours.png b/hr-HR/images/alternative-colours.png
new file mode 100644
index 000000000..a688ac942
Binary files /dev/null and b/hr-HR/images/alternative-colours.png differ
diff --git a/hr-HR/images/animation_bg_erase.gif b/hr-HR/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/hr-HR/images/animation_bg_erase.gif differ
diff --git a/hr-HR/images/animation_no_bg_erase.gif b/hr-HR/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/hr-HR/images/animation_no_bg_erase.gif differ
diff --git a/hr-HR/images/arrow-middle.png b/hr-HR/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/hr-HR/images/arrow-middle.png differ
diff --git a/hr-HR/images/arrow-target.png b/hr-HR/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/hr-HR/images/arrow-target.png differ
diff --git a/hr-HR/images/background.png b/hr-HR/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/hr-HR/images/background.png differ
diff --git a/hr-HR/images/banner.png b/hr-HR/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/hr-HR/images/banner.png differ
diff --git a/hr-HR/images/blue-circle.png b/hr-HR/images/blue-circle.png
new file mode 100644
index 000000000..65c8564cc
Binary files /dev/null and b/hr-HR/images/blue-circle.png differ
diff --git a/hr-HR/images/blue-points.png b/hr-HR/images/blue-points.png
new file mode 100644
index 000000000..7c1a8049a
Binary files /dev/null and b/hr-HR/images/blue-points.png differ
diff --git a/hr-HR/images/bottom-right.png b/hr-HR/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/hr-HR/images/bottom-right.png differ
diff --git a/hr-HR/images/centre.png b/hr-HR/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/hr-HR/images/centre.png differ
diff --git a/hr-HR/images/circle-coords.png b/hr-HR/images/circle-coords.png
new file mode 100644
index 000000000..6c0d2c78b
Binary files /dev/null and b/hr-HR/images/circle-coords.png differ
diff --git a/hr-HR/images/coords_animation.gif b/hr-HR/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/hr-HR/images/coords_animation.gif differ
diff --git a/hr-HR/images/difficulty-setting.png b/hr-HR/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/hr-HR/images/difficulty-setting.png differ
diff --git a/hr-HR/images/fire_arrow.gif b/hr-HR/images/fire_arrow.gif
new file mode 100644
index 000000000..c084db578
Binary files /dev/null and b/hr-HR/images/fire_arrow.gif differ
diff --git a/hr-HR/images/five_circles.png b/hr-HR/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/hr-HR/images/five_circles.png differ
diff --git a/hr-HR/images/green-grass.png b/hr-HR/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/hr-HR/images/green-grass.png differ
diff --git a/hr-HR/images/grey-circle.png b/hr-HR/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/hr-HR/images/grey-circle.png differ
diff --git a/hr-HR/images/grey-points.png b/hr-HR/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/hr-HR/images/grey-points.png differ
diff --git a/hr-HR/images/initial_target.png b/hr-HR/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/hr-HR/images/initial_target.png differ
diff --git a/hr-HR/images/missed-points.png b/hr-HR/images/missed-points.png
new file mode 100644
index 000000000..0cd14626c
Binary files /dev/null and b/hr-HR/images/missed-points.png differ
diff --git a/hr-HR/images/outline-circles.png b/hr-HR/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/hr-HR/images/outline-circles.png differ
diff --git a/hr-HR/images/points-scored.gif b/hr-HR/images/points-scored.gif
new file mode 100644
index 000000000..e6ddac2a3
Binary files /dev/null and b/hr-HR/images/points-scored.gif differ
diff --git a/hr-HR/images/quiz-colour.png b/hr-HR/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/hr-HR/images/quiz-colour.png differ
diff --git a/hr-HR/images/random-side.png b/hr-HR/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/hr-HR/images/random-side.png differ
diff --git a/hr-HR/images/rectangle-diagram.png b/hr-HR/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/hr-HR/images/rectangle-diagram.png differ
diff --git a/hr-HR/images/showcase_rocket.png b/hr-HR/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/hr-HR/images/showcase_rocket.png differ
diff --git a/hr-HR/images/showcase_static.png b/hr-HR/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/hr-HR/images/showcase_static.png differ
diff --git a/hr-HR/images/sky_coords.png b/hr-HR/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/hr-HR/images/sky_coords.png differ
diff --git a/hr-HR/images/sky_stroke.png b/hr-HR/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/hr-HR/images/sky_stroke.png differ
diff --git a/hr-HR/images/stand_coords.png b/hr-HR/images/stand_coords.png
new file mode 100644
index 000000000..28e151045
Binary files /dev/null and b/hr-HR/images/stand_coords.png differ
diff --git a/hr-HR/images/step_4_preview.gif b/hr-HR/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/hr-HR/images/step_4_preview.gif differ
diff --git a/hr-HR/images/step_5_preview.gif b/hr-HR/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/hr-HR/images/step_5_preview.gif differ
diff --git a/hr-HR/images/target-stand.png b/hr-HR/images/target-stand.png
new file mode 100644
index 000000000..c64259beb
Binary files /dev/null and b/hr-HR/images/target-stand.png differ
diff --git a/hr-HR/images/target_area.png b/hr-HR/images/target_area.png
new file mode 100644
index 000000000..72d80ba1d
Binary files /dev/null and b/hr-HR/images/target_area.png differ
diff --git a/hr-HR/images/three-circles.png b/hr-HR/images/three-circles.png
new file mode 100644
index 000000000..90a5e243a
Binary files /dev/null and b/hr-HR/images/three-circles.png differ
diff --git a/hr-HR/images/top-left.png b/hr-HR/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/hr-HR/images/top-left.png differ
diff --git a/hr-HR/images/triangles-coords.png b/hr-HR/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/hr-HR/images/triangles-coords.png differ
diff --git a/hr-HR/images/upgrade-ideas.png b/hr-HR/images/upgrade-ideas.png
new file mode 100644
index 000000000..bfda023ae
Binary files /dev/null and b/hr-HR/images/upgrade-ideas.png differ
diff --git a/hr-HR/images/yellow-points.png b/hr-HR/images/yellow-points.png
new file mode 100644
index 000000000..5e702c248
Binary files /dev/null and b/hr-HR/images/yellow-points.png differ
diff --git a/hr-HR/meta.yml b/hr-HR/meta.yml
new file mode 100644
index 000000000..d4420e902
--- /dev/null
+++ b/hr-HR/meta.yml
@@ -0,0 +1,36 @@
+---
+title: Target practice
+hero_image: images/banner.png
+description: Use Python to draw a target and score points by hitting it with arrows
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: You will make
+ -
+ title: Create a background
+ -
+ title: Draw your target
+ completion:
+ - engaged
+ -
+ title: Fire your arrow
+ -
+ title: Score points
+ completion:
+ - internal
+ -
+ title: Quick quiz
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: Upgrade your project
+ -
+ title: What next?
diff --git a/hr-HR/python-comments-demo.txt b/hr-HR/python-comments-demo.txt
new file mode 100644
index 000000000..cb2eb5621
--- /dev/null
+++ b/hr-HR/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Setup your game here
+
+width and height of screen
+
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Set the fill color to grass
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the circle fill colour to outer
+
+x, y, width of the circle
+
+Blue
+
+Red
+
+Yellow
+
+Set the circle fill colour to inner
+
+Inner circle - x, y, width of the circle
+
+Set the circle fill colour to middle
+
+Middle circle - x, y, width of the circle
+
+The shoot_arrow function goes here
+
+Store a random number between 100 and 300
+
+Set the arrow to fill colour to wood
+
+Draw a small circle at random coordinates
+
+Get the hit colour
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Save the colour before drawing the arrow
+
+Like functions, 'if' statements are indented
+
+Import library code
+
+Keep this to run your code
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Set the fill color to grass
diff --git a/hr-HR/python-comments.txt b/hr-HR/python-comments.txt
new file mode 100644
index 000000000..160666a85
--- /dev/null
+++ b/hr-HR/python-comments.txt
@@ -0,0 +1,87 @@
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Start x, start y, width, height
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the arrow to fill colour to wood
+
+Set the stand fill colour to grass
+
+Set the circle fill colour to outer
+
+Set the circle fill colour to inner
+
+Set the circle fill colour to middle
+
+x, y, width of the circle
+
+Inner circle - x, y, width of the circle
+
+Middle circle - x, y, width of the circle
+
+Outer circle.200, 200 is the middle of the screen
+
+Blue
+
+Red
+
+Yellow
+
+Stand
+
+Outer circle
+
+Inner circle
+
+Bullseye
+
+The shoot_arrow function goes here
+
+Import library code
+
+Update to random coordinates
+
+Save the colour before drawing the arrow
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Like functions, 'if' statements are indented
+
+Setup your game here
+
+width and height
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Keep this to run your code
+
+Store a random number between 100 and 300
+
+Get the hit colour
+
+Draw a small circle at random coordinates
+
+width and height of screen
diff --git a/hr-HR/python-translatable-demo.txt b/hr-HR/python-translatable-demo.txt
new file mode 100644
index 000000000..71707d059
--- /dev/null
+++ b/hr-HR/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+wood
+
+sky
+
+grass
+
+outer
+
+inner
+
+middle
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
+
+speed
diff --git a/hr-HR/python-translatable.txt b/hr-HR/python-translatable.txt
new file mode 100644
index 000000000..75c0058cc
--- /dev/null
+++ b/hr-HR/python-translatable.txt
@@ -0,0 +1,43 @@
+sky
+
+grass
+
+wood
+
+outer
+
+inner
+
+bullseye
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You hit the bullseye, 500 points!
+
+You missed! No points!
+
+How fast do you want the arrow? slow, medium, fast
+
+You hit red, 200 points!
+
+speed
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
diff --git a/hr-HR/quiz1/question_1.md b/hr-HR/quiz1/question_1.md
new file mode 100644
index 000000000..7413e69a7
--- /dev/null
+++ b/hr-HR/quiz1/question_1.md
@@ -0,0 +1,53 @@
+## Quick quiz
+
+Answer the three questions. There are hints to guide you to the correct answer.
+
+When you have answered each question, click on **Check my answer**.
+
+Have fun!
+
+--- question ---
+---
+legend: Question 1 of 3
+---
+Here is a blue square, what are the RGB values that will create it?
+
+
+
+--- choices ---
+
+- ( ) (0, 0, 0)
+
+ --- feedback ---
+
+Not quite, when all the colour values are set to `0`, the color is **black**.
+
+ --- /feedback ---
+
+- ( ) (255, 0, 0)
+
+ --- feedback ---
+
+Not quite, colours follow the RGB model. This colour has maximum R value and no G or B, so will be **red**.
+
+ --- /feedback ---
+
+- (x) (0, 0, 255)
+
+ --- feedback ---
+
+ That's correct! Colours follow the RGB model. This colour has no R or G, but maximum B, so will be **blue**.
+
+ --- /feedback ---
+
+- ( ) (255, 255, 255)
+
+ --- feedback ---
+
+ Not quite, when all the colour values are set to the `255` maximum, the color is **white**.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/hr-HR/quiz1/question_2.md b/hr-HR/quiz1/question_2.md
new file mode 100644
index 000000000..cb8b743b2
--- /dev/null
+++ b/hr-HR/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legend: Question 2 of 3
+---
+
+In your project, you used `if` , `elif`, and `else` conditions to check which colour the arrow landed on.
+
+In the example below, a variable called `speed` has the number `6` stored in it. When this `if` statement is run, what would be printed in the output area?
+
+--- code ---
+---
+language: python
+---
+speed = 6
+
+if speed == 7: print('Super fast') elif speed == 5: print('Pretty quick') elif speed == 6: print('Very fast') else: print('Speed not recognised!')
+
+--- /code ---
+
+--- choices ---
+
+- (x) `Very fast`
+
+ --- feedback ---
+
+ That's correct! The **speed** variable has been assigned the value `6`, which makes the `speed == 6` condition **True** and prints `Very fast`.
+
+ --- /feedback ---
+
+- ( ) `Speed not recognised!`
+
+ --- feedback ---
+
+ Not quite, look at the value assigned to the **speed** variable.
+
+ --- /feedback ---
+
+- ( ) Nothing gets printed
+
+ --- feedback ---
+
+ Try again, `else` is used as a final option for when all the above conditions are false. Look through the conditions again, are any of the conditions true?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/hr-HR/quiz1/question_3.md b/hr-HR/quiz1/question_3.md
new file mode 100644
index 000000000..de44b3b7f
--- /dev/null
+++ b/hr-HR/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legend: Question 3 of 3
+---
+
+A circle is drawn using the following code:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+Which of the images below show the correct position of this circle in the output area?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the bottom-right corner, the coordinates would need to be the same as the screen size. In this example, the ellipse would be `circle(400, 400, 300)`.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the middle, the coordinates would need to be half of the screen size. In this example, `circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ That's correct! This circle is centred at coordinates (0,0), the top-left corner of the screen.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ No, this circle would have code of `circle(350, 150, 300)` to centre it towards the top-right of the screen. The `x` coordinate is how far across the screen the ellipse is, and the `y` coordinate is how far down the screen it is.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/hr-HR/step_1.md b/hr-HR/step_1.md
new file mode 100644
index 000000000..21a69d6b9
--- /dev/null
+++ b/hr-HR/step_1.md
@@ -0,0 +1,40 @@
+## You will make
+
+Use Python, with the `p5` graphics library, to draw a target and score points by hitting it with arrows.
+
+You will:
+ + Personalise your game with **RGB colours**
+ + Use **conditional statements** (`if`, `elif`, `else`) to make decisions
+ + Position shapes with **x, y coordinates**
+
+--- no-print ---
+
+### Play ▶️
+
+--- task ---
+
+
+
+Click the **Run** button below to start the game. When the dot appears on the target 🎯, click the mouse (or tap on your tablet) to fire your arrow.
+
+Have a few goes. Your score appears in the output area below the target. How does your score change when the arrow lands on the different colours?
+
+
+
+
+--- /task ---
+
+--- /no-print ---
+
+--- print-only ---
+
+
+
+--- /print-only ---
+
+
+The oldest evidence of archery comes from the Sibudu Cave in KwaZulu-Natal, South Africa. Remains of stone and bone arrowheads have been found, which date to between 60,000 and 70,000 years ago.
+
+
+
diff --git a/hr-HR/step_2.md b/hr-HR/step_2.md
new file mode 100644
index 000000000..b03ac80cf
--- /dev/null
+++ b/hr-HR/step_2.md
@@ -0,0 +1,97 @@
+## Create a background
+
+
+
+Your game needs a colourful background.
+
+
+
+{:width="300px"}
+
+
+
+
+### Open the starter project
+
+--- task ---
+
+Open the [Target practice starter](https://trinket.io/python/9973649e5c){:target="_blank"} project.
+
+If you have a Trinket account, you can click on the **Remix** button to save a copy to your **My Trinkets** library.
+
+--- /task ---
+
+### Edit the sky
+
+--- task ---
+
+The starter project has some code already written for you.
+
+Click **'Run'** to see a blue filled rectangle drawn from x=`0`, y=`0` (the top of the screen). This `400` x `250` pixels rectangle is the sky.
+
+{:width="400px"}
+
+**Tip:** 💡 Coordinates start from (x=0, y=0) in the top left corner. This might be different to other coordinate systems you have used.
+
+--- /task ---
+
+--- task ---
+
+The sky has been drawn with a black border (stroke).
+
+To turn the stroke off for all shapes add `no_stroke()` to the `setup` function:
+
+--- code ---
+---
+language: python filename: main.py — setup() line_numbers: true line_number_start: 11
+line_highlights: 15
+---
+def setup():
+# Setup your game here
+ size(400, 400) # width and height of screen frame_rate(2) no_stroke()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Run** your code again and notice 👀 that the border (stroke) has now disappeared.
+
+--- /task ---
+
+### Draw the grass
+
+--- task ---
+
+**Add** code to draw a green rectangle at the bottom of the screen.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 17
+line_highlights: 27, 28
+---
+def draw():
+# Things to do in every frame
+ global wood sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206 grass = color(149, 212, 122) wood = color(145, 96, 51) outer = color(0, 120, 180)
+
+ fill(sky)
+rect(0, 0, 400, 250)
+fill(grass) # Set the fill color to grass rect(0, 250, 400, 150) # x, y, width, height
+
+--- /code ---
+
+**Tip:** 💡 We have added comments to our code, like `# Set the fill color to grass`, to tell you what it does. You don't need to add these comments to your code, but they can be helpful to remind you what lines of code do.
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project again to view the finished background.
+
+{:width="400px"}
+
+--- /task ---
+
diff --git a/hr-HR/step_3.md b/hr-HR/step_3.md
new file mode 100644
index 000000000..39986aa1f
--- /dev/null
+++ b/hr-HR/step_3.md
@@ -0,0 +1,152 @@
+## Draw your target
+
+
+
+Your game needs a target to shoot arrows at.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a triangular stand
+
+--- task ---
+
+Set the fill colour to `wood` (brown).
+
+Draw a triangle using the x and y coordinates for each of the corners.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 27
+line_highlights: 29, 30
+---
+ fill(grass)
+rect(0, 250, 400, 150) fill(wood) # Set the stand fill colour to wood
+triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your code to see the stand for your target:
+
+{:width="400px"}
+
+--- /task ---
+
+### Draw the target circles
+
+--- task ---
+
+The largest part of the target is a blue **circle**.
+
+Set the fill colour to `outer` (blue).
+
+Draw a circle with x and y coordinates for its centre and a width.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 29
+line_highlights: 31, 32
+---
+
+ fill(wood)
+triangle(150, 350, 200, 150, 250, 350)
+fill(outer) # Set the circle fill colour to outer
+circle(200, 200, 170) # x, y, width of the circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the first large blue circle.
+
+The blue circle was drawn after the stand so it is in front:
+
+{:width="400px"}
+
+--- /task ---
+
+--- task ---
+
+👀 Find your colour variables in the `draw` function.
+
+Create two variables called `inner` and `middle` to store colours for the other circles.
+
+The `color` function expects three numbers: one each for red, green, and blue.
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 17
+line_highlights: 24, 25
+---
+def draw():
+# Things to do in every frame global wood sky = color(92, 204, 206)
+grass = color(149, 212, 122)
+wood = color(145, 96, 51)
+outer = color(0, 120, 180) # Blue
+inner = color(210, 60, 60) # Red
+middle = color(220, 200, 0) # Yellow
+
+--- /code ---
+
+--- /task ---
+
+The target is made of different-sized circles with the same centre coordinates (200, 200).
+
+--- task ---
+
+**Add** coloured circles for the inner and middle parts of the target.
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 31
+line_highlights: 35, 36, 37, 38
+---
+ fill(wood)
+triangle(150, 350, 200, 150, 250, 350)
+fill(outer)
+circle(200, 200, 170) fill(inner) # Set the circle fill colour to inner
+circle(200, 200, 110) # Inner circle - x, y, width of the circle
+fill(middle) # Set the circle fill colour to middle
+circle(200, 200, 30) # Middle circle - x, y, width of the circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project to see the target with three coloured circles.
+
+{:width="400px"}
+
+**Debug:** 🐞 Check that you have used the American spelling of 'color' (without a 'u').
+
+--- /task ---
+
+--- task ---
+
+**Choose:** 💭 Change any of the colours.
+
+[[[generic-theory-simple-colours]]]
+
+{:width="400px"}
+
+
+--- /task ---
+
+
+
diff --git a/hr-HR/step_4.md b/hr-HR/step_4.md
new file mode 100644
index 000000000..995a078e0
--- /dev/null
+++ b/hr-HR/step_4.md
@@ -0,0 +1,159 @@
+## Fire your arrow
+
+
+
+When you click or tap, an arrow will fire at the position of a moving target circle.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a target circle every frame
+
+ Computers create the effect of movement by showing lots of images one after another. Each image is called a frame .
+
+
+--- task ---
+
+Define your `shoot_arrow()` function under the comment **# The shoot_arrow function goes here**.
+
+Add code to randomly draw a brown circle within a target area:
+
+
+
+--- code ---
+---
+language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 9
+line_highlights: 10, 11, 12, 13, 14
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = randint(100, 300) # Store a random number between 100 and 300
+arrow_y = randint(100, 300) # Store a random number between 100 and 300
+fill(wood) # Set the arrow to fill colour to wood
+circle(arrow_x, arrow_y, 15) # Draw a small circle at random coordinates
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Go to the `draw` function and call your new `shoot_arrow` function.
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 42
+line_highlights: 44
+---
+ fill(middle)
+circle(200, 200, 30)
+shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run you code and see the arrow appear in a random position each frame.
+
+
+
+The background and target will be drawn over the old arrow. This means you only see one arrow at a time.
+
+--- /task ---
+
+### Get the colour hit by the arrow
+
+The `get()` function returns the colour of a pixel.
+
+
+A pixel, short for picture element, is a single coloured dot within an image. Images are made up of lots of coloured pixels.
+
+
+--- task ---
+
+Add code to `get` the colour of the pixel at the centre of the arrow and store it in the `hit_color` variable.
+
+--- code ---
+---
+language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 9
+line_highlights: 13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300)
+hit_color = get(arrow_x, arrow_y) # Get the hit colour fill(wood)
+circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+**Tip:** 💡 The code to `get` the colour needs to be **before** the code to draw the `circle` otherwise you will always save the wood colour of the arrow!
+
+--- /task ---
+
+### Print the colour when the mouse is pressed
+
+The `p5` library 'listens' for certain events, one of these is the press of the mouse button. When it detects that the button has been pressed, it will run whatever code it has been given in the `mouse_pressed` function.
+
+--- task ---
+
+Define your `mouse_pressed()` function under the comment **# The mouse_pressed function goes here**.
+
+Add code to print the amounts of red, green, and blue in the pixel the arrow lands on.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 8, 9
+---
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+print( red(hit_color), green(hit_color), blue(hit_color) )
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Make `hit_color` a **global variable** so that it can be used throughout your code:
+
+--- code ---
+---
+language: python filename: main.py - shoot_arrow() line_numbers: true line_number_start: 11
+line_highlights: 13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+global hit_color # Can be used in other functions
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300)
+hit_color = get(arrow_x, arrow_y) # Save the colour before drawing the arrow fill(wood)
+circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project.
+
+The project prints the `hit_color` each time the arrow is redrawn.
+
+
+
+**Debug:** 🐞 If you are seeing a message about `hit_color` being 'not defined', then go back to `shoot_arrow()` and check that you have the `global hit_color` line.
+
+**Debug:** 🐞 Check the `print` line really carefully for commas and brackets.
+
+--- /task ---
+
+
diff --git a/hr-HR/step_5.md b/hr-HR/step_5.md
new file mode 100644
index 000000000..e0660f134
--- /dev/null
+++ b/hr-HR/step_5.md
@@ -0,0 +1,169 @@
+## Score points
+
+
+
+Your game will add scores based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Go to the `draw()` function and add `, outer, inner, middle` to the list of global variables.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 26
+line_highlights: 28
+---
+
+def draw():
+# Things to do in every frame
+ global wood, outer, inner, middle
+sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+grass = color(149, 212, 122)
+wood = color(145, 96, 51)
+outer = color(0, 120, 180)
+inner = color(210, 60, 60)
+middle = color(220, 200, 0)
+
+--- /code ---
+
+--- /task ---
+
+
+We use conditions all the time to make decisions. We could say 'if the pencil is blunt, then sharpen it'. Similarly, `if` conditions let us write code that do something different depending on whether a condition is true or false.
+
+
+### Display the scores
+
+--- task ---
+
+Delete ❌ the `print( red(hit_color), green(hit_color), blue(hit_color) )` line of code.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 9
+---
+# The mouse_pressed function goes here
+def mouse_pressed():
+
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+`print` a message `if` the `hit_color` is equal to `outer` 🎯.
+
+Notice 👀 that the code uses two equals signs `==` to mean **equal to**.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 9, 10
+---
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!') # Like functions, 'if' statements are indented
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow on the blue outer circle to see your message.
+
+**Tip:** 💡 `frame_rate()`, in `setup`, controls how fast your game draws. If it's going too fast, set it to a lower number.
+
+
+
+**Debug:** 🐞 Make sure your code matches exactly and you indented the code inside your `if` statement.
+
+--- /task ---
+
+`elif` (else - if) can be used to add more conditions to your `if` statement. These will be read from top to bottom. As soon as a **True** condition is found, it will be actioned. The remaining conditions will be ignored.
+
+--- task ---
+
+Score points if the arrow lands on the `inner` or `middle` circles 🎯:
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 8
+line_highlights: 11, 12, 13, 14
+---
+
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!')
+elif hit_color == inner:
+print('You hit the inner circle, 200 points!')
+elif hit_color == middle:
+print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow on the inner and middle circles to see their messages.
+
+
+
+**Debug:** 🐞 Check your indentation matches the example.
+
+**Debug:** 🐞 If you see a message about `inner` or `middle` being 'not defined', then go back to `draw()` and check that they are on the line that declares variables global.
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles? ❌
+
+To do this last check, you use `else`.
+
+--- task ---
+
+Add code to `print` a message `else` none of the `if` and `elif` statements have been met.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 8
+line_highlights: 15, 16
+---
+
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!')
+elif hit_color == inner:
+print('You hit the inner circle, 200 points!')
+elif hit_color == middle:
+print('You hit the middle, 500 points!')
+else:
+print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow in the grass or sky to see the miss message.
+
+**Choose:** 💭 Change the number of points scored for the different colours if you like.
+
+
+
+--- /task ---
+
diff --git a/hr-HR/step_6.md b/hr-HR/step_6.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/hr-HR/step_6.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/hr-HR/step_7.md b/hr-HR/step_7.md
new file mode 100644
index 000000000..e479b9649
--- /dev/null
+++ b/hr-HR/step_7.md
@@ -0,0 +1,35 @@
+## Upgrade your project
+
+
+
+Personalise and add more to your project. Perhaps you could change the difficulty level or add more circles to your target.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+You could:
+
++ Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position 🟠🟣
++ Put emoji in your print messages ([here's a list of emoji](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from) 🎯
++ Make the game easier or harder by changing the `frame_rate(2)` value 💨
++ Use `input()` to ask the user which difficulty level they want to play at 🗣️
+
+--- /task ---
+
+
+
+--- collapse ---
+---
+title: Completed project
+---
+
+You can view the [completed project here](https://trinket.io/python/f686c82d8a){:target="_blank"}.
+
+--- /collapse ---
+
diff --git a/hr-HR/step_8.md b/hr-HR/step_8.md
new file mode 100644
index 000000000..867ede7b9
--- /dev/null
+++ b/hr-HR/step_8.md
@@ -0,0 +1,31 @@
+## What next?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+--- print-only ---
+
+
+
+--- /print-only ---
+
+--- no-print ---
+
+--- task ---
+
+**Try it:** Your program will adjust the animation based on how much fuel you give it and will succeed or fail in reaching orbit. How much fuel do you want to use to reach orbit but not waste too much extra fuel?
+
+**Tip:** Around 25,000kg should be enough, but experiment with the numbers to see what happens.
+
+
+
+
+
+--- /task ---
+
+--- /no-print ---
+
+If you want to have more fun exploring Python, then you could try out any of [these projects](https://projects.raspberrypi.org/en/projects?software%5B%5D=python).
+
+
+
diff --git a/it-IT/code/target-practice-solution/main.py b/it-IT/code/target-practice-solution/main.py
new file mode 100644
index 000000000..77a4ec5fd
--- /dev/null
+++ b/it-IT/code/target-practice-solution/main.py
@@ -0,0 +1,55 @@
+# Importa la libreria di codice!
+
+from p5 import *
+from random import randint
+
+
+# La funzione mouse_pressed va qui
+def mouse_pressed():
+ global hit_colour # Può essere utilizzato in altre funzioni
+ if hit_colour == Color('blue').hex: # Come le funzioni, le istruzioni 'if' sono rientrate
+ print('Hai colpito il cerchio esterno, 50 punti!')
+ elif hit_colour == Color('red').hex:
+ print('Hai colpito il cerchio esterno, 200 punti!')
+ elif hit_colour == Color('yellow').hex:
+ print('Hai colpito il cerchio intermedio, 500 punti!')
+ else:
+ print('L\'hai mancato! Zero punti!')
+
+
+# La funzione shoot_arrow va qui
+def shoot_arrow():
+ global hit_colour
+ arrow_x = randint(100, 300) # Memorizza un numero casuale compreso tra 100 e 300
+ arrow_y = randint(100, 300) # Memorizza un numero casuale compreso tra 100 e 300
+ hit_colour = get(arrow_x, arrow_y).hex # Ottieni il colore del risultato
+ # print(hit_colour)
+ fill('sienna') # Imposta la freccia per riempire il colore su marrone
+ circle(arrow_x, arrow_y, 15) # Disegna un piccolo cerchio a coordinate casuali
+
+
+def setup():
+ # Imposta il tuo gioco qui
+ size(400, 400) # larghezza e altezza
+ no_stroke()
+
+
+def draw():
+ # Cose da fare in ogni fotogramma
+ fill('cyan')
+ rect(0, 0, 400, 250) # Cielo
+ fill('lightgreen')
+ rect(0, 250, 400, 150) # Erba
+ fill('sienna')
+ triangle(150, 350, 200, 150, 250, 350) # Piedistallo
+ fill('blue')
+ circle(200, 200, 170) # Cerchio esterno
+ fill('red')
+ circle(200, 200, 110) # Cerchio interno
+ fill('yellow')
+ circle(200, 200, 30) # Cerchio intermedio
+ shoot_arrow()
+
+
+# Conserva questa parte per eseguire il codice
+run(frame_rate=2)
diff --git a/it-IT/code/target-practice-solution/project_config.yml b/it-IT/code/target-practice-solution/project_config.yml
new file mode 100644
index 000000000..438a4ba3c
--- /dev/null
+++ b/it-IT/code/target-practice-solution/project_config.yml
@@ -0,0 +1,3 @@
+name: 'Esempio di Allenamento del Tiro al Bersaglio'
+identifier: 'target-practice-solution'
+type: 'python'
diff --git a/it-IT/code/target-practice-starter/main.py b/it-IT/code/target-practice-starter/main.py
new file mode 100644
index 000000000..81bb4e279
--- /dev/null
+++ b/it-IT/code/target-practice-starter/main.py
@@ -0,0 +1,24 @@
+# Importa la libreria di codice
+from p5 import *
+from random import randint
+
+# La funzione mouse_pressed va qui
+
+
+# La funzione shoot_arrow va qui
+
+
+def setup():
+ # Imposta il tuo gioco qui
+ size(400, 400) # larghezza e altezza dello schermo
+ no_stroke()
+
+
+def draw():
+ # Cose da fare in ogni fotogramma
+ fill("cyan")
+ rect(0, 0, 400, 250)
+
+
+# Conserva questa parte per eseguire il codice
+run(frame_rate=2)
diff --git a/it-IT/code/target-practice-starter/project_config.yml b/it-IT/code/target-practice-starter/project_config.yml
new file mode 100644
index 000000000..f40940757
--- /dev/null
+++ b/it-IT/code/target-practice-starter/project_config.yml
@@ -0,0 +1,3 @@
+name: "Allenamento di tiro al bersaglio"
+identifier: 'target-practice-starter'
+type: 'python'
diff --git a/it-IT/images/alternative-colours.png b/it-IT/images/alternative-colours.png
new file mode 100644
index 000000000..e630dd54b
Binary files /dev/null and b/it-IT/images/alternative-colours.png differ
diff --git a/it-IT/images/animation_bg_erase.gif b/it-IT/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/it-IT/images/animation_bg_erase.gif differ
diff --git a/it-IT/images/animation_no_bg_erase.gif b/it-IT/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/it-IT/images/animation_no_bg_erase.gif differ
diff --git a/it-IT/images/arrow-centre.png b/it-IT/images/arrow-centre.png
new file mode 100644
index 000000000..14dba17ee
Binary files /dev/null and b/it-IT/images/arrow-centre.png differ
diff --git a/it-IT/images/arrow-middle.png b/it-IT/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/it-IT/images/arrow-middle.png differ
diff --git a/it-IT/images/arrow-target.png b/it-IT/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/it-IT/images/arrow-target.png differ
diff --git a/it-IT/images/background.png b/it-IT/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/it-IT/images/background.png differ
diff --git a/it-IT/images/banner.png b/it-IT/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/it-IT/images/banner.png differ
diff --git a/it-IT/images/blue-circle.png b/it-IT/images/blue-circle.png
new file mode 100644
index 000000000..054b612e8
Binary files /dev/null and b/it-IT/images/blue-circle.png differ
diff --git a/it-IT/images/blue-points.png b/it-IT/images/blue-points.png
new file mode 100644
index 000000000..ddfbb723d
Binary files /dev/null and b/it-IT/images/blue-points.png differ
diff --git a/it-IT/images/blue_circle_points.gif b/it-IT/images/blue_circle_points.gif
new file mode 100644
index 000000000..e6308eb07
Binary files /dev/null and b/it-IT/images/blue_circle_points.gif differ
diff --git a/it-IT/images/bottom-right.png b/it-IT/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/it-IT/images/bottom-right.png differ
diff --git a/it-IT/images/centre.png b/it-IT/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/it-IT/images/centre.png differ
diff --git a/it-IT/images/circle-coords.png b/it-IT/images/circle-coords.png
new file mode 100644
index 000000000..a888286e1
Binary files /dev/null and b/it-IT/images/circle-coords.png differ
diff --git a/it-IT/images/coords_animation.gif b/it-IT/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/it-IT/images/coords_animation.gif differ
diff --git a/it-IT/images/difficulty-setting.png b/it-IT/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/it-IT/images/difficulty-setting.png differ
diff --git a/it-IT/images/fire_arrow.gif b/it-IT/images/fire_arrow.gif
new file mode 100644
index 000000000..924ba34af
Binary files /dev/null and b/it-IT/images/fire_arrow.gif differ
diff --git a/it-IT/images/five_circles.png b/it-IT/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/it-IT/images/five_circles.png differ
diff --git a/it-IT/images/green-grass.png b/it-IT/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/it-IT/images/green-grass.png differ
diff --git a/it-IT/images/grey-circle.png b/it-IT/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/it-IT/images/grey-circle.png differ
diff --git a/it-IT/images/grey-points.png b/it-IT/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/it-IT/images/grey-points.png differ
diff --git a/it-IT/images/initial_target.png b/it-IT/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/it-IT/images/initial_target.png differ
diff --git a/it-IT/images/missed_no_points.gif b/it-IT/images/missed_no_points.gif
new file mode 100644
index 000000000..212ca30e4
Binary files /dev/null and b/it-IT/images/missed_no_points.gif differ
diff --git a/it-IT/images/outline-circles.png b/it-IT/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/it-IT/images/outline-circles.png differ
diff --git a/it-IT/images/points-scored.gif b/it-IT/images/points-scored.gif
new file mode 100644
index 000000000..eefd428ce
Binary files /dev/null and b/it-IT/images/points-scored.gif differ
diff --git a/it-IT/images/quiz-colour.png b/it-IT/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/it-IT/images/quiz-colour.png differ
diff --git a/it-IT/images/random-side.png b/it-IT/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/it-IT/images/random-side.png differ
diff --git a/it-IT/images/rectangle-diagram.png b/it-IT/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/it-IT/images/rectangle-diagram.png differ
diff --git a/it-IT/images/showcase_rocket.png b/it-IT/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/it-IT/images/showcase_rocket.png differ
diff --git a/it-IT/images/showcase_static.png b/it-IT/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/it-IT/images/showcase_static.png differ
diff --git a/it-IT/images/sky_coords.png b/it-IT/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/it-IT/images/sky_coords.png differ
diff --git a/it-IT/images/sky_stroke.png b/it-IT/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/it-IT/images/sky_stroke.png differ
diff --git a/it-IT/images/stand_coords.png b/it-IT/images/stand_coords.png
new file mode 100644
index 000000000..2002bae5f
Binary files /dev/null and b/it-IT/images/stand_coords.png differ
diff --git a/it-IT/images/step_4_preview.gif b/it-IT/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/it-IT/images/step_4_preview.gif differ
diff --git a/it-IT/images/step_5_preview.gif b/it-IT/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/it-IT/images/step_5_preview.gif differ
diff --git a/it-IT/images/target-stand.png b/it-IT/images/target-stand.png
new file mode 100644
index 000000000..c65d89363
Binary files /dev/null and b/it-IT/images/target-stand.png differ
diff --git a/it-IT/images/target_area.png b/it-IT/images/target_area.png
new file mode 100644
index 000000000..1e5c72120
Binary files /dev/null and b/it-IT/images/target_area.png differ
diff --git a/it-IT/images/target_printed.gif b/it-IT/images/target_printed.gif
new file mode 100644
index 000000000..b29a244fe
Binary files /dev/null and b/it-IT/images/target_printed.gif differ
diff --git a/it-IT/images/three-circles.png b/it-IT/images/three-circles.png
new file mode 100644
index 000000000..13a8dd8ed
Binary files /dev/null and b/it-IT/images/three-circles.png differ
diff --git a/it-IT/images/top-left.png b/it-IT/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/it-IT/images/top-left.png differ
diff --git a/it-IT/images/triangles-coords.png b/it-IT/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/it-IT/images/triangles-coords.png differ
diff --git a/it-IT/images/upgrade-ideas.png b/it-IT/images/upgrade-ideas.png
new file mode 100644
index 000000000..b04274189
Binary files /dev/null and b/it-IT/images/upgrade-ideas.png differ
diff --git a/it-IT/images/yellow-points.png b/it-IT/images/yellow-points.png
new file mode 100644
index 000000000..862f53134
Binary files /dev/null and b/it-IT/images/yellow-points.png differ
diff --git a/it-IT/meta.yml b/it-IT/meta.yml
new file mode 100644
index 000000000..7af525303
--- /dev/null
+++ b/it-IT/meta.yml
@@ -0,0 +1,41 @@
+---
+title: Allenamento di tiro al bersaglio
+hero_image: images/banner.png
+description: Usa Python per disegnare un bersaglio e fare punti colpendolo con le frecce
+meta_title: Progetti di programmazione in Python per bambini e ragazzi | Allenamento di tiro al bersaglio
+meta_description: Impara Python con i progetti di codifica della Raspberry Pi Foundation per bambini e adolescenti. Usa Python per disegnare un bersaglio e segnare punti colpendolo con le frecce.
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: Quello che farai
+ -
+ title: Crea uno sfondo
+ -
+ title: Disegna il tuo bersaglio
+ completion:
+ - engaged
+ -
+ title: Scocca la tua freccia
+ -
+ title: Punteggio
+ -
+ title: Quiz veloce
+ completion:
+ - external
+ -
+ title: Migliora il tuo progetto
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: E adesso?
+ challenge: true
+ -
+ title: What can you do now?
diff --git a/it-IT/python-comments-demo.txt b/it-IT/python-comments-demo.txt
new file mode 100644
index 000000000..86261a0a7
--- /dev/null
+++ b/it-IT/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Setup your game here
+
+width and height of screen
+
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Set the fill colour to grass
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the circle fill colour to outer
+
+x, y, width of the circle
+
+Blue
+
+Red
+
+Yellow
+
+Set the circle fill colour to inner
+
+Inner circle - x, y, width of the circle
+
+Set the circle fill colour to middle
+
+Middle circle - x, y, width of the circle
+
+The shoot_arrow function goes here
+
+Store a random number between 100 and 300
+
+Set the arrow to fill colour to wood
+
+Draw a small circle at random coordinates
+
+Get the hit colour
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Save the colour before drawing the arrow
+
+Like functions, 'if' statements are indented
+
+Import library code
+
+Keep this to run your code
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Set the fill colour to grass
diff --git a/it-IT/python-comments.txt b/it-IT/python-comments.txt
new file mode 100644
index 000000000..eb1d8c3a2
--- /dev/null
+++ b/it-IT/python-comments.txt
@@ -0,0 +1,27 @@
+Cose da fare in ogni fotogramma
+
+Draw the inner circle
+
+Draw the middle circle
+
+La funzione shoot_arrow va qui
+
+La funzione mouse_pressed va qui
+
+Hai colpito il cerchio esterno, 50 punti!
+
+Hai colpito il cerchio interno, 200 punti!
+
+Hai colpito a metà bersaglio, 500 punti!
+
+You hit the middle, 500 points!
+
+Mancato! Zero punti!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
\ No newline at end of file
diff --git a/it-IT/python-translatable-demo.txt b/it-IT/python-translatable-demo.txt
new file mode 100644
index 000000000..71707d059
--- /dev/null
+++ b/it-IT/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+wood
+
+sky
+
+grass
+
+outer
+
+inner
+
+middle
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
+
+speed
diff --git a/it-IT/python-translatable.txt b/it-IT/python-translatable.txt
new file mode 100644
index 000000000..1e4f01f6b
--- /dev/null
+++ b/it-IT/python-translatable.txt
@@ -0,0 +1,9 @@
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_colour
+
+speed
\ No newline at end of file
diff --git a/it-IT/quiz1/question_1.md b/it-IT/quiz1/question_1.md
new file mode 100644
index 000000000..9976cfe98
--- /dev/null
+++ b/it-IT/quiz1/question_1.md
@@ -0,0 +1,60 @@
+## Quiz veloce
+
+Rispondi alle tre domande. Ci sono alcuni suggerimenti per aiutarti a trovare la risposta corretta.
+
+Dopo aver risposto a ciascuna domanda, fai clic su **Controlla la mia risposta**.
+
+Divertiti!
+
+--- question ---
+---
+legend: Domanda 1 di 3
+---
+In your project you added `randint(100, 300)` to your `shoot_arrow()` function. What does `randint(100, 300)` do?
+
+--- code ---
+---
+language: python
+---
+
+def shoot_arrow(): global hit_colour arrow_x = randint(100, 300) arrow_y = randint(100, 300)
+
+--- /code ---
+
+--- choices ---
+
+- (x) It chooses a random whole number between 100 and 300.
+
+ --- feedback ---
+
+È corretto. Se non utilizzi questa funzione verrà disegnato un bordo nero attorno alle tue forme.
+
+ --- /feedback ---
+
+- ( ) It makes the arrow move randomly around the screen.
+
+ --- feedback ---
+
+Non proprio. This code part of how the arrow moves randomly but you need other code too to achieve that goal.
+
+ --- /feedback ---
+
+- ( ) Riempie la forma con un dato colore.
+
+ --- feedback ---
+
+ Non proprio. La funzione fill() fa questo e di solito includerà un dato colore.
+
+ --- /feedback ---
+
+- ( ) It draws a circle of a random size.
+
+ --- feedback ---
+
+ Non proprio. La funzione circle() verrebbe utilizzata per disegnare un cerchio.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/it-IT/quiz1/question_2.md b/it-IT/quiz1/question_2.md
new file mode 100644
index 000000000..73bb048a5
--- /dev/null
+++ b/it-IT/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legend: Domanda 2 di 3
+---
+
+Nel tuo progetto, hai utilizzato le condizioni `if` , `elif`e `else` per verificare su quale colore è atterrata la freccia.
+
+Nell'esempio seguente, una variabile chiamata `speed` ha il numero `6` memorizzato al suo interno. Quando viene eseguita questa istruzione `if` , cosa verrà stampato nell'area di output?
+
+--- code ---
+---
+language: python
+---
+speed = 6
+
+if speed == 7: print('Super veloce') elif speed == 5: print('Abbastanza veloce') elif speed == 6: print('Molto veloce') else: print('Velocità non rilevata!')
+
+--- /code ---
+
+--- choices ---
+
+- (x) `Molto veloce`
+
+ --- feedback ---
+
+ È corretto! The **speed** variable has been assigned the value `6`, which makes the `speed == 6` condition **True** and prints `Very fast`.
+
+ --- /feedback ---
+
+- ( ) `Velocità non riconosciuta!`
+
+ --- feedback ---
+
+ Non proprio, guarda il valore assegnato alla variabile **speed**.
+
+ --- /feedback ---
+
+- ( ) Non viene stampato nulla
+
+ --- feedback ---
+
+ Riprova, `else` viene utilizzato come opzione finale quando tutte le condizioni di cui sopra sono false. Esamina nuovamente le condizioni: qualcuna di esse è vera?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/it-IT/quiz1/question_3.md b/it-IT/quiz1/question_3.md
new file mode 100644
index 000000000..3dd907d2f
--- /dev/null
+++ b/it-IT/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legend: Domanda 3 di 3
+---
+
+Viene disegnato un cerchio utilizzando il seguente codice:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+Quale delle immagini seguenti mostra la posizione corretta di questo cerchio nell'area di output?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Non proprio, per centrare il cerchio nell'angolo in basso a destra, le coordinate dovrebbero essere le stesse della dimensione dello schermo. In questo esempio, l'ellisse sarebbe `circle(400, 400, 300)`.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Non proprio, per centrare il cerchio intermedio, le coordinate dovrebbero essere la metà della dimensione dello schermo. In questo esempio, `circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ È corretto! Questo cerchio è centrato nelle coordinate (0,0), nell'angolo in alto a sinistra dello schermo.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ No, per centrarlo verso l'angolo in alto a destra dello schermo, questo cerchio avrebbe il codice `circle(350, 150, 300)` . La coordinata `x` indica la distanza dell'ellisse rispetto a margine sinistro dello schermo, mentre la coordinata `y` indica dal margine superiore.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/it-IT/step_1.md b/it-IT/step_1.md
new file mode 100644
index 000000000..e52a3fad9
--- /dev/null
+++ b/it-IT/step_1.md
@@ -0,0 +1,29 @@
+## Quello che farai
+
+Usa Python, con la libreria grafica `p5` , per disegnare un bersaglio e segnare punti colpendolo con le frecce.
+
+--- print-only ---
+
+{:width="640px"}
+
+--- /print-only ---
+
+--- no-print ---
+
+
+
+Fai clic sul pulsante **Run** in basso per avviare il gioco. Quando appare il punto sul bersaglio 🎯, fai clic con il mouse (o tocca sul tablet) per scoccare la freccia.
+
+
+
+
+
+--- /no-print ---
+
+
+
+
+
diff --git a/it-IT/step_2.md b/it-IT/step_2.md
new file mode 100644
index 000000000..94f6998e6
--- /dev/null
+++ b/it-IT/step_2.md
@@ -0,0 +1,37 @@
+## Disegna l'erba
+
+--- task ---
+
+Apri il progetto [Target Practice Starter](https://editor.raspberrypi.org/en/projects/target-practice-starter){:target="_blank"}.
+
+--- /task ---
+
+--- task ---
+
+**Aggiungi** il codice per disegnare un rettangolo verde nella parte inferiore dello schermo.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 14
+line_highlights: 12
+---
+def draw(): # Things to do in every frame fill('cyan')
+rect(0, 0, 400, 250)
+fill('lightgreen')
+rect(0, 250, 400, 150)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Esegui nuovamente il progetto per visualizzare lo sfondo finito.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/it-IT/step_3.md b/it-IT/step_3.md
new file mode 100644
index 000000000..4784b2320
--- /dev/null
+++ b/it-IT/step_3.md
@@ -0,0 +1,117 @@
+## Disegna il tuo bersaglio
+
+
+
+Il tuo gioco ha bisogno di un bersaglio contro il quale lanciare le frecce.
+
+
+
+{:width="300px"}
+
+
+
+
+### Disegna un supporto triangolare
+
+--- task ---
+
+Imposta il colore di riempimento su `sienna` (marrone).
+
+Disegna un triangolo utilizzando le coordinate x e y per ciascuno degli angoli.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 18
+line_highlights: 20, 21
+---
+
+ fill('lightgreen') # Imposta il colore di riempimento dell'erba su verde chiaro
+ rect(0, 250, 400, 150) # Disegna un rettangolo per il cielo con questi valori per x, y, larghezza, altezza
+ fill('sienna') # Colore marrone
+ triangle(150, 350, 200, 150, 250, 350) # Disegna un triangolo per la posizione del bersaglio
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Esegui il codice per vedere il supporto del tuo obiettivo:
+
+{:width="400px"}
+
+--- /task ---
+
+### Disegna i cerchi bersaglio
+
+--- task ---
+
+La parte più grande del bersaglio è un **cerchio** blu.
+
+Imposta il colore di riempimento su `blu`.
+
+Disegna un cerchio con le coordinate x e y per il centro e una larghezza.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 20
+line_highlights: 22, 23
+---
+
+ fill('sienna') # Colore marrone
+ triangle(150, 350, 200, 150, 250, 350) # Disegna un triangolo per la posizione del bersaglio
+ fill('blue') # Imposta il colore di riempimento del cerchio su blu
+ circle(200, 200, 170) # Disegna il cerchio esterno
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Esegui il codice per vedere il primo grande cerchio blu.
+
+Il cerchio blu è stato disegnato dopo il supporto, quindi appare davanti.
+
+{:width="400px"}
+
+--- /task ---
+
+Il bersaglio è composto da cerchi di diverse dimensioni ma con le stesse coordinate centrali (200, 200).
+
+--- task ---
+
+**Aggiungi** cerchi colorati per le parti interne e centrali del bersaglio.
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 20
+line_highlights: 24, 25, 26, 27
+---
+
+ fill('sienna') # Colore marrone
+ triangle(150, 350, 200, 150, 250, 350) # Disegna un triangolo per la posizione del bersaglio
+ fill('blue') # Imposta il colore di riempimento del cerchio su blu
+ circle(200, 200, 170) # Disegna il cerchio esterno
+ fill('red') # Imposta il colore di riempimento del cerchio su rosso
+ circle(200, 200, 110) # Disegna il cerchio interno usando x, y, larghezza
+ fill('yellow') # Imposta il colore di riempimento del cerchio su giallo
+ circle(200, 200, 30) # Disegna il cerchio interno usando x, y, larghezza
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Esegui il tuo progetto per vedere il bersaglio con i tre cerchi colorati.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/it-IT/step_4.md b/it-IT/step_4.md
new file mode 100644
index 000000000..14b4a2c1d
--- /dev/null
+++ b/it-IT/step_4.md
@@ -0,0 +1,88 @@
+## Scocca la tua freccia
+
+
+
+Add an even smaller circle to represent an arrow.
+
+
+
+{:width="300px"}
+
+
+
+
+### Where will you shoot?
+
+--- task ---
+
+Aggiungi il codice per disegnare casualmente un cerchio marrone all'interno di un'area target:
+
+--- code ---
+---
+language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 7
+line_highlights: 8-12
+---
+# La funzione shoot_arrow va qui
+def shoot_arrow():
+arrow_x = randint(100, 300) # Memorizza un numero a caso fra 100 e 300 arrow_y = randint(100, 300) # Memorizza un numero a caso fra 100 e 300 fill('sienna') # Imposta la freccia in modo che il colore di riempimento sia marrone circle(arrow_x, arrow_y, 15) # Disegna un piccolo cerchio a coordinate casuali
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Vai alla funzione `draw` e chiama la tua nuova funzione `shoot_arrow` .
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 31
+line_highlights: 33
+---
+
+ fill('yellow') # Imposta il colore di riempimento del cerchio su giallo
+ circle(200, 200, 30) # Disegna il cerchio interno usando x, y, larghezza
+ shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Esegui il tuo progetto. You should see the arrow in the centre.
+
+
+
+
+--- /task ---
+
+The arrow needs to move randomly.
+
+
+--- task ---
+
+Definisci la tua funzione `shoot_arrow()` sotto il commento **# La funzione shoot_arrow() va qui**.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 5
+line_highlights: 9, 12
+---
+def shoot_arrow(): global hit_colour # Può essere utilizzato in altre funzioni arrow_x = randint(100, 300) # Memorizza un numero a caso fra 100 e 300 arrow_y = randint(100, 300) # Memorizza un numero a caso fra 100 e 300 hit_colour = get(arrow_x, arrow_y).hex # Ottieni il colore colpito fill('sienna') # Imposta la freccia in modo che il colore di riempimento sia marrone circle(arrow_x, arrow_y, 15) # Disegna un piccolo cerchio a coordinate casuali
+
+--- /code ---
+
+--- /task ---
+
+
+--- task ---
+
+
+**Test:** 🔄 Esegui il tuo progetto. You should see the arrow jump around the target.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/it-IT/step_5.md b/it-IT/step_5.md
new file mode 100644
index 000000000..6832aef51
--- /dev/null
+++ b/it-IT/step_5.md
@@ -0,0 +1,78 @@
+## What colour did you hit?
+
+Next, you will add some code to get the colour at the location of the arrow.
+
+### Get the colour hit by the arrow
+
+--- task ---
+
+**Debug:** 🐞Se vedi un messaggio `hit_colour` being 'not defined', torna indietro alla funzione `draw()` e controlla la riga che dichiara `hit_colour` come variabile globale.
+
+Add code to `get` the colour at the centre of the arrow ,and store it in the `hit_colour` variable.
+
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 6
+line_highlights: 7
+---
+def mouse_pressed():
+if hit_colour == Color('blue').hex: # Come il codice delle funzioni, il codice delle istruzioni 'if' è rientrato print('Hai colpito il cerchio esterno, 50 punti!')
+
+--- /code ---
+
+**Debug:** 🐞 Assicurati di aver utilizzato la stringa `.hex` per i colori del **tuo cerchio**.
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Esegui il tuo progetto. Prova a lanciare la freccia sul cerchio esterno blu per vedere il messaggio.
+
+--- /task ---
+
+### Run code when the mouse is pressed
+
+--- task ---
+
+Comment out the line that prints the colour. This means it will not run.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 6
+line_highlights: 7, 8
+---
+
+ Visualizza un messaggio if il hit_color è uguale al colore del cerchio esterno (blu) 🎯.
+
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Add code to print the target emoji 🎯 **when the mouse is clicked**.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 5
+line_highlights: 9-12
+---
+# La funzione mouse_pressed va qui
+def mouse_pressed():
+print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Esegui il tuo progetto. Prova a lanciare la freccia sul cerchio interno e su quello esterno per vedere il messaggio.
+
+
+
+--- /task ---
+
+--- save ---
\ No newline at end of file
diff --git a/it-IT/step_6.md b/it-IT/step_6.md
new file mode 100644
index 000000000..9449522ab
--- /dev/null
+++ b/it-IT/step_6.md
@@ -0,0 +1,112 @@
+## Score points
+
+
+
+Add a score based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Comment out the line to print the 🎯 character so that it no longer runs.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 7
+---
+def mouse_pressed(): # print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Display a message **if** the `hit_colour`{:.language-python} is equal to the `outer` circle colour (blue).
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 8-9
+---
+def mouse_pressed():
+# print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!')
+
+--- /code ---
+
+**Tip:** If you changed the colour of your outer circle then you will need to replace `blue` with the colour name that you have chosen.
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Wait for the arrow to land on the blue circle, then click your left mouse button. 
+
+--- /task ---
+
+`elif`{:.language-python} can be used to add more conditions to your `if`{:.language-python} statement.
+
+--- task ---
+
+Add some more code to score points if the arrow lands on the **inner** or **middle** circles.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 10-14
+---
+
+def mouse_pressed(): # print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!') elif hit_colour == Color('red').hex: print('You hit the inner circle, 200 points!') elif hit_colour == Color('yellow').hex: print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button.You should score points whenever you hit the target.
+
+
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles?
+
+To do this last check, you use `else`{:.language-python}.
+
+--- task ---
+
+Add code to `print` a message when none of the `if` and `elif` statements are true.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 12
+line_highlights: 14-15
+---
+
+ elif hit_colour == Color('yellow').hex:
+ print('You hit the middle, 500 points!')
+ else:
+ print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Fire the arrow in the grass or sky to see the miss message.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/it-IT/step_7.md b/it-IT/step_7.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/it-IT/step_7.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/it-IT/step_8.md b/it-IT/step_8.md
new file mode 100644
index 000000000..28ae6e382
--- /dev/null
+++ b/it-IT/step_8.md
@@ -0,0 +1,36 @@
+## Challenge
+
+--- challenge ---
+
+
+You could:
+
+
+--- task ---
+
+Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position
+
+--- /task ---
+
+--- task ---
+
+Put emojis in your print messages ([here's a list of emojis](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from)
+
+--- /task ---
+
+--- task ---
+
+Make the game easier or harder by changing the `frame_rate=2` value
+
+
+--- /task ---
+
+--- task ---
+
+Add a variable to keep track of the total score, adding the correct number of points to it each time.
+
+--- /task ---
+
+
+
+--- /no-print ---
diff --git a/it-IT/step_9.md b/it-IT/step_9.md
new file mode 100644
index 000000000..86edf4a89
--- /dev/null
+++ b/it-IT/step_9.md
@@ -0,0 +1,21 @@
+## What can you do now?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+\--- print-only ---
+
+{:width="600px"}
+
+\--- /print-only ---
+
+\--- no-print ---
+
+Click the **Run** button to view an example of this project.
+
+
+
+\--- /no-print ---
+
+Or, why not try out another [Python](https://projects.raspberrypi.org/en/projects?software%5B%5D=python) project.
+
diff --git a/ja-JP/code/target-practice-solution/main.py b/ja-JP/code/target-practice-solution/main.py
new file mode 100644
index 000000000..9b71b07d4
--- /dev/null
+++ b/ja-JP/code/target-practice-solution/main.py
@@ -0,0 +1,55 @@
+## Import library code
+
+from p5 import *
+from random import randint
+
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+ # print('🎯')
+ if hit_colour == Color("blue").hex:
+ print("You hit the outer circle, 50 points!")
+ elif hit_colour == Color("red").hex:
+ print("You hit the inner circle, 200 points!")
+ elif hit_colour == Color("yellow").hex:
+ print("You hit the middle, 500 points!")
+ else:
+ print("You missed! No points!")
+
+
+# The shoot_arrow function goes here
+def shoot_arrow():
+ global hit_colour
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ fill("brown")
+ circle(arrow_x, arrow_y, 15)
+
+
+def setup():
+ # Set up your game here
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Things to do in every frame
+ fill("cyan")
+ rect(0, 0, 400, 250)
+ fill("lightgreen")
+ rect(0, 250, 400, 150)
+ fill("brown")
+ triangle(150, 350, 200, 150, 250, 350)
+ fill("blue")
+ circle(200, 200, 170)
+ fill("red")
+ circle(200, 200, 110) # Draw the inner circle
+ fill("yellow")
+ circle(200, 200, 30) # Draw the middle circle
+ shoot_arrow()
+
+
+# Keep this to run your code
+run(frame_rate=2)
diff --git a/ja-JP/code/target-practice-solution/project_config.yml b/ja-JP/code/target-practice-solution/project_config.yml
new file mode 100644
index 000000000..2c45eb56c
--- /dev/null
+++ b/ja-JP/code/target-practice-solution/project_config.yml
@@ -0,0 +1,3 @@
+name: 'Target Practice Example'
+identifier: 'target-practice-solution'
+type: 'python'
diff --git a/ja-JP/code/target-practice-starter/main.py b/ja-JP/code/target-practice-starter/main.py
new file mode 100644
index 000000000..03f477ff0
--- /dev/null
+++ b/ja-JP/code/target-practice-starter/main.py
@@ -0,0 +1,24 @@
+## Import library code
+from p5 import *
+from random import randint
+
+# The mouse_pressed function goes here
+
+
+# The shoot_arrow function goes here
+
+
+def setup():
+ # Set up your game here
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Things to do in every frame
+ fill("cyan")
+ rect(0, 0, 400, 250)
+
+
+# Keep this to run your code
+run(frame_rate=2)
diff --git a/ja-JP/code/target-practice-starter/project_config.yml b/ja-JP/code/target-practice-starter/project_config.yml
new file mode 100644
index 000000000..1f6832901
--- /dev/null
+++ b/ja-JP/code/target-practice-starter/project_config.yml
@@ -0,0 +1,3 @@
+name: "Target Practice"
+identifier: 'target-practice-starter'
+type: 'python'
diff --git a/ja-JP/images/alternative-colours.png b/ja-JP/images/alternative-colours.png
new file mode 100644
index 000000000..e630dd54b
Binary files /dev/null and b/ja-JP/images/alternative-colours.png differ
diff --git a/ja-JP/images/animation_bg_erase.gif b/ja-JP/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/ja-JP/images/animation_bg_erase.gif differ
diff --git a/ja-JP/images/animation_no_bg_erase.gif b/ja-JP/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/ja-JP/images/animation_no_bg_erase.gif differ
diff --git a/ja-JP/images/arrow-centre.png b/ja-JP/images/arrow-centre.png
new file mode 100644
index 000000000..14dba17ee
Binary files /dev/null and b/ja-JP/images/arrow-centre.png differ
diff --git a/ja-JP/images/arrow-middle.png b/ja-JP/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/ja-JP/images/arrow-middle.png differ
diff --git a/ja-JP/images/arrow-target.png b/ja-JP/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/ja-JP/images/arrow-target.png differ
diff --git a/ja-JP/images/background.png b/ja-JP/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/ja-JP/images/background.png differ
diff --git a/ja-JP/images/banner.png b/ja-JP/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/ja-JP/images/banner.png differ
diff --git a/ja-JP/images/blue-circle.png b/ja-JP/images/blue-circle.png
new file mode 100644
index 000000000..65c8564cc
Binary files /dev/null and b/ja-JP/images/blue-circle.png differ
diff --git a/ja-JP/images/blue-points.png b/ja-JP/images/blue-points.png
new file mode 100644
index 000000000..f8487c4e5
Binary files /dev/null and b/ja-JP/images/blue-points.png differ
diff --git a/ja-JP/images/blue_circle_points.gif b/ja-JP/images/blue_circle_points.gif
new file mode 100644
index 000000000..e6308eb07
Binary files /dev/null and b/ja-JP/images/blue_circle_points.gif differ
diff --git a/ja-JP/images/bottom-right.png b/ja-JP/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/ja-JP/images/bottom-right.png differ
diff --git a/ja-JP/images/centre.png b/ja-JP/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/ja-JP/images/centre.png differ
diff --git a/ja-JP/images/circle-coords.png b/ja-JP/images/circle-coords.png
new file mode 100644
index 000000000..a888286e1
Binary files /dev/null and b/ja-JP/images/circle-coords.png differ
diff --git a/ja-JP/images/coords_animation.gif b/ja-JP/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/ja-JP/images/coords_animation.gif differ
diff --git a/ja-JP/images/difficulty-setting.png b/ja-JP/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/ja-JP/images/difficulty-setting.png differ
diff --git a/ja-JP/images/fire_arrow.gif b/ja-JP/images/fire_arrow.gif
new file mode 100644
index 000000000..c084db578
Binary files /dev/null and b/ja-JP/images/fire_arrow.gif differ
diff --git a/ja-JP/images/five_circles.png b/ja-JP/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/ja-JP/images/five_circles.png differ
diff --git a/ja-JP/images/green-grass.png b/ja-JP/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/ja-JP/images/green-grass.png differ
diff --git a/ja-JP/images/grey-circle.png b/ja-JP/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/ja-JP/images/grey-circle.png differ
diff --git a/ja-JP/images/grey-points.png b/ja-JP/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/ja-JP/images/grey-points.png differ
diff --git a/ja-JP/images/initial_target.png b/ja-JP/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/ja-JP/images/initial_target.png differ
diff --git a/ja-JP/images/missed-points.png b/ja-JP/images/missed-points.png
new file mode 100644
index 000000000..0cd14626c
Binary files /dev/null and b/ja-JP/images/missed-points.png differ
diff --git a/ja-JP/images/missed_no_points.gif b/ja-JP/images/missed_no_points.gif
new file mode 100644
index 000000000..212ca30e4
Binary files /dev/null and b/ja-JP/images/missed_no_points.gif differ
diff --git a/ja-JP/images/outline-circles.png b/ja-JP/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/ja-JP/images/outline-circles.png differ
diff --git a/ja-JP/images/points-scored.gif b/ja-JP/images/points-scored.gif
new file mode 100644
index 000000000..564a20f7a
Binary files /dev/null and b/ja-JP/images/points-scored.gif differ
diff --git a/ja-JP/images/quiz-colour.png b/ja-JP/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/ja-JP/images/quiz-colour.png differ
diff --git a/ja-JP/images/random-side.png b/ja-JP/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/ja-JP/images/random-side.png differ
diff --git a/ja-JP/images/rectangle-diagram.png b/ja-JP/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/ja-JP/images/rectangle-diagram.png differ
diff --git a/ja-JP/images/showcase_rocket.png b/ja-JP/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/ja-JP/images/showcase_rocket.png differ
diff --git a/ja-JP/images/showcase_static.png b/ja-JP/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/ja-JP/images/showcase_static.png differ
diff --git a/ja-JP/images/sky_coords.png b/ja-JP/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/ja-JP/images/sky_coords.png differ
diff --git a/ja-JP/images/sky_stroke.png b/ja-JP/images/sky_stroke.png
new file mode 100644
index 000000000..0d088147f
Binary files /dev/null and b/ja-JP/images/sky_stroke.png differ
diff --git a/ja-JP/images/stand_coords.png b/ja-JP/images/stand_coords.png
new file mode 100644
index 000000000..98550a379
Binary files /dev/null and b/ja-JP/images/stand_coords.png differ
diff --git a/ja-JP/images/step_4_preview.gif b/ja-JP/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/ja-JP/images/step_4_preview.gif differ
diff --git a/ja-JP/images/step_5_preview.gif b/ja-JP/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/ja-JP/images/step_5_preview.gif differ
diff --git a/ja-JP/images/target-stand.png b/ja-JP/images/target-stand.png
new file mode 100644
index 000000000..c64259beb
Binary files /dev/null and b/ja-JP/images/target-stand.png differ
diff --git a/ja-JP/images/target_area.png b/ja-JP/images/target_area.png
new file mode 100644
index 000000000..c6633448f
Binary files /dev/null and b/ja-JP/images/target_area.png differ
diff --git a/ja-JP/images/target_printed.gif b/ja-JP/images/target_printed.gif
new file mode 100644
index 000000000..b29a244fe
Binary files /dev/null and b/ja-JP/images/target_printed.gif differ
diff --git a/ja-JP/images/three-circles.png b/ja-JP/images/three-circles.png
new file mode 100644
index 000000000..90a5e243a
Binary files /dev/null and b/ja-JP/images/three-circles.png differ
diff --git a/ja-JP/images/top-left.png b/ja-JP/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/ja-JP/images/top-left.png differ
diff --git a/ja-JP/images/triangles-coords.png b/ja-JP/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/ja-JP/images/triangles-coords.png differ
diff --git a/ja-JP/images/upgrade-ideas.png b/ja-JP/images/upgrade-ideas.png
new file mode 100644
index 000000000..c41716841
Binary files /dev/null and b/ja-JP/images/upgrade-ideas.png differ
diff --git a/ja-JP/images/yellow-points.png b/ja-JP/images/yellow-points.png
new file mode 100644
index 000000000..54362678c
Binary files /dev/null and b/ja-JP/images/yellow-points.png differ
diff --git a/ja-JP/meta.yml b/ja-JP/meta.yml
new file mode 100644
index 000000000..60ca5f5a9
--- /dev/null
+++ b/ja-JP/meta.yml
@@ -0,0 +1,41 @@
+---
+title: 射的
+hero_image: images/banner.png
+description: Pythonでターゲットを描き、矢を当てて得点を表示します
+meta_title: Python coding projects for kids and teens | Target practice
+meta_description: Learn Python with the Raspberry Pi Foundation's coding projects for kids and teens. Use Python to draw a target and score points by hitting it with arrows.
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: はじめに
+ -
+ title: 背景を作成する
+ -
+ title: ターゲットを描く
+ completion:
+ - engaged
+ -
+ title: 矢を放つ
+ -
+ title: 得点
+ -
+ title: ふりかえり
+ completion:
+ - external
+ -
+ title: プロジェクトをアップグレードする
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: 次は何をしますか?
+ challenge: true
+ -
+ title: What can you do now?
diff --git a/ja-JP/python-comments-demo.txt b/ja-JP/python-comments-demo.txt
new file mode 100644
index 000000000..86261a0a7
--- /dev/null
+++ b/ja-JP/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Setup your game here
+
+width and height of screen
+
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Set the fill colour to grass
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the circle fill colour to outer
+
+x, y, width of the circle
+
+Blue
+
+Red
+
+Yellow
+
+Set the circle fill colour to inner
+
+Inner circle - x, y, width of the circle
+
+Set the circle fill colour to middle
+
+Middle circle - x, y, width of the circle
+
+The shoot_arrow function goes here
+
+Store a random number between 100 and 300
+
+Set the arrow to fill colour to wood
+
+Draw a small circle at random coordinates
+
+Get the hit colour
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Save the colour before drawing the arrow
+
+Like functions, 'if' statements are indented
+
+Import library code
+
+Keep this to run your code
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Set the fill colour to grass
diff --git a/ja-JP/python-comments.txt b/ja-JP/python-comments.txt
new file mode 100644
index 000000000..4a1124176
--- /dev/null
+++ b/ja-JP/python-comments.txt
@@ -0,0 +1,27 @@
+すべてのフレームで行うこと
+
+Draw the inner circle
+
+Draw the middle circle
+
+shoot_arrow関数はここにあります
+
+mouse_pressed関数はここにあります
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
\ No newline at end of file
diff --git a/ja-JP/python-translatable-demo.txt b/ja-JP/python-translatable-demo.txt
new file mode 100644
index 000000000..71707d059
--- /dev/null
+++ b/ja-JP/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+wood
+
+sky
+
+grass
+
+outer
+
+inner
+
+middle
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
+
+speed
diff --git a/ja-JP/python-translatable.txt b/ja-JP/python-translatable.txt
new file mode 100644
index 000000000..1e4f01f6b
--- /dev/null
+++ b/ja-JP/python-translatable.txt
@@ -0,0 +1,9 @@
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_colour
+
+speed
\ No newline at end of file
diff --git a/ja-JP/quiz1/question_1.md b/ja-JP/quiz1/question_1.md
new file mode 100644
index 000000000..b7bb3efb6
--- /dev/null
+++ b/ja-JP/quiz1/question_1.md
@@ -0,0 +1,60 @@
+## Quick quiz
+
+Answer the three questions. There are hints to guide you to the correct answer.
+
+各質問の後、**ボタン**を押してください。 正しい答えが表示されます。
+
+お楽しみください!
+
+--- question ---
+---
+legend: 質問1/3
+---
+In your project you added `randint(100, 300)` to your `shoot_arrow()` function. What does `randint(100, 300)` do?
+
+--- code ---
+---
+language: python
+---
+
+def shoot_arrow(): global hit_colour arrow_x = randint(100, 300) arrow_y = randint(100, 300)
+
+--- /code ---
+
+--- choices ---
+
+- (x) It chooses a random whole number between 100 and 300.
+
+ --- feedback ---
+
+That's correct. This chooses a random x coordinate for your arrow.
+
+ --- /feedback ---
+
+- ( ) It makes the arrow move randomly around the screen.
+
+ --- feedback ---
+
+Not quite. This code part of how the arrow moves randomly but you need other code too to achieve that goal.
+
+ --- /feedback ---
+
+- () It gets the colour that was hit by the arrow.
+
+ --- feedback ---
+
+ Not quite. The get() function would be used to get the colour.
+
+ --- /feedback ---
+
+- ( ) It draws a circle of a random size.
+
+ --- feedback ---
+
+ Not quite. The circle() function would be used to draw a circle.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/ja-JP/quiz1/question_2.md b/ja-JP/quiz1/question_2.md
new file mode 100644
index 000000000..8f10468eb
--- /dev/null
+++ b/ja-JP/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legend: 質問2/3
+---
+
+あなたのプロジェクトでは、`if` , `elif`, `else`条件を使って、矢がどの色に着地したかをチェックしましたね。
+
+In the example below, a variable called `speed` has the number `6` stored in it. このコードを実行すると、出力領域には何が表示されるでしょうか?
+
+--- code ---
+---
+language: python
+---
+speed = 6
+
+if speed == 7: print('超高速') elif speed == 5: print('かなり速い') elif speed == 6: print('非常に速い') else: print('速度が認識されない! ')
+
+--- /code ---
+
+--- choices ---
+
+- (x)`非常に速い`
+
+ --- feedback ---
+
+ そのとおりです! **speed**変数に`6`という値が代入され、`speed == 6`という条件が**True**となり、`非常に速い`と表示されます。
+
+ --- /feedback ---
+
+- ( ) `速度が認識されない!`
+
+ --- feedback ---
+
+ ちょっと違います、**speed**変数に割り当てられている値を見てください。
+
+ --- /feedback ---
+
+- ( ) 何も表示されない
+
+ --- feedback ---
+
+ Try again, `else` is used as a final option for when all the above conditions are false. Look through the conditions again, are any of the conditions true?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/ja-JP/quiz1/question_3.md b/ja-JP/quiz1/question_3.md
new file mode 100644
index 000000000..7e14f0806
--- /dev/null
+++ b/ja-JP/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legend: 質問3/3
+---
+
+次のコードで楕円を描画します。
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0,255,0)
+no_stroke()
+
+def draw():
+ellipse(0,0,300,300)
+
+run()
+
+--- /code ---
+
+次の画像のうち、出力領域でのこの楕円の正しい位置を示しているのはどれですか?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ ちょっと違います、右下の円を中央に配置するには、画面サイズと同じ座標にする必要があります。 この例では、楕円は `ellipse(400,400,300,300)`になります。
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ ちょっと違います、円を中央に配置するためには、座標が画面サイズの半分になる必要があるのです。 この例では、 `ellipse(200,200,300,300)`です。
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ そのとおりです! この円の中心は、画面の左上隅の座標(0,0) です。
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ いいえ、この円のコードは `ellipse(350,150,300,300)` で、画面の右上に向かって中央に配置されます。 `x`座標は楕円が画面の横方向にどれだけあるか、`y`座標は画面の下方向にどれだけあるかを示しています。
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/ja-JP/resources/main.py b/ja-JP/resources/main.py
new file mode 100644
index 000000000..8d0da5672
--- /dev/null
+++ b/ja-JP/resources/main.py
@@ -0,0 +1,61 @@
+#!/bin/python3
+
+# Import library code
+from p5 import *
+from math import *
+from random import randint
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+ if hit_color == outer:
+ print('You hit the outer circle, 50 points!') #Like functions, 'if' statements are indented
+ elif hit_color == inner:
+ print('You hit the inner circle, 200 points!')
+ elif hit_color == bullseye:
+ print('You hit the bullseye, 500 points!')
+ else:
+ print('You missed! No points!')
+
+# The shoot_arrow function goes here
+def shoot_arrow():
+ global hit_color
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_color = get(arrow_x, arrow_y)
+ ellipse(arrow_x, arrow_y, 15, 15)
+
+def setup():
+# Setup your game here
+ size(400, 400) # width and height
+ frame_rate(2)
+
+
+def draw():
+# Things to do in every frame
+ global outer, inner, bullseye
+ sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+ grass = color(149, 212, 122)
+ wood = color(145, 96, 51)
+ outer = color(0, 120, 180)
+ inner = color(210, 60, 60)
+ bullseye = color(220, 200, 0)
+
+ no_stroke()
+ fill(sky)
+ rect(0, 0, 400, 250)
+ fill(grass)
+ rect(0, 250, 400, 150)
+
+ fill(wood)
+ triangle(150, 350, 200, 150, 250, 350)
+ fill(outer)
+ ellipse(200, 200, 170, 170)
+ fill(inner)
+ ellipse(200, 200, 110, 110) #Inner circle
+ fill(bullseye)
+ ellipse(200, 200, 30, 30) #Bullseye
+
+ fill(wood)
+ shoot_arrow()
+# Keep this to run your code
+run()
diff --git a/ja-JP/resources/p5.py b/ja-JP/resources/p5.py
new file mode 100644
index 000000000..fc023ee64
--- /dev/null
+++ b/ja-JP/resources/p5.py
@@ -0,0 +1,135 @@
+# Definitions for compatibility with the p5py processing library
+from processing import *
+import __main__
+
+# Shape
+from processing import rectMode as rect_mode
+from processing import ellipseMode as ellipse_mode
+from processing import strokeWeight as stroke_weight
+from processing import strokeCap as stroke_cap
+from processing import strokeJoin as stroke_join
+from processing import noStroke as no_stroke
+from processing import noFill as no_fill
+
+# Fonts
+from processing import createFont as create_font
+from processing import loadFont as load_font
+from processing import textFont as text_font
+
+# Text
+from processing import textAlign as text_align
+from processing import textLeading as text_leading
+from processing import textMode as text_mode
+from processing import textSize as text_size
+from processing import textWidth as text_width
+
+# Colour
+from processing import blendColor as blend_color
+from processing import lerpColor as lerp_color
+from processing import color as Color
+
+# Images
+from processing import createImage as create_image
+from processing import imageMode as image_mode
+from processing import loadImage as load_image
+from processing import noTint as no_tint
+from processing import requestImage as request_image
+
+# Environment
+from processing import frameRate as frame_rate
+from processing import noCursor as no_cursor
+from processing import noLoop as no_loop
+
+# Transform
+from processing import applyMatrix as apply_matrix
+from processing import popMatrix as pop_matrix
+from processing import printMatrix as print_matrix
+from processing import pushMatrix as push_matrix
+from processing import resetMatrix as reset_matrix
+from processing import rotateX as rotate_x
+from processing import rotateY as rotate_y
+from processing import pushStyle as push_style
+from processing import popStyle as pop_style
+
+from processing import run as main_run
+
+# Keyboard
+
+def mousePressed():
+ if hasattr(__main__, "mouse_pressed"):
+ mouse_pressed = getattr(__main__, "mouse_pressed")
+ mouse_pressed()
+
+def mouseReleased():
+ if hasattr(__main__, "mouse_released"):
+ mouse_released = getattr(__main__, "mouse_released")
+ mouse_released()
+
+__main__.mouse_x = 0
+__main__.mouse_y = 0
+__main__.mouse_px = 0
+__main__.mouse_py = 0
+__main__.frame_count = 0
+__main__.frame_rate = 60
+
+def mouseMoved():
+ __main__.mouse_x = mouse.x
+ __main__.mouse_y = mouse.y
+ __main__.mouse_px = mouse.px
+ __main__.mouse_py = mouse.py
+ if hasattr(__main__, "mouse_moved"):
+ mouse_moved = getattr(__main__, "mouse_moved")
+ mouse_moved()
+
+def mouseDragged():
+ if hasattr(__main__, "mouse_dragged"):
+ mouse_dragged = getattr(__main__, "mouse_dragged")
+ mouse_dragged()
+
+def new_draw():
+ __main__.frame_count = frameCount
+ frameRate = __main__.frame_rate
+ old_draw()
+
+def run():
+ global old_draw
+ old_draw = __main__.draw
+ __main__.draw = new_draw
+ main_run()
+
+def grid():
+ pushMatrix()
+ stroke(200)
+ fill(0)
+ line(0, height/2, width, height/2)
+ line(width/2, 0, width/2, height)
+ x_coords = [0, width/2, width]
+ y_coords = [0, height/2, height]
+
+ for x in x_coords:
+ for y in y_coords:
+ show_coord(x, y)
+
+ popMatrix()
+
+def show_coord(x, y):
+ if x == width:
+ x_align = RIGHT
+ elif x == 0:
+ x_align = LEFT
+ else:
+ x_align = CENTER
+
+ if y == height:
+ y_align = BASELINE
+ elif y == 0:
+ y_align = TOP
+ else:
+ y_align = CENTER
+
+ pushStyle()
+ fill(100)
+ text_align(x_align, y_align)
+ text('(' + str(int(x)) + ', ' + str(int(y)) + ')', x, y)
+ popStyle()
+
diff --git a/ja-JP/step_1.md b/ja-JP/step_1.md
new file mode 100644
index 000000000..330dd27eb
--- /dev/null
+++ b/ja-JP/step_1.md
@@ -0,0 +1,29 @@
+## What you will make
+
+Pythonと`p5`グラフィックスライブラリを使って、ターゲットを描き、そこに矢を当てて得点を表示するゲームを作成します。
+
+--- print-only ---
+
+{:width="640px"}
+
+--- /print-only ---
+
+--- no-print ---
+
+
+
+下の**Run**ボタンをクリックするとゲームが開始されます。 ターゲットに点が表示されたら、マウスをクリック(タブレットではタップ) して矢を放ちます。
+
+
+
+
+
+--- /no-print ---
+
+
+
+
+
diff --git a/ja-JP/step_2.md b/ja-JP/step_2.md
new file mode 100644
index 000000000..101f1c3e3
--- /dev/null
+++ b/ja-JP/step_2.md
@@ -0,0 +1,37 @@
+## Draw the grass
+
+--- task ---
+
+[アーチェリースターター](https://trinket.io/python/cbf88a8458){:target="_blank"}プロジェクトを開く。
+
+--- /task ---
+
+--- task ---
+
+**Add** code to draw a green rectangle at the bottom of the screen to represent the grass.
+
+`fill()`のコードの後に、`rect()`を左上の座標(`0`,`0`) に合わせて、幅`400`、高さ`250`で描画します。
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 18
+line_highlights: 25
+---
+def draw(): # Things to do in every frame fill('cyan')
+rect(0, 0, 400, 250)
+fill('lightgreen')
+rect(0, 250, 400, 150)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**テスト:** プロジェクトを再度実行して、完成した背景を表示します。
+
+`setup()`内の`size()`関数呼び出しで、画面サイズを400ピクセル×400ピクセルに設定しています。
+
+--- /task ---
+
+--- save ---
diff --git a/ja-JP/step_3.md b/ja-JP/step_3.md
new file mode 100644
index 000000000..0638e5739
--- /dev/null
+++ b/ja-JP/step_3.md
@@ -0,0 +1,110 @@
+## ターゲットを描く
+
+
+
+Your game needs a target to shoot arrows at.
+
+
+
+{:width="300px"}
+
+
+
+
+### スタンドを描く
+
+--- task ---
+
+Set the fill colour to `brown`.
+
+ここでは、それぞれ異なる座標を持つ3つの三角形の例を示します。
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 18
+line_highlights: 24-25
+---
+
+ fill(wood) #スタンドフィルカラーをブラウンに設定
+ triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**テスト:** コードを実行して、ターゲットのスタンドを確認します。
+
+{:width="400px"}
+
+--- /task ---
+
+### ターゲットを描く
+
+--- task ---
+
+**ヒント:**円を作るには、**幅**と**高さ**が同じである必要があります。
+
+Set the fill colour to `blue`.
+
+Draw a circle with x and y coordinates for its centre and a width.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 31
+line_highlights: 31-32
+---
+
+ 茶色の三角形:triangle(50, 150, 200, 250, 180, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** コードを実行すると、最初の大きな青い丸が表示されます。
+
+青い丸は、後から描いたものなので、茶色の三角が重なる部分を覆います。
+
+{:width="400px"}
+
+--- /task ---
+
+ターゲットは、同じ中心座標(200, 200)、つまり画面の真ん中にある、大きさの異なる円でできています。
+
+--- task ---
+
+**Test:** プロジェクトを再度実行すると、ターゲットに3色の丸が表示されます。
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 28
+line_highlights: 33-34
+---
+
+ fill('blue')
+ circle(200, 200, 170)
+ fill('red')
+ circle(200, 200, 110) # Draw the inner circle
+ fill('yellow')
+ circle(200, 200, 30) # Draw the middle circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**デバッグ:** Python は 'color' のアメリカ綴り('u' がない) を使うので、同じようにしてください。
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/ja-JP/step_4.md b/ja-JP/step_4.md
new file mode 100644
index 000000000..8dc8d3c01
--- /dev/null
+++ b/ja-JP/step_4.md
@@ -0,0 +1,95 @@
+## 矢を放つ
+
+
+
+Add an even smaller circle to represent an arrow.
+
+
+
+{:width="300px"}
+
+
+
+
+### Where will you shoot?
+
+--- task ---
+
+Add a function to draw a brown circle at coordinates `200`, `200`.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 8
+line_highlights: 11-12
+---
+# shoot_arrow関数はここにあります
+def shoot_arrow():
+global hit_color #他の機能でも使用可能
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300)
+hit_color = get(arrow_x, arrow_y) #矢を描く前に色を保存する
+ellipse(arrow_x, arrow_y, 15, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+ターゲットを作成する `draw()`コードに移動して、`fill()`を `wood`に設定するコードを最後に追加し、新しい `shoot_arrow()` 関数を呼び出します。
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 41
+line_highlights: 44-45
+---
+
+ def shoot_arrow():
+ ellipse(200, 200, 15, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**テスト:**コードを実行し、矢がブルズアイに表示されることを確認します。 矢印はランダムな座標で再描画されます。
+
+
+
+
+--- /task ---
+
+矢印はランダムな座標で再描画されます。
+
+
+--- task ---
+
+`shoot_arrow()`関数に行き、`arrow_x`と`arrow_y`の2つの新しい変数を追加して、`100`から`300`までの乱数を格納します。
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true
+line_highlights: 9-10
+---
+def shoot_arrow():
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300)
+hit_color = get(arrow_x, arrow_y) #矢印を描く前に色を保存する
+ellipse(arrow_x, arrow_y, 15, 15)
+
+--- /code ---
+
+--- /task ---
+
+
+--- task ---
+
+
+**テスト:** プロジェクトを実行します。 You should see the arrow jump around the target.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/ja-JP/step_5.md b/ja-JP/step_5.md
new file mode 100644
index 000000000..86cb246fe
--- /dev/null
+++ b/ja-JP/step_5.md
@@ -0,0 +1,82 @@
+## What colour did you hit?
+
+Next, you will add some code to get the colour at the location of the arrow.
+
+### Get the colour hit by the arrow
+
+--- task ---
+
+は**代入**に使用されます - `arrow_x = 200`のように、変数の値を設定します。
+
+Add code to `get` the colour at the centre of the arrow ,and store it in the `hit_colour` variable.
+
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 9
+line_highlights: 28
+---
+def mouse_pressed():
+if hit_color == outer:
+print('外側の円に当たった、50点! ')
+elif hit_color == inner:
+print('内側の円に当たった、 200点!
+
+--- /code ---
+
+は**同値**をテストするために使われます - `hit_color == bullseye` のように - もしどちらかの側のものが同じ値であれば、テストは`真`、そうでない場合`偽`になります。
+
+--- /task ---
+
+--- task ---
+
+**テスト:**プロジェクトを実行します。 赤と黄色の円に矢を止めて、そのメッセージを確認してください。
+
+--- /task ---
+
+### Run code when the mouse is pressed
+
+--- task ---
+
+Comment out the line that prints the colour. This means it will not run.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 26
+line_highlights: 10-11
+---
+
+ def mouse_pressed():
+ if hit_color == outer:
+ print('外側の円にあたった, 50点!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Add code to print the target emoji 🎯 **when the mouse is clicked**.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 8
+line_highlights: 12-15
+---
+# The mouse_pressed function goes here
+def mouse_pressed():
+print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**テスト:**プロジェクトを実行します。 You should see the 🎯 character printed when you click the mouse on the target.
+
+
+
+--- /task ---
+
+--- save ---
\ No newline at end of file
diff --git a/ja-JP/step_6.md b/ja-JP/step_6.md
new file mode 100644
index 000000000..9449522ab
--- /dev/null
+++ b/ja-JP/step_6.md
@@ -0,0 +1,112 @@
+## Score points
+
+
+
+Add a score based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Comment out the line to print the 🎯 character so that it no longer runs.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 7
+---
+def mouse_pressed(): # print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Display a message **if** the `hit_colour`{:.language-python} is equal to the `outer` circle colour (blue).
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 8-9
+---
+def mouse_pressed():
+# print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!')
+
+--- /code ---
+
+**Tip:** If you changed the colour of your outer circle then you will need to replace `blue` with the colour name that you have chosen.
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Wait for the arrow to land on the blue circle, then click your left mouse button. 
+
+--- /task ---
+
+`elif`{:.language-python} can be used to add more conditions to your `if`{:.language-python} statement.
+
+--- task ---
+
+Add some more code to score points if the arrow lands on the **inner** or **middle** circles.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 10-14
+---
+
+def mouse_pressed(): # print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!') elif hit_colour == Color('red').hex: print('You hit the inner circle, 200 points!') elif hit_colour == Color('yellow').hex: print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button.You should score points whenever you hit the target.
+
+
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles?
+
+To do this last check, you use `else`{:.language-python}.
+
+--- task ---
+
+Add code to `print` a message when none of the `if` and `elif` statements are true.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 12
+line_highlights: 14-15
+---
+
+ elif hit_colour == Color('yellow').hex:
+ print('You hit the middle, 500 points!')
+ else:
+ print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Fire the arrow in the grass or sky to see the miss message.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/ja-JP/step_7.md b/ja-JP/step_7.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/ja-JP/step_7.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/ja-JP/step_8.md b/ja-JP/step_8.md
new file mode 100644
index 000000000..28ae6e382
--- /dev/null
+++ b/ja-JP/step_8.md
@@ -0,0 +1,36 @@
+## Challenge
+
+--- challenge ---
+
+
+You could:
+
+
+--- task ---
+
+Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position
+
+--- /task ---
+
+--- task ---
+
+Put emojis in your print messages ([here's a list of emojis](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from)
+
+--- /task ---
+
+--- task ---
+
+Make the game easier or harder by changing the `frame_rate=2` value
+
+
+--- /task ---
+
+--- task ---
+
+Add a variable to keep track of the total score, adding the correct number of points to it each time.
+
+--- /task ---
+
+
+
+--- /no-print ---
diff --git a/ja-JP/step_9.md b/ja-JP/step_9.md
new file mode 100644
index 000000000..86edf4a89
--- /dev/null
+++ b/ja-JP/step_9.md
@@ -0,0 +1,21 @@
+## What can you do now?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+\--- print-only ---
+
+{:width="600px"}
+
+\--- /print-only ---
+
+\--- no-print ---
+
+Click the **Run** button to view an example of this project.
+
+
+
+\--- /no-print ---
+
+Or, why not try out another [Python](https://projects.raspberrypi.org/en/projects?software%5B%5D=python) project.
+
diff --git a/kn-IN/code/target-practice-solution/main.py b/kn-IN/code/target-practice-solution/main.py
new file mode 100644
index 000000000..9b71b07d4
--- /dev/null
+++ b/kn-IN/code/target-practice-solution/main.py
@@ -0,0 +1,55 @@
+## Import library code
+
+from p5 import *
+from random import randint
+
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+ # print('🎯')
+ if hit_colour == Color("blue").hex:
+ print("You hit the outer circle, 50 points!")
+ elif hit_colour == Color("red").hex:
+ print("You hit the inner circle, 200 points!")
+ elif hit_colour == Color("yellow").hex:
+ print("You hit the middle, 500 points!")
+ else:
+ print("You missed! No points!")
+
+
+# The shoot_arrow function goes here
+def shoot_arrow():
+ global hit_colour
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ fill("brown")
+ circle(arrow_x, arrow_y, 15)
+
+
+def setup():
+ # Set up your game here
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Things to do in every frame
+ fill("cyan")
+ rect(0, 0, 400, 250)
+ fill("lightgreen")
+ rect(0, 250, 400, 150)
+ fill("brown")
+ triangle(150, 350, 200, 150, 250, 350)
+ fill("blue")
+ circle(200, 200, 170)
+ fill("red")
+ circle(200, 200, 110) # Draw the inner circle
+ fill("yellow")
+ circle(200, 200, 30) # Draw the middle circle
+ shoot_arrow()
+
+
+# Keep this to run your code
+run(frame_rate=2)
diff --git a/kn-IN/code/target-practice-solution/project_config.yml b/kn-IN/code/target-practice-solution/project_config.yml
new file mode 100644
index 000000000..2c45eb56c
--- /dev/null
+++ b/kn-IN/code/target-practice-solution/project_config.yml
@@ -0,0 +1,3 @@
+name: 'Target Practice Example'
+identifier: 'target-practice-solution'
+type: 'python'
diff --git a/kn-IN/code/target-practice-starter/main.py b/kn-IN/code/target-practice-starter/main.py
new file mode 100644
index 000000000..03f477ff0
--- /dev/null
+++ b/kn-IN/code/target-practice-starter/main.py
@@ -0,0 +1,24 @@
+## Import library code
+from p5 import *
+from random import randint
+
+# The mouse_pressed function goes here
+
+
+# The shoot_arrow function goes here
+
+
+def setup():
+ # Set up your game here
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Things to do in every frame
+ fill("cyan")
+ rect(0, 0, 400, 250)
+
+
+# Keep this to run your code
+run(frame_rate=2)
diff --git a/kn-IN/code/target-practice-starter/project_config.yml b/kn-IN/code/target-practice-starter/project_config.yml
new file mode 100644
index 000000000..1f6832901
--- /dev/null
+++ b/kn-IN/code/target-practice-starter/project_config.yml
@@ -0,0 +1,3 @@
+name: "Target Practice"
+identifier: 'target-practice-starter'
+type: 'python'
diff --git a/kn-IN/images/alternative-colours.png b/kn-IN/images/alternative-colours.png
new file mode 100644
index 000000000..e630dd54b
Binary files /dev/null and b/kn-IN/images/alternative-colours.png differ
diff --git a/kn-IN/images/animation_bg_erase.gif b/kn-IN/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/kn-IN/images/animation_bg_erase.gif differ
diff --git a/kn-IN/images/animation_no_bg_erase.gif b/kn-IN/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/kn-IN/images/animation_no_bg_erase.gif differ
diff --git a/kn-IN/images/arrow-centre.png b/kn-IN/images/arrow-centre.png
new file mode 100644
index 000000000..14dba17ee
Binary files /dev/null and b/kn-IN/images/arrow-centre.png differ
diff --git a/kn-IN/images/arrow-middle.png b/kn-IN/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/kn-IN/images/arrow-middle.png differ
diff --git a/kn-IN/images/arrow-target.png b/kn-IN/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/kn-IN/images/arrow-target.png differ
diff --git a/kn-IN/images/background.png b/kn-IN/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/kn-IN/images/background.png differ
diff --git a/kn-IN/images/banner.png b/kn-IN/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/kn-IN/images/banner.png differ
diff --git a/kn-IN/images/blue-circle.png b/kn-IN/images/blue-circle.png
new file mode 100644
index 000000000..054b612e8
Binary files /dev/null and b/kn-IN/images/blue-circle.png differ
diff --git a/kn-IN/images/blue-points.png b/kn-IN/images/blue-points.png
new file mode 100644
index 000000000..921b62ff2
Binary files /dev/null and b/kn-IN/images/blue-points.png differ
diff --git a/kn-IN/images/blue_circle_points.gif b/kn-IN/images/blue_circle_points.gif
new file mode 100644
index 000000000..e6308eb07
Binary files /dev/null and b/kn-IN/images/blue_circle_points.gif differ
diff --git a/kn-IN/images/bottom-right.png b/kn-IN/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/kn-IN/images/bottom-right.png differ
diff --git a/kn-IN/images/centre.png b/kn-IN/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/kn-IN/images/centre.png differ
diff --git a/kn-IN/images/circle-coords.png b/kn-IN/images/circle-coords.png
new file mode 100644
index 000000000..a888286e1
Binary files /dev/null and b/kn-IN/images/circle-coords.png differ
diff --git a/kn-IN/images/coords_animation.gif b/kn-IN/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/kn-IN/images/coords_animation.gif differ
diff --git a/kn-IN/images/difficulty-setting.png b/kn-IN/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/kn-IN/images/difficulty-setting.png differ
diff --git a/kn-IN/images/fire_arrow.gif b/kn-IN/images/fire_arrow.gif
new file mode 100644
index 000000000..924ba34af
Binary files /dev/null and b/kn-IN/images/fire_arrow.gif differ
diff --git a/kn-IN/images/five_circles.png b/kn-IN/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/kn-IN/images/five_circles.png differ
diff --git a/kn-IN/images/green-grass.png b/kn-IN/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/kn-IN/images/green-grass.png differ
diff --git a/kn-IN/images/grey-circle.png b/kn-IN/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/kn-IN/images/grey-circle.png differ
diff --git a/kn-IN/images/grey-points.png b/kn-IN/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/kn-IN/images/grey-points.png differ
diff --git a/kn-IN/images/initial_target.png b/kn-IN/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/kn-IN/images/initial_target.png differ
diff --git a/kn-IN/images/missed-points.png b/kn-IN/images/missed-points.png
new file mode 100644
index 000000000..0cd14626c
Binary files /dev/null and b/kn-IN/images/missed-points.png differ
diff --git a/kn-IN/images/missed_no_points.gif b/kn-IN/images/missed_no_points.gif
new file mode 100644
index 000000000..212ca30e4
Binary files /dev/null and b/kn-IN/images/missed_no_points.gif differ
diff --git a/kn-IN/images/outline-circles.png b/kn-IN/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/kn-IN/images/outline-circles.png differ
diff --git a/kn-IN/images/points-scored.gif b/kn-IN/images/points-scored.gif
new file mode 100644
index 000000000..3fbe161a8
Binary files /dev/null and b/kn-IN/images/points-scored.gif differ
diff --git a/kn-IN/images/quiz-colour.png b/kn-IN/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/kn-IN/images/quiz-colour.png differ
diff --git a/kn-IN/images/random-side.png b/kn-IN/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/kn-IN/images/random-side.png differ
diff --git a/kn-IN/images/rectangle-diagram.png b/kn-IN/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/kn-IN/images/rectangle-diagram.png differ
diff --git a/kn-IN/images/showcase_rocket.png b/kn-IN/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/kn-IN/images/showcase_rocket.png differ
diff --git a/kn-IN/images/showcase_static.png b/kn-IN/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/kn-IN/images/showcase_static.png differ
diff --git a/kn-IN/images/sky_coords.png b/kn-IN/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/kn-IN/images/sky_coords.png differ
diff --git a/kn-IN/images/sky_stroke.png b/kn-IN/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/kn-IN/images/sky_stroke.png differ
diff --git a/kn-IN/images/stand_coords.png b/kn-IN/images/stand_coords.png
new file mode 100644
index 000000000..2002bae5f
Binary files /dev/null and b/kn-IN/images/stand_coords.png differ
diff --git a/kn-IN/images/step_4_preview.gif b/kn-IN/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/kn-IN/images/step_4_preview.gif differ
diff --git a/kn-IN/images/step_5_preview.gif b/kn-IN/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/kn-IN/images/step_5_preview.gif differ
diff --git a/kn-IN/images/target-stand.png b/kn-IN/images/target-stand.png
new file mode 100644
index 000000000..c65d89363
Binary files /dev/null and b/kn-IN/images/target-stand.png differ
diff --git a/kn-IN/images/target_area.png b/kn-IN/images/target_area.png
new file mode 100644
index 000000000..1e5c72120
Binary files /dev/null and b/kn-IN/images/target_area.png differ
diff --git a/kn-IN/images/target_printed.gif b/kn-IN/images/target_printed.gif
new file mode 100644
index 000000000..b29a244fe
Binary files /dev/null and b/kn-IN/images/target_printed.gif differ
diff --git a/kn-IN/images/three-circles.png b/kn-IN/images/three-circles.png
new file mode 100644
index 000000000..13a8dd8ed
Binary files /dev/null and b/kn-IN/images/three-circles.png differ
diff --git a/kn-IN/images/top-left.png b/kn-IN/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/kn-IN/images/top-left.png differ
diff --git a/kn-IN/images/triangles-coords.png b/kn-IN/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/kn-IN/images/triangles-coords.png differ
diff --git a/kn-IN/images/upgrade-ideas.png b/kn-IN/images/upgrade-ideas.png
new file mode 100644
index 000000000..083f82320
Binary files /dev/null and b/kn-IN/images/upgrade-ideas.png differ
diff --git a/kn-IN/images/yellow-points.png b/kn-IN/images/yellow-points.png
new file mode 100644
index 000000000..0c461812c
Binary files /dev/null and b/kn-IN/images/yellow-points.png differ
diff --git a/kn-IN/meta.yml b/kn-IN/meta.yml
new file mode 100644
index 000000000..e56ce34a6
--- /dev/null
+++ b/kn-IN/meta.yml
@@ -0,0 +1,41 @@
+---
+title: Target practice
+hero_image: images/banner.png
+description: Use Python to draw a target and score points by hitting it with arrows
+meta_title: Python coding projects for kids and teens | Target practice
+meta_description: Learn Python with the Raspberry Pi Foundation's coding projects for kids and teens. Use Python to draw a target and score points by hitting it with arrows.
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: What you will make
+ -
+ title: Draw the grass
+ -
+ title: Draw your target
+ completion:
+ - engaged
+ -
+ title: Add an arrow
+ -
+ title: What colour did you hit?
+ -
+ title: Score points
+ completion:
+ - internal
+ -
+ title: Quick quiz
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: Challenge
+ challenge: true
+ -
+ title: What can you do now?
diff --git a/kn-IN/python-comments-demo.txt b/kn-IN/python-comments-demo.txt
new file mode 100644
index 000000000..86261a0a7
--- /dev/null
+++ b/kn-IN/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Setup your game here
+
+width and height of screen
+
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Set the fill colour to grass
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the circle fill colour to outer
+
+x, y, width of the circle
+
+Blue
+
+Red
+
+Yellow
+
+Set the circle fill colour to inner
+
+Inner circle - x, y, width of the circle
+
+Set the circle fill colour to middle
+
+Middle circle - x, y, width of the circle
+
+The shoot_arrow function goes here
+
+Store a random number between 100 and 300
+
+Set the arrow to fill colour to wood
+
+Draw a small circle at random coordinates
+
+Get the hit colour
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Save the colour before drawing the arrow
+
+Like functions, 'if' statements are indented
+
+Import library code
+
+Keep this to run your code
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Set the fill colour to grass
diff --git a/kn-IN/python-comments.txt b/kn-IN/python-comments.txt
new file mode 100644
index 000000000..35750f346
--- /dev/null
+++ b/kn-IN/python-comments.txt
@@ -0,0 +1,27 @@
+Things to do in every frame
+
+Draw the inner circle
+
+Draw the middle circle
+
+The shoot_arrow function goes here
+
+The mouse_pressed function goes here
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
\ No newline at end of file
diff --git a/kn-IN/python-translatable-demo.txt b/kn-IN/python-translatable-demo.txt
new file mode 100644
index 000000000..71707d059
--- /dev/null
+++ b/kn-IN/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+wood
+
+sky
+
+grass
+
+outer
+
+inner
+
+middle
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
+
+speed
diff --git a/kn-IN/python-translatable.txt b/kn-IN/python-translatable.txt
new file mode 100644
index 000000000..1e4f01f6b
--- /dev/null
+++ b/kn-IN/python-translatable.txt
@@ -0,0 +1,9 @@
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_colour
+
+speed
\ No newline at end of file
diff --git a/kn-IN/quiz1/question_1.md b/kn-IN/quiz1/question_1.md
new file mode 100644
index 000000000..631f7888a
--- /dev/null
+++ b/kn-IN/quiz1/question_1.md
@@ -0,0 +1,60 @@
+## Quick quiz
+
+Answer the three questions. There are hints to guide you to the correct answer.
+
+When you have answered each question, click on **Check my answer**.
+
+Have fun!
+
+--- question ---
+---
+ವಿಷಯಸೂಚಿ: ಪ್ರಶ್ನೆ 1
+---
+In your project you added `randint(100, 300)` to your `shoot_arrow()` function. What does `randint(100, 300)` do?
+
+--- code ---
+---
+language: python
+---
+
+def shoot_arrow(): global hit_colour arrow_x = randint(100, 300) arrow_y = randint(100, 300)
+
+--- /code ---
+
+--- choices ---
+
+- (x) It chooses a random whole number between 100 and 300.
+
+ --- feedback ---
+
+That's correct. This chooses a random x coordinate for your arrow.
+
+ --- /feedback ---
+
+- ( ) It makes the arrow move randomly around the screen.
+
+ --- feedback ---
+
+Not quite. This code part of how the arrow moves randomly but you need other code too to achieve that goal.
+
+ --- /feedback ---
+
+- () It gets the colour that was hit by the arrow.
+
+ --- feedback ---
+
+ Not quite. The get() function would be used to get the colour.
+
+ --- /feedback ---
+
+- ( ) It draws a circle of a random size.
+
+ --- feedback ---
+
+ Not quite. The circle() function would be used to draw a circle.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/kn-IN/quiz1/question_2.md b/kn-IN/quiz1/question_2.md
new file mode 100644
index 000000000..1a96cdca3
--- /dev/null
+++ b/kn-IN/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+ವಿಷಯಸೂಚಿ: ಪ್ರಶ್ನೆ 2
+---
+
+In your project, you used `if` , `elif`, and `else` conditions to check which colour the arrow landed on.
+
+In the example below, a variable called `speed` has the number `6` stored in it. When this `if` statement is run, what would be printed in the output area?
+
+--- code ---
+---
+language: python
+---
+speed = 6
+
+if speed == 7: print('Super fast') elif speed == 5: print('Pretty quick') elif speed == 6: print('Very fast') else: print('Speed not recognised!')
+
+--- /code ---
+
+--- choices ---
+
+- (x) `Very fast`
+
+ --- feedback ---
+
+ That's correct! The **speed** variable has been assigned the value `6`, which makes the `speed == 6` condition **True** and prints `Very fast`.
+
+ --- /feedback ---
+
+- ( ) `Speed not recognised!`
+
+ --- feedback ---
+
+ Not quite, look at the value assigned to the **speed** variable.
+
+ --- /feedback ---
+
+- ( ) Nothing gets printed
+
+ --- feedback ---
+
+ Try again, `else` is used as a final option for when all the above conditions are false. Look through the conditions again, are any of the conditions true?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/kn-IN/quiz1/question_3.md b/kn-IN/quiz1/question_3.md
new file mode 100644
index 000000000..9c27bd32b
--- /dev/null
+++ b/kn-IN/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+ವಿಷಯಸೂಚಿ: ಪ್ರಶ್ನೆ 3
+---
+
+A circle is drawn using the following code:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+Which of the images below show the correct position of this circle in the output area?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the bottom-right corner, the coordinates would need to be the same as the screen size. In this example, the ellipse would be `circle(400, 400, 300)`.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the middle, the coordinates would need to be half of the screen size. In this example, `circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ That's correct! This circle is centred at coordinates (0,0), the top-left corner of the screen.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ No, this circle would have code of `circle(350, 150, 300)` to centre it towards the top-right of the screen. The `x` coordinate is how far across the screen the ellipse is, and the `y` coordinate is how far down the screen it is.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/kn-IN/resources/main.py b/kn-IN/resources/main.py
new file mode 100644
index 000000000..8d0da5672
--- /dev/null
+++ b/kn-IN/resources/main.py
@@ -0,0 +1,61 @@
+#!/bin/python3
+
+# Import library code
+from p5 import *
+from math import *
+from random import randint
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+ if hit_color == outer:
+ print('You hit the outer circle, 50 points!') #Like functions, 'if' statements are indented
+ elif hit_color == inner:
+ print('You hit the inner circle, 200 points!')
+ elif hit_color == bullseye:
+ print('You hit the bullseye, 500 points!')
+ else:
+ print('You missed! No points!')
+
+# The shoot_arrow function goes here
+def shoot_arrow():
+ global hit_color
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_color = get(arrow_x, arrow_y)
+ ellipse(arrow_x, arrow_y, 15, 15)
+
+def setup():
+# Setup your game here
+ size(400, 400) # width and height
+ frame_rate(2)
+
+
+def draw():
+# Things to do in every frame
+ global outer, inner, bullseye
+ sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+ grass = color(149, 212, 122)
+ wood = color(145, 96, 51)
+ outer = color(0, 120, 180)
+ inner = color(210, 60, 60)
+ bullseye = color(220, 200, 0)
+
+ no_stroke()
+ fill(sky)
+ rect(0, 0, 400, 250)
+ fill(grass)
+ rect(0, 250, 400, 150)
+
+ fill(wood)
+ triangle(150, 350, 200, 150, 250, 350)
+ fill(outer)
+ ellipse(200, 200, 170, 170)
+ fill(inner)
+ ellipse(200, 200, 110, 110) #Inner circle
+ fill(bullseye)
+ ellipse(200, 200, 30, 30) #Bullseye
+
+ fill(wood)
+ shoot_arrow()
+# Keep this to run your code
+run()
diff --git a/kn-IN/resources/p5.py b/kn-IN/resources/p5.py
new file mode 100644
index 000000000..fc023ee64
--- /dev/null
+++ b/kn-IN/resources/p5.py
@@ -0,0 +1,135 @@
+# Definitions for compatibility with the p5py processing library
+from processing import *
+import __main__
+
+# Shape
+from processing import rectMode as rect_mode
+from processing import ellipseMode as ellipse_mode
+from processing import strokeWeight as stroke_weight
+from processing import strokeCap as stroke_cap
+from processing import strokeJoin as stroke_join
+from processing import noStroke as no_stroke
+from processing import noFill as no_fill
+
+# Fonts
+from processing import createFont as create_font
+from processing import loadFont as load_font
+from processing import textFont as text_font
+
+# Text
+from processing import textAlign as text_align
+from processing import textLeading as text_leading
+from processing import textMode as text_mode
+from processing import textSize as text_size
+from processing import textWidth as text_width
+
+# Colour
+from processing import blendColor as blend_color
+from processing import lerpColor as lerp_color
+from processing import color as Color
+
+# Images
+from processing import createImage as create_image
+from processing import imageMode as image_mode
+from processing import loadImage as load_image
+from processing import noTint as no_tint
+from processing import requestImage as request_image
+
+# Environment
+from processing import frameRate as frame_rate
+from processing import noCursor as no_cursor
+from processing import noLoop as no_loop
+
+# Transform
+from processing import applyMatrix as apply_matrix
+from processing import popMatrix as pop_matrix
+from processing import printMatrix as print_matrix
+from processing import pushMatrix as push_matrix
+from processing import resetMatrix as reset_matrix
+from processing import rotateX as rotate_x
+from processing import rotateY as rotate_y
+from processing import pushStyle as push_style
+from processing import popStyle as pop_style
+
+from processing import run as main_run
+
+# Keyboard
+
+def mousePressed():
+ if hasattr(__main__, "mouse_pressed"):
+ mouse_pressed = getattr(__main__, "mouse_pressed")
+ mouse_pressed()
+
+def mouseReleased():
+ if hasattr(__main__, "mouse_released"):
+ mouse_released = getattr(__main__, "mouse_released")
+ mouse_released()
+
+__main__.mouse_x = 0
+__main__.mouse_y = 0
+__main__.mouse_px = 0
+__main__.mouse_py = 0
+__main__.frame_count = 0
+__main__.frame_rate = 60
+
+def mouseMoved():
+ __main__.mouse_x = mouse.x
+ __main__.mouse_y = mouse.y
+ __main__.mouse_px = mouse.px
+ __main__.mouse_py = mouse.py
+ if hasattr(__main__, "mouse_moved"):
+ mouse_moved = getattr(__main__, "mouse_moved")
+ mouse_moved()
+
+def mouseDragged():
+ if hasattr(__main__, "mouse_dragged"):
+ mouse_dragged = getattr(__main__, "mouse_dragged")
+ mouse_dragged()
+
+def new_draw():
+ __main__.frame_count = frameCount
+ frameRate = __main__.frame_rate
+ old_draw()
+
+def run():
+ global old_draw
+ old_draw = __main__.draw
+ __main__.draw = new_draw
+ main_run()
+
+def grid():
+ pushMatrix()
+ stroke(200)
+ fill(0)
+ line(0, height/2, width, height/2)
+ line(width/2, 0, width/2, height)
+ x_coords = [0, width/2, width]
+ y_coords = [0, height/2, height]
+
+ for x in x_coords:
+ for y in y_coords:
+ show_coord(x, y)
+
+ popMatrix()
+
+def show_coord(x, y):
+ if x == width:
+ x_align = RIGHT
+ elif x == 0:
+ x_align = LEFT
+ else:
+ x_align = CENTER
+
+ if y == height:
+ y_align = BASELINE
+ elif y == 0:
+ y_align = TOP
+ else:
+ y_align = CENTER
+
+ pushStyle()
+ fill(100)
+ text_align(x_align, y_align)
+ text('(' + str(int(x)) + ', ' + str(int(y)) + ')', x, y)
+ popStyle()
+
diff --git a/kn-IN/step_1.md b/kn-IN/step_1.md
new file mode 100644
index 000000000..e3a8012cf
--- /dev/null
+++ b/kn-IN/step_1.md
@@ -0,0 +1,29 @@
+## What you will make
+
+Use Python to draw a target and score points by hitting it with arrows.
+
+--- print-only ---
+
+{:width="640px"}
+
+--- /print-only ---
+
+--- no-print ---
+
+
+
+Click the **Run** button below to start the game. When the dot appears on the target 🎯, click the mouse (or tap on your tablet) to fire your arrow.
+
+
+
+
+
+--- /no-print ---
+
+
+
+
+
diff --git a/kn-IN/step_2.md b/kn-IN/step_2.md
new file mode 100644
index 000000000..919a62214
--- /dev/null
+++ b/kn-IN/step_2.md
@@ -0,0 +1,37 @@
+## Draw the grass
+
+--- task ---
+
+Open the [Target practice starter](https://editor.raspberrypi.org/en/projects/target-practice-starter){:target="_blank"} project.
+
+--- /task ---
+
+--- task ---
+
+**Add** code to draw a green rectangle at the bottom of the screen to represent the grass.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 17
+line_highlights: 21-22
+---
+def draw(): # Things to do in every frame fill('cyan')
+rect(0, 0, 400, 250)
+fill('lightgreen')
+rect(0, 250, 400, 150)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your project to view the background.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/kn-IN/step_3.md b/kn-IN/step_3.md
new file mode 100644
index 000000000..c0895baaf
--- /dev/null
+++ b/kn-IN/step_3.md
@@ -0,0 +1,115 @@
+## Draw your target
+
+
+
+Your game needs a target to shoot arrows at.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a triangular stand
+
+--- task ---
+
+Set the fill colour to `brown`.
+
+Draw a triangle using the x and y coordinates for each of the corners.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 21
+line_highlights: 23-24
+---
+
+ fill('lightgreen')
+ rect(0, 250, 400, 150)
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the stand for your target:
+
+{:width="400px"}
+
+--- /task ---
+
+### Draw the target circles
+
+--- task ---
+
+The largest part of the target is a blue **circle**.
+
+Set the fill colour to `blue`.
+
+Draw a circle with x and y coordinates for its centre and a width.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 23
+line_highlights: 25-26
+---
+
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+ fill('blue')
+ circle(200, 200, 170)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the first large blue circle.
+
+The blue circle was drawn after the stand so it is in front.
+
+{:width="400px"}
+
+--- /task ---
+
+The target is made of different-sized circles with the same centre coordinates (200, 200).
+
+--- task ---
+
+**Add** coloured circles for the inner and middle parts of the target.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 25
+line_highlights: 27-30
+---
+
+ fill('blue')
+ circle(200, 200, 170)
+ fill('red')
+ circle(200, 200, 110) # Draw the inner circle
+ fill('yellow')
+ circle(200, 200, 30) # Draw the middle circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your project to see the target with three coloured circles.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/kn-IN/step_4.md b/kn-IN/step_4.md
new file mode 100644
index 000000000..0e4f7b007
--- /dev/null
+++ b/kn-IN/step_4.md
@@ -0,0 +1,88 @@
+## Add an arrow
+
+
+
+Add an even smaller circle to represent an arrow.
+
+
+
+{:width="300px"}
+
+
+
+
+### Where will you shoot?
+
+--- task ---
+
+Add a function to draw a brown circle at coordinates `200`, `200`.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 8
+line_highlights: 9-13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = 200 arrow_y = 200 fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Call your new `shoot_arrow()`{:.language-python} function at the end of your `draw()`{:.language-python} function.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 33
+line_highlights: 35
+---
+
+ fill('yellow')
+ circle(200, 200, 30)
+ shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see the arrow in the centre.
+
+
+
+
+--- /task ---
+
+The arrow needs to move randomly.
+
+
+--- task ---
+
+Change the `arrow_x`{:.language-python} and `arrow_y`{:.language-python} variables to choose a random number between 100 and 300.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10-11
+---
+def shoot_arrow(): arrow_x = randint(100, 300) arrow_y = randint(100, 300) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+
+--- task ---
+
+
+**Test:** Click the **Run** button. You should see the arrow jump around the target.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/kn-IN/step_5.md b/kn-IN/step_5.md
new file mode 100644
index 000000000..2933b68ca
--- /dev/null
+++ b/kn-IN/step_5.md
@@ -0,0 +1,80 @@
+## What colour did you hit?
+
+Next, you will add some code to get the colour at the location of the arrow.
+
+### Get the colour hit by the arrow
+
+--- task ---
+
+Add a new **global variable** called `hit_colour`.
+
+Add code to `get` the colour at the centre of the arrow ,and store it in the `hit_colour` variable.
+
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10, 13, 14
+---
+def shoot_arrow(): global hit_colour
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300) hit_colour = get(arrow_x, arrow_y).hex print(hit_colour) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+**Tip:** The code to `get` the colour needs to be **before** the code to draw the `circle` otherwise you will always save the brown colour of the arrow!
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see colours being printed in the **Text output**, in hexadecimal format.
+
+--- /task ---
+
+### Run code when the mouse is pressed
+
+--- task ---
+
+Comment out the line that prints the colour. This means it will not run.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 13
+line_highlights: 14
+---
+
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Add code to print the target emoji 🎯 **when the mouse is clicked**.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 5
+line_highlights: 6-7
+---
+# The mouse_pressed function goes here
+def mouse_pressed():
+print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see the 🎯 character printed when you click the mouse on the target.
+
+
+
+--- /task ---
+
+--- save ---
\ No newline at end of file
diff --git a/kn-IN/step_6.md b/kn-IN/step_6.md
new file mode 100644
index 000000000..9449522ab
--- /dev/null
+++ b/kn-IN/step_6.md
@@ -0,0 +1,112 @@
+## Score points
+
+
+
+Add a score based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Comment out the line to print the 🎯 character so that it no longer runs.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 7
+---
+def mouse_pressed(): # print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Display a message **if** the `hit_colour`{:.language-python} is equal to the `outer` circle colour (blue).
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 8-9
+---
+def mouse_pressed():
+# print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!')
+
+--- /code ---
+
+**Tip:** If you changed the colour of your outer circle then you will need to replace `blue` with the colour name that you have chosen.
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Wait for the arrow to land on the blue circle, then click your left mouse button. 
+
+--- /task ---
+
+`elif`{:.language-python} can be used to add more conditions to your `if`{:.language-python} statement.
+
+--- task ---
+
+Add some more code to score points if the arrow lands on the **inner** or **middle** circles.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 10-14
+---
+
+def mouse_pressed(): # print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!') elif hit_colour == Color('red').hex: print('You hit the inner circle, 200 points!') elif hit_colour == Color('yellow').hex: print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button.You should score points whenever you hit the target.
+
+
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles?
+
+To do this last check, you use `else`{:.language-python}.
+
+--- task ---
+
+Add code to `print` a message when none of the `if` and `elif` statements are true.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 12
+line_highlights: 14-15
+---
+
+ elif hit_colour == Color('yellow').hex:
+ print('You hit the middle, 500 points!')
+ else:
+ print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Fire the arrow in the grass or sky to see the miss message.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/kn-IN/step_7.md b/kn-IN/step_7.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/kn-IN/step_7.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/kn-IN/step_8.md b/kn-IN/step_8.md
new file mode 100644
index 000000000..910635d28
--- /dev/null
+++ b/kn-IN/step_8.md
@@ -0,0 +1,36 @@
+## Challenge
+
+--- challenge ---
+
+
+You could:
+
+
+--- task ---
+
+Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position
+
+--- /task ---
+
+--- task ---
+
+Put emojis in your print messages ([here's a list of emojis](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from)
+
+--- /task ---
+
+--- task ---
+
+Make the game easier or harder by changing the `frame_rate=2` value
+
+
+--- /task ---
+
+--- task ---
+
+Add a variable to keep track of the total score, adding the correct number of points to it each time.
+
+--- /task ---
+
+
+
+--- /challenge ---
diff --git a/kn-IN/step_9.md b/kn-IN/step_9.md
new file mode 100644
index 000000000..86edf4a89
--- /dev/null
+++ b/kn-IN/step_9.md
@@ -0,0 +1,21 @@
+## What can you do now?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+\--- print-only ---
+
+{:width="600px"}
+
+\--- /print-only ---
+
+\--- no-print ---
+
+Click the **Run** button to view an example of this project.
+
+
+
+\--- /no-print ---
+
+Or, why not try out another [Python](https://projects.raspberrypi.org/en/projects?software%5B%5D=python) project.
+
diff --git a/mr-IN/code/target-practice-solution/main.py b/mr-IN/code/target-practice-solution/main.py
new file mode 100644
index 000000000..9b71b07d4
--- /dev/null
+++ b/mr-IN/code/target-practice-solution/main.py
@@ -0,0 +1,55 @@
+## Import library code
+
+from p5 import *
+from random import randint
+
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+ # print('🎯')
+ if hit_colour == Color("blue").hex:
+ print("You hit the outer circle, 50 points!")
+ elif hit_colour == Color("red").hex:
+ print("You hit the inner circle, 200 points!")
+ elif hit_colour == Color("yellow").hex:
+ print("You hit the middle, 500 points!")
+ else:
+ print("You missed! No points!")
+
+
+# The shoot_arrow function goes here
+def shoot_arrow():
+ global hit_colour
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ fill("brown")
+ circle(arrow_x, arrow_y, 15)
+
+
+def setup():
+ # Set up your game here
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Things to do in every frame
+ fill("cyan")
+ rect(0, 0, 400, 250)
+ fill("lightgreen")
+ rect(0, 250, 400, 150)
+ fill("brown")
+ triangle(150, 350, 200, 150, 250, 350)
+ fill("blue")
+ circle(200, 200, 170)
+ fill("red")
+ circle(200, 200, 110) # Draw the inner circle
+ fill("yellow")
+ circle(200, 200, 30) # Draw the middle circle
+ shoot_arrow()
+
+
+# Keep this to run your code
+run(frame_rate=2)
diff --git a/mr-IN/code/target-practice-solution/project_config.yml b/mr-IN/code/target-practice-solution/project_config.yml
new file mode 100644
index 000000000..2c45eb56c
--- /dev/null
+++ b/mr-IN/code/target-practice-solution/project_config.yml
@@ -0,0 +1,3 @@
+name: 'Target Practice Example'
+identifier: 'target-practice-solution'
+type: 'python'
diff --git a/mr-IN/code/target-practice-starter/main.py b/mr-IN/code/target-practice-starter/main.py
new file mode 100644
index 000000000..03f477ff0
--- /dev/null
+++ b/mr-IN/code/target-practice-starter/main.py
@@ -0,0 +1,24 @@
+## Import library code
+from p5 import *
+from random import randint
+
+# The mouse_pressed function goes here
+
+
+# The shoot_arrow function goes here
+
+
+def setup():
+ # Set up your game here
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Things to do in every frame
+ fill("cyan")
+ rect(0, 0, 400, 250)
+
+
+# Keep this to run your code
+run(frame_rate=2)
diff --git a/mr-IN/code/target-practice-starter/project_config.yml b/mr-IN/code/target-practice-starter/project_config.yml
new file mode 100644
index 000000000..1f6832901
--- /dev/null
+++ b/mr-IN/code/target-practice-starter/project_config.yml
@@ -0,0 +1,3 @@
+name: "Target Practice"
+identifier: 'target-practice-starter'
+type: 'python'
diff --git a/mr-IN/images/alternative-colours.png b/mr-IN/images/alternative-colours.png
new file mode 100644
index 000000000..e630dd54b
Binary files /dev/null and b/mr-IN/images/alternative-colours.png differ
diff --git a/mr-IN/images/animation_bg_erase.gif b/mr-IN/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/mr-IN/images/animation_bg_erase.gif differ
diff --git a/mr-IN/images/animation_no_bg_erase.gif b/mr-IN/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/mr-IN/images/animation_no_bg_erase.gif differ
diff --git a/mr-IN/images/arrow-centre.png b/mr-IN/images/arrow-centre.png
new file mode 100644
index 000000000..14dba17ee
Binary files /dev/null and b/mr-IN/images/arrow-centre.png differ
diff --git a/mr-IN/images/arrow-middle.png b/mr-IN/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/mr-IN/images/arrow-middle.png differ
diff --git a/mr-IN/images/arrow-target.png b/mr-IN/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/mr-IN/images/arrow-target.png differ
diff --git a/mr-IN/images/background.png b/mr-IN/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/mr-IN/images/background.png differ
diff --git a/mr-IN/images/banner.png b/mr-IN/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/mr-IN/images/banner.png differ
diff --git a/mr-IN/images/blue-circle.png b/mr-IN/images/blue-circle.png
new file mode 100644
index 000000000..054b612e8
Binary files /dev/null and b/mr-IN/images/blue-circle.png differ
diff --git a/mr-IN/images/blue-points.png b/mr-IN/images/blue-points.png
new file mode 100644
index 000000000..921b62ff2
Binary files /dev/null and b/mr-IN/images/blue-points.png differ
diff --git a/mr-IN/images/blue_circle_points.gif b/mr-IN/images/blue_circle_points.gif
new file mode 100644
index 000000000..e6308eb07
Binary files /dev/null and b/mr-IN/images/blue_circle_points.gif differ
diff --git a/mr-IN/images/bottom-right.png b/mr-IN/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/mr-IN/images/bottom-right.png differ
diff --git a/mr-IN/images/centre.png b/mr-IN/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/mr-IN/images/centre.png differ
diff --git a/mr-IN/images/circle-coords.png b/mr-IN/images/circle-coords.png
new file mode 100644
index 000000000..a888286e1
Binary files /dev/null and b/mr-IN/images/circle-coords.png differ
diff --git a/mr-IN/images/coords_animation.gif b/mr-IN/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/mr-IN/images/coords_animation.gif differ
diff --git a/mr-IN/images/difficulty-setting.png b/mr-IN/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/mr-IN/images/difficulty-setting.png differ
diff --git a/mr-IN/images/fire_arrow.gif b/mr-IN/images/fire_arrow.gif
new file mode 100644
index 000000000..924ba34af
Binary files /dev/null and b/mr-IN/images/fire_arrow.gif differ
diff --git a/mr-IN/images/five_circles.png b/mr-IN/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/mr-IN/images/five_circles.png differ
diff --git a/mr-IN/images/green-grass.png b/mr-IN/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/mr-IN/images/green-grass.png differ
diff --git a/mr-IN/images/grey-circle.png b/mr-IN/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/mr-IN/images/grey-circle.png differ
diff --git a/mr-IN/images/grey-points.png b/mr-IN/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/mr-IN/images/grey-points.png differ
diff --git a/mr-IN/images/initial_target.png b/mr-IN/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/mr-IN/images/initial_target.png differ
diff --git a/mr-IN/images/missed-points.png b/mr-IN/images/missed-points.png
new file mode 100644
index 000000000..0cd14626c
Binary files /dev/null and b/mr-IN/images/missed-points.png differ
diff --git a/mr-IN/images/missed_no_points.gif b/mr-IN/images/missed_no_points.gif
new file mode 100644
index 000000000..212ca30e4
Binary files /dev/null and b/mr-IN/images/missed_no_points.gif differ
diff --git a/mr-IN/images/outline-circles.png b/mr-IN/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/mr-IN/images/outline-circles.png differ
diff --git a/mr-IN/images/points-scored.gif b/mr-IN/images/points-scored.gif
new file mode 100644
index 000000000..3fbe161a8
Binary files /dev/null and b/mr-IN/images/points-scored.gif differ
diff --git a/mr-IN/images/quiz-colour.png b/mr-IN/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/mr-IN/images/quiz-colour.png differ
diff --git a/mr-IN/images/random-side.png b/mr-IN/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/mr-IN/images/random-side.png differ
diff --git a/mr-IN/images/rectangle-diagram.png b/mr-IN/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/mr-IN/images/rectangle-diagram.png differ
diff --git a/mr-IN/images/showcase_rocket.png b/mr-IN/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/mr-IN/images/showcase_rocket.png differ
diff --git a/mr-IN/images/showcase_static.png b/mr-IN/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/mr-IN/images/showcase_static.png differ
diff --git a/mr-IN/images/sky_coords.png b/mr-IN/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/mr-IN/images/sky_coords.png differ
diff --git a/mr-IN/images/sky_stroke.png b/mr-IN/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/mr-IN/images/sky_stroke.png differ
diff --git a/mr-IN/images/stand_coords.png b/mr-IN/images/stand_coords.png
new file mode 100644
index 000000000..2002bae5f
Binary files /dev/null and b/mr-IN/images/stand_coords.png differ
diff --git a/mr-IN/images/step_4_preview.gif b/mr-IN/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/mr-IN/images/step_4_preview.gif differ
diff --git a/mr-IN/images/step_5_preview.gif b/mr-IN/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/mr-IN/images/step_5_preview.gif differ
diff --git a/mr-IN/images/target-stand.png b/mr-IN/images/target-stand.png
new file mode 100644
index 000000000..c65d89363
Binary files /dev/null and b/mr-IN/images/target-stand.png differ
diff --git a/mr-IN/images/target_area.png b/mr-IN/images/target_area.png
new file mode 100644
index 000000000..1e5c72120
Binary files /dev/null and b/mr-IN/images/target_area.png differ
diff --git a/mr-IN/images/target_printed.gif b/mr-IN/images/target_printed.gif
new file mode 100644
index 000000000..b29a244fe
Binary files /dev/null and b/mr-IN/images/target_printed.gif differ
diff --git a/mr-IN/images/three-circles.png b/mr-IN/images/three-circles.png
new file mode 100644
index 000000000..13a8dd8ed
Binary files /dev/null and b/mr-IN/images/three-circles.png differ
diff --git a/mr-IN/images/top-left.png b/mr-IN/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/mr-IN/images/top-left.png differ
diff --git a/mr-IN/images/triangles-coords.png b/mr-IN/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/mr-IN/images/triangles-coords.png differ
diff --git a/mr-IN/images/upgrade-ideas.png b/mr-IN/images/upgrade-ideas.png
new file mode 100644
index 000000000..083f82320
Binary files /dev/null and b/mr-IN/images/upgrade-ideas.png differ
diff --git a/mr-IN/images/yellow-points.png b/mr-IN/images/yellow-points.png
new file mode 100644
index 000000000..0c461812c
Binary files /dev/null and b/mr-IN/images/yellow-points.png differ
diff --git a/mr-IN/meta.yml b/mr-IN/meta.yml
new file mode 100644
index 000000000..e56ce34a6
--- /dev/null
+++ b/mr-IN/meta.yml
@@ -0,0 +1,41 @@
+---
+title: Target practice
+hero_image: images/banner.png
+description: Use Python to draw a target and score points by hitting it with arrows
+meta_title: Python coding projects for kids and teens | Target practice
+meta_description: Learn Python with the Raspberry Pi Foundation's coding projects for kids and teens. Use Python to draw a target and score points by hitting it with arrows.
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: What you will make
+ -
+ title: Draw the grass
+ -
+ title: Draw your target
+ completion:
+ - engaged
+ -
+ title: Add an arrow
+ -
+ title: What colour did you hit?
+ -
+ title: Score points
+ completion:
+ - internal
+ -
+ title: Quick quiz
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: Challenge
+ challenge: true
+ -
+ title: What can you do now?
diff --git a/mr-IN/python-comments-demo.txt b/mr-IN/python-comments-demo.txt
new file mode 100644
index 000000000..86261a0a7
--- /dev/null
+++ b/mr-IN/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Setup your game here
+
+width and height of screen
+
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Set the fill colour to grass
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the circle fill colour to outer
+
+x, y, width of the circle
+
+Blue
+
+Red
+
+Yellow
+
+Set the circle fill colour to inner
+
+Inner circle - x, y, width of the circle
+
+Set the circle fill colour to middle
+
+Middle circle - x, y, width of the circle
+
+The shoot_arrow function goes here
+
+Store a random number between 100 and 300
+
+Set the arrow to fill colour to wood
+
+Draw a small circle at random coordinates
+
+Get the hit colour
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Save the colour before drawing the arrow
+
+Like functions, 'if' statements are indented
+
+Import library code
+
+Keep this to run your code
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Set the fill colour to grass
diff --git a/mr-IN/python-comments.txt b/mr-IN/python-comments.txt
new file mode 100644
index 000000000..35750f346
--- /dev/null
+++ b/mr-IN/python-comments.txt
@@ -0,0 +1,27 @@
+Things to do in every frame
+
+Draw the inner circle
+
+Draw the middle circle
+
+The shoot_arrow function goes here
+
+The mouse_pressed function goes here
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
\ No newline at end of file
diff --git a/mr-IN/python-translatable-demo.txt b/mr-IN/python-translatable-demo.txt
new file mode 100644
index 000000000..71707d059
--- /dev/null
+++ b/mr-IN/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+wood
+
+sky
+
+grass
+
+outer
+
+inner
+
+middle
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
+
+speed
diff --git a/mr-IN/python-translatable.txt b/mr-IN/python-translatable.txt
new file mode 100644
index 000000000..1e4f01f6b
--- /dev/null
+++ b/mr-IN/python-translatable.txt
@@ -0,0 +1,9 @@
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_colour
+
+speed
\ No newline at end of file
diff --git a/mr-IN/quiz1/question_1.md b/mr-IN/quiz1/question_1.md
new file mode 100644
index 000000000..edbef020a
--- /dev/null
+++ b/mr-IN/quiz1/question_1.md
@@ -0,0 +1,60 @@
+## Quick quiz
+
+Answer the three questions. There are hints to guide you to the correct answer.
+
+When you have answered each question, click on **Check my answer**.
+
+Have fun!
+
+--- question ---
+---
+legend: प्रश्न 3 पैकी 1
+---
+In your project you added `randint(100, 300)` to your `shoot_arrow()` function. What does `randint(100, 300)` do?
+
+--- code ---
+---
+language: python
+---
+
+def shoot_arrow(): global hit_colour arrow_x = randint(100, 300) arrow_y = randint(100, 300)
+
+--- /code ---
+
+--- choices ---
+
+- (x) It chooses a random whole number between 100 and 300.
+
+ --- feedback ---
+
+That's correct. This chooses a random x coordinate for your arrow.
+
+ --- /feedback ---
+
+- ( ) It makes the arrow move randomly around the screen.
+
+ --- feedback ---
+
+Not quite. This code part of how the arrow moves randomly but you need other code too to achieve that goal.
+
+ --- /feedback ---
+
+- () It gets the colour that was hit by the arrow.
+
+ --- feedback ---
+
+ Not quite. The get() function would be used to get the colour.
+
+ --- /feedback ---
+
+- ( ) It draws a circle of a random size.
+
+ --- feedback ---
+
+ Not quite. The circle() function would be used to draw a circle.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/mr-IN/quiz1/question_2.md b/mr-IN/quiz1/question_2.md
new file mode 100644
index 000000000..4824cfb72
--- /dev/null
+++ b/mr-IN/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legend: प्रश्न 3 पैकी 2
+---
+
+In your project, you used `if` , `elif`, and `else` conditions to check which colour the arrow landed on.
+
+In the example below, a variable called `speed` has the number `6` stored in it. When this `if` statement is run, what would be printed in the output area?
+
+--- code ---
+---
+language: python
+---
+speed = 6
+
+if speed == 7: print('Super fast') elif speed == 5: print('Pretty quick') elif speed == 6: print('Very fast') else: print('Speed not recognised!')
+
+--- /code ---
+
+--- choices ---
+
+- (x) `Very fast`
+
+ --- feedback ---
+
+ That's correct! The **speed** variable has been assigned the value `6`, which makes the `speed == 6` condition **True** and prints `Very fast`.
+
+ --- /feedback ---
+
+- ( ) `Speed not recognised!`
+
+ --- feedback ---
+
+ Not quite, look at the value assigned to the **speed** variable.
+
+ --- /feedback ---
+
+- ( ) Nothing gets printed
+
+ --- feedback ---
+
+ Try again, `else` is used as a final option for when all the above conditions are false. Look through the conditions again, are any of the conditions true?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/mr-IN/quiz1/question_3.md b/mr-IN/quiz1/question_3.md
new file mode 100644
index 000000000..13e9cc0f6
--- /dev/null
+++ b/mr-IN/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legend: प्रश्न 3 पैकी 3
+---
+
+A circle is drawn using the following code:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+Which of the images below show the correct position of this circle in the output area?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the bottom-right corner, the coordinates would need to be the same as the screen size. In this example, the ellipse would be `circle(400, 400, 300)`.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the middle, the coordinates would need to be half of the screen size. In this example, `circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ That's correct! This circle is centred at coordinates (0,0), the top-left corner of the screen.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ No, this circle would have code of `circle(350, 150, 300)` to centre it towards the top-right of the screen. The `x` coordinate is how far across the screen the ellipse is, and the `y` coordinate is how far down the screen it is.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/mr-IN/resources/main.py b/mr-IN/resources/main.py
new file mode 100644
index 000000000..8d0da5672
--- /dev/null
+++ b/mr-IN/resources/main.py
@@ -0,0 +1,61 @@
+#!/bin/python3
+
+# Import library code
+from p5 import *
+from math import *
+from random import randint
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+ if hit_color == outer:
+ print('You hit the outer circle, 50 points!') #Like functions, 'if' statements are indented
+ elif hit_color == inner:
+ print('You hit the inner circle, 200 points!')
+ elif hit_color == bullseye:
+ print('You hit the bullseye, 500 points!')
+ else:
+ print('You missed! No points!')
+
+# The shoot_arrow function goes here
+def shoot_arrow():
+ global hit_color
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_color = get(arrow_x, arrow_y)
+ ellipse(arrow_x, arrow_y, 15, 15)
+
+def setup():
+# Setup your game here
+ size(400, 400) # width and height
+ frame_rate(2)
+
+
+def draw():
+# Things to do in every frame
+ global outer, inner, bullseye
+ sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+ grass = color(149, 212, 122)
+ wood = color(145, 96, 51)
+ outer = color(0, 120, 180)
+ inner = color(210, 60, 60)
+ bullseye = color(220, 200, 0)
+
+ no_stroke()
+ fill(sky)
+ rect(0, 0, 400, 250)
+ fill(grass)
+ rect(0, 250, 400, 150)
+
+ fill(wood)
+ triangle(150, 350, 200, 150, 250, 350)
+ fill(outer)
+ ellipse(200, 200, 170, 170)
+ fill(inner)
+ ellipse(200, 200, 110, 110) #Inner circle
+ fill(bullseye)
+ ellipse(200, 200, 30, 30) #Bullseye
+
+ fill(wood)
+ shoot_arrow()
+# Keep this to run your code
+run()
diff --git a/mr-IN/resources/p5.py b/mr-IN/resources/p5.py
new file mode 100644
index 000000000..fc023ee64
--- /dev/null
+++ b/mr-IN/resources/p5.py
@@ -0,0 +1,135 @@
+# Definitions for compatibility with the p5py processing library
+from processing import *
+import __main__
+
+# Shape
+from processing import rectMode as rect_mode
+from processing import ellipseMode as ellipse_mode
+from processing import strokeWeight as stroke_weight
+from processing import strokeCap as stroke_cap
+from processing import strokeJoin as stroke_join
+from processing import noStroke as no_stroke
+from processing import noFill as no_fill
+
+# Fonts
+from processing import createFont as create_font
+from processing import loadFont as load_font
+from processing import textFont as text_font
+
+# Text
+from processing import textAlign as text_align
+from processing import textLeading as text_leading
+from processing import textMode as text_mode
+from processing import textSize as text_size
+from processing import textWidth as text_width
+
+# Colour
+from processing import blendColor as blend_color
+from processing import lerpColor as lerp_color
+from processing import color as Color
+
+# Images
+from processing import createImage as create_image
+from processing import imageMode as image_mode
+from processing import loadImage as load_image
+from processing import noTint as no_tint
+from processing import requestImage as request_image
+
+# Environment
+from processing import frameRate as frame_rate
+from processing import noCursor as no_cursor
+from processing import noLoop as no_loop
+
+# Transform
+from processing import applyMatrix as apply_matrix
+from processing import popMatrix as pop_matrix
+from processing import printMatrix as print_matrix
+from processing import pushMatrix as push_matrix
+from processing import resetMatrix as reset_matrix
+from processing import rotateX as rotate_x
+from processing import rotateY as rotate_y
+from processing import pushStyle as push_style
+from processing import popStyle as pop_style
+
+from processing import run as main_run
+
+# Keyboard
+
+def mousePressed():
+ if hasattr(__main__, "mouse_pressed"):
+ mouse_pressed = getattr(__main__, "mouse_pressed")
+ mouse_pressed()
+
+def mouseReleased():
+ if hasattr(__main__, "mouse_released"):
+ mouse_released = getattr(__main__, "mouse_released")
+ mouse_released()
+
+__main__.mouse_x = 0
+__main__.mouse_y = 0
+__main__.mouse_px = 0
+__main__.mouse_py = 0
+__main__.frame_count = 0
+__main__.frame_rate = 60
+
+def mouseMoved():
+ __main__.mouse_x = mouse.x
+ __main__.mouse_y = mouse.y
+ __main__.mouse_px = mouse.px
+ __main__.mouse_py = mouse.py
+ if hasattr(__main__, "mouse_moved"):
+ mouse_moved = getattr(__main__, "mouse_moved")
+ mouse_moved()
+
+def mouseDragged():
+ if hasattr(__main__, "mouse_dragged"):
+ mouse_dragged = getattr(__main__, "mouse_dragged")
+ mouse_dragged()
+
+def new_draw():
+ __main__.frame_count = frameCount
+ frameRate = __main__.frame_rate
+ old_draw()
+
+def run():
+ global old_draw
+ old_draw = __main__.draw
+ __main__.draw = new_draw
+ main_run()
+
+def grid():
+ pushMatrix()
+ stroke(200)
+ fill(0)
+ line(0, height/2, width, height/2)
+ line(width/2, 0, width/2, height)
+ x_coords = [0, width/2, width]
+ y_coords = [0, height/2, height]
+
+ for x in x_coords:
+ for y in y_coords:
+ show_coord(x, y)
+
+ popMatrix()
+
+def show_coord(x, y):
+ if x == width:
+ x_align = RIGHT
+ elif x == 0:
+ x_align = LEFT
+ else:
+ x_align = CENTER
+
+ if y == height:
+ y_align = BASELINE
+ elif y == 0:
+ y_align = TOP
+ else:
+ y_align = CENTER
+
+ pushStyle()
+ fill(100)
+ text_align(x_align, y_align)
+ text('(' + str(int(x)) + ', ' + str(int(y)) + ')', x, y)
+ popStyle()
+
diff --git a/mr-IN/step_1.md b/mr-IN/step_1.md
new file mode 100644
index 000000000..e3a8012cf
--- /dev/null
+++ b/mr-IN/step_1.md
@@ -0,0 +1,29 @@
+## What you will make
+
+Use Python to draw a target and score points by hitting it with arrows.
+
+--- print-only ---
+
+{:width="640px"}
+
+--- /print-only ---
+
+--- no-print ---
+
+
+
+Click the **Run** button below to start the game. When the dot appears on the target 🎯, click the mouse (or tap on your tablet) to fire your arrow.
+
+
+
+
+
+--- /no-print ---
+
+
+
+
+
diff --git a/mr-IN/step_2.md b/mr-IN/step_2.md
new file mode 100644
index 000000000..919a62214
--- /dev/null
+++ b/mr-IN/step_2.md
@@ -0,0 +1,37 @@
+## Draw the grass
+
+--- task ---
+
+Open the [Target practice starter](https://editor.raspberrypi.org/en/projects/target-practice-starter){:target="_blank"} project.
+
+--- /task ---
+
+--- task ---
+
+**Add** code to draw a green rectangle at the bottom of the screen to represent the grass.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 17
+line_highlights: 21-22
+---
+def draw(): # Things to do in every frame fill('cyan')
+rect(0, 0, 400, 250)
+fill('lightgreen')
+rect(0, 250, 400, 150)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your project to view the background.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/mr-IN/step_3.md b/mr-IN/step_3.md
new file mode 100644
index 000000000..c0895baaf
--- /dev/null
+++ b/mr-IN/step_3.md
@@ -0,0 +1,115 @@
+## Draw your target
+
+
+
+Your game needs a target to shoot arrows at.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a triangular stand
+
+--- task ---
+
+Set the fill colour to `brown`.
+
+Draw a triangle using the x and y coordinates for each of the corners.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 21
+line_highlights: 23-24
+---
+
+ fill('lightgreen')
+ rect(0, 250, 400, 150)
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the stand for your target:
+
+{:width="400px"}
+
+--- /task ---
+
+### Draw the target circles
+
+--- task ---
+
+The largest part of the target is a blue **circle**.
+
+Set the fill colour to `blue`.
+
+Draw a circle with x and y coordinates for its centre and a width.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 23
+line_highlights: 25-26
+---
+
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+ fill('blue')
+ circle(200, 200, 170)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the first large blue circle.
+
+The blue circle was drawn after the stand so it is in front.
+
+{:width="400px"}
+
+--- /task ---
+
+The target is made of different-sized circles with the same centre coordinates (200, 200).
+
+--- task ---
+
+**Add** coloured circles for the inner and middle parts of the target.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 25
+line_highlights: 27-30
+---
+
+ fill('blue')
+ circle(200, 200, 170)
+ fill('red')
+ circle(200, 200, 110) # Draw the inner circle
+ fill('yellow')
+ circle(200, 200, 30) # Draw the middle circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your project to see the target with three coloured circles.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/mr-IN/step_4.md b/mr-IN/step_4.md
new file mode 100644
index 000000000..0e4f7b007
--- /dev/null
+++ b/mr-IN/step_4.md
@@ -0,0 +1,88 @@
+## Add an arrow
+
+
+
+Add an even smaller circle to represent an arrow.
+
+
+
+{:width="300px"}
+
+
+
+
+### Where will you shoot?
+
+--- task ---
+
+Add a function to draw a brown circle at coordinates `200`, `200`.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 8
+line_highlights: 9-13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = 200 arrow_y = 200 fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Call your new `shoot_arrow()`{:.language-python} function at the end of your `draw()`{:.language-python} function.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 33
+line_highlights: 35
+---
+
+ fill('yellow')
+ circle(200, 200, 30)
+ shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see the arrow in the centre.
+
+
+
+
+--- /task ---
+
+The arrow needs to move randomly.
+
+
+--- task ---
+
+Change the `arrow_x`{:.language-python} and `arrow_y`{:.language-python} variables to choose a random number between 100 and 300.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10-11
+---
+def shoot_arrow(): arrow_x = randint(100, 300) arrow_y = randint(100, 300) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+
+--- task ---
+
+
+**Test:** Click the **Run** button. You should see the arrow jump around the target.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/mr-IN/step_5.md b/mr-IN/step_5.md
new file mode 100644
index 000000000..2933b68ca
--- /dev/null
+++ b/mr-IN/step_5.md
@@ -0,0 +1,80 @@
+## What colour did you hit?
+
+Next, you will add some code to get the colour at the location of the arrow.
+
+### Get the colour hit by the arrow
+
+--- task ---
+
+Add a new **global variable** called `hit_colour`.
+
+Add code to `get` the colour at the centre of the arrow ,and store it in the `hit_colour` variable.
+
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10, 13, 14
+---
+def shoot_arrow(): global hit_colour
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300) hit_colour = get(arrow_x, arrow_y).hex print(hit_colour) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+**Tip:** The code to `get` the colour needs to be **before** the code to draw the `circle` otherwise you will always save the brown colour of the arrow!
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see colours being printed in the **Text output**, in hexadecimal format.
+
+--- /task ---
+
+### Run code when the mouse is pressed
+
+--- task ---
+
+Comment out the line that prints the colour. This means it will not run.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 13
+line_highlights: 14
+---
+
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Add code to print the target emoji 🎯 **when the mouse is clicked**.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 5
+line_highlights: 6-7
+---
+# The mouse_pressed function goes here
+def mouse_pressed():
+print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see the 🎯 character printed when you click the mouse on the target.
+
+
+
+--- /task ---
+
+--- save ---
\ No newline at end of file
diff --git a/mr-IN/step_6.md b/mr-IN/step_6.md
new file mode 100644
index 000000000..9449522ab
--- /dev/null
+++ b/mr-IN/step_6.md
@@ -0,0 +1,112 @@
+## Score points
+
+
+
+Add a score based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Comment out the line to print the 🎯 character so that it no longer runs.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 7
+---
+def mouse_pressed(): # print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Display a message **if** the `hit_colour`{:.language-python} is equal to the `outer` circle colour (blue).
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 8-9
+---
+def mouse_pressed():
+# print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!')
+
+--- /code ---
+
+**Tip:** If you changed the colour of your outer circle then you will need to replace `blue` with the colour name that you have chosen.
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Wait for the arrow to land on the blue circle, then click your left mouse button. 
+
+--- /task ---
+
+`elif`{:.language-python} can be used to add more conditions to your `if`{:.language-python} statement.
+
+--- task ---
+
+Add some more code to score points if the arrow lands on the **inner** or **middle** circles.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 10-14
+---
+
+def mouse_pressed(): # print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!') elif hit_colour == Color('red').hex: print('You hit the inner circle, 200 points!') elif hit_colour == Color('yellow').hex: print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button.You should score points whenever you hit the target.
+
+
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles?
+
+To do this last check, you use `else`{:.language-python}.
+
+--- task ---
+
+Add code to `print` a message when none of the `if` and `elif` statements are true.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 12
+line_highlights: 14-15
+---
+
+ elif hit_colour == Color('yellow').hex:
+ print('You hit the middle, 500 points!')
+ else:
+ print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Fire the arrow in the grass or sky to see the miss message.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/mr-IN/step_7.md b/mr-IN/step_7.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/mr-IN/step_7.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/mr-IN/step_8.md b/mr-IN/step_8.md
new file mode 100644
index 000000000..910635d28
--- /dev/null
+++ b/mr-IN/step_8.md
@@ -0,0 +1,36 @@
+## Challenge
+
+--- challenge ---
+
+
+You could:
+
+
+--- task ---
+
+Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position
+
+--- /task ---
+
+--- task ---
+
+Put emojis in your print messages ([here's a list of emojis](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from)
+
+--- /task ---
+
+--- task ---
+
+Make the game easier or harder by changing the `frame_rate=2` value
+
+
+--- /task ---
+
+--- task ---
+
+Add a variable to keep track of the total score, adding the correct number of points to it each time.
+
+--- /task ---
+
+
+
+--- /challenge ---
diff --git a/mr-IN/step_9.md b/mr-IN/step_9.md
new file mode 100644
index 000000000..86edf4a89
--- /dev/null
+++ b/mr-IN/step_9.md
@@ -0,0 +1,21 @@
+## What can you do now?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+\--- print-only ---
+
+{:width="600px"}
+
+\--- /print-only ---
+
+\--- no-print ---
+
+Click the **Run** button to view an example of this project.
+
+
+
+\--- /no-print ---
+
+Or, why not try out another [Python](https://projects.raspberrypi.org/en/projects?software%5B%5D=python) project.
+
diff --git a/nl-NL/code/target-practice-solution/main.py b/nl-NL/code/target-practice-solution/main.py
new file mode 100644
index 000000000..31763538a
--- /dev/null
+++ b/nl-NL/code/target-practice-solution/main.py
@@ -0,0 +1,55 @@
+# Bibliotheekcode importeren!
+
+from p5 import *
+from random import randint
+
+
+# De mouse_pressed functie komt hier
+def mouse_pressed():
+ # print('🎯')
+ if raak_kleur == Color("blue").hex:
+ print("Je hebt de buitenste cirkel geraakt, 50 punten!")
+ elif raak_kleur == Color("red").hex:
+ print("Je hebt de binnenste cirkel geraakt, 200 punten!")
+ elif raak_kleur == Color("yellow").hex:
+ print("In de roos, 500 punten!")
+ else:
+ print("Je hebt gemist! Geen punten!")
+
+
+# De schiet_pijl functie komt hier
+def schiet_pijl():
+ global raak_kleur
+ pijl_x = randint(100, 300)
+ pijl_y = randint(100, 300)
+ raak_kleur = get(pijl_x, pijl_y).hex
+ # print(raak_kleur)
+ fill("brown")
+ circle(pijl_x, pijl_y, 15)
+
+
+def setup():
+ # Stel je spel hier in
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Dingen om te doen in elk frame
+ fill("cyan")
+ rect(0, 0, 400, 250)
+ fill("lightgreen")
+ rect(0, 250, 400, 150)
+ fill("brown")
+ triangle(150, 350, 200, 150, 250, 350)
+ fill("blue")
+ circle(200, 200, 170)
+ fill("red")
+ circle(200, 200, 110) # Binnenste cirkel
+ fill("yellow")
+ circle(200, 200, 30) # Middelste cirkel
+ schiet_pijl()
+
+
+# Bewaar dit om je code uit te voeren
+run(frame_rate=2)
diff --git a/nl-NL/code/target-practice-solution/project_config.yml b/nl-NL/code/target-practice-solution/project_config.yml
new file mode 100644
index 000000000..85cfec00f
--- /dev/null
+++ b/nl-NL/code/target-practice-solution/project_config.yml
@@ -0,0 +1,3 @@
+name: 'Voorbeeld Oefening doelwit schieten'
+identifier: 'target-practice-solution'
+type: 'python'
diff --git a/nl-NL/code/target-practice-starter/main.py b/nl-NL/code/target-practice-starter/main.py
new file mode 100644
index 000000000..916b0dce1
--- /dev/null
+++ b/nl-NL/code/target-practice-starter/main.py
@@ -0,0 +1,24 @@
+# Bibliotheekcode importeren
+from p5 import *
+from random import randint
+
+# De mouse_pressed functie komt hier
+
+
+# De schiet_pijl functie komt hier
+
+
+def setup():
+ # Stel je spel hier in
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Dingen om te doen in elk frame
+ fill("cyan")
+ rect(0, 0, 400, 250)
+
+
+# Bewaar dit om je code uit te voeren
+run(frame_rate=2)
diff --git a/nl-NL/code/target-practice-starter/project_config.yml b/nl-NL/code/target-practice-starter/project_config.yml
new file mode 100644
index 000000000..0e7e4b860
--- /dev/null
+++ b/nl-NL/code/target-practice-starter/project_config.yml
@@ -0,0 +1,3 @@
+name: "Oefening doelwit schieten"
+identifier: 'target-practice-starter'
+type: 'python'
diff --git a/nl-NL/images/alternative-colours.png b/nl-NL/images/alternative-colours.png
new file mode 100644
index 000000000..e630dd54b
Binary files /dev/null and b/nl-NL/images/alternative-colours.png differ
diff --git a/nl-NL/images/animation_bg_erase.gif b/nl-NL/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/nl-NL/images/animation_bg_erase.gif differ
diff --git a/nl-NL/images/animation_no_bg_erase.gif b/nl-NL/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/nl-NL/images/animation_no_bg_erase.gif differ
diff --git a/nl-NL/images/arrow-centre.png b/nl-NL/images/arrow-centre.png
new file mode 100644
index 000000000..14dba17ee
Binary files /dev/null and b/nl-NL/images/arrow-centre.png differ
diff --git a/nl-NL/images/arrow-middle.png b/nl-NL/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/nl-NL/images/arrow-middle.png differ
diff --git a/nl-NL/images/arrow-target.png b/nl-NL/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/nl-NL/images/arrow-target.png differ
diff --git a/nl-NL/images/background.png b/nl-NL/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/nl-NL/images/background.png differ
diff --git a/nl-NL/images/banner.png b/nl-NL/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/nl-NL/images/banner.png differ
diff --git a/nl-NL/images/blue-circle.png b/nl-NL/images/blue-circle.png
new file mode 100644
index 000000000..65c8564cc
Binary files /dev/null and b/nl-NL/images/blue-circle.png differ
diff --git a/nl-NL/images/blue-points.png b/nl-NL/images/blue-points.png
new file mode 100644
index 000000000..9e0e73ff9
Binary files /dev/null and b/nl-NL/images/blue-points.png differ
diff --git a/nl-NL/images/blue_circle_points.gif b/nl-NL/images/blue_circle_points.gif
new file mode 100644
index 000000000..086b59da7
Binary files /dev/null and b/nl-NL/images/blue_circle_points.gif differ
diff --git a/nl-NL/images/bottom-right.png b/nl-NL/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/nl-NL/images/bottom-right.png differ
diff --git a/nl-NL/images/centre.png b/nl-NL/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/nl-NL/images/centre.png differ
diff --git a/nl-NL/images/circle-coords.png b/nl-NL/images/circle-coords.png
new file mode 100644
index 000000000..a888286e1
Binary files /dev/null and b/nl-NL/images/circle-coords.png differ
diff --git a/nl-NL/images/coords_animation.gif b/nl-NL/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/nl-NL/images/coords_animation.gif differ
diff --git a/nl-NL/images/difficulty-setting.png b/nl-NL/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/nl-NL/images/difficulty-setting.png differ
diff --git a/nl-NL/images/fire_arrow.gif b/nl-NL/images/fire_arrow.gif
new file mode 100644
index 000000000..c084db578
Binary files /dev/null and b/nl-NL/images/fire_arrow.gif differ
diff --git a/nl-NL/images/five_circles.png b/nl-NL/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/nl-NL/images/five_circles.png differ
diff --git a/nl-NL/images/green-grass.png b/nl-NL/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/nl-NL/images/green-grass.png differ
diff --git a/nl-NL/images/grey-circle.png b/nl-NL/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/nl-NL/images/grey-circle.png differ
diff --git a/nl-NL/images/grey-points.png b/nl-NL/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/nl-NL/images/grey-points.png differ
diff --git a/nl-NL/images/initial_target.png b/nl-NL/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/nl-NL/images/initial_target.png differ
diff --git a/nl-NL/images/missed-points.png b/nl-NL/images/missed-points.png
new file mode 100644
index 000000000..0cd14626c
Binary files /dev/null and b/nl-NL/images/missed-points.png differ
diff --git a/nl-NL/images/missed_no_points.gif b/nl-NL/images/missed_no_points.gif
new file mode 100644
index 000000000..b4ce1d3d8
Binary files /dev/null and b/nl-NL/images/missed_no_points.gif differ
diff --git a/nl-NL/images/outline-circles.png b/nl-NL/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/nl-NL/images/outline-circles.png differ
diff --git a/nl-NL/images/points-scored.gif b/nl-NL/images/points-scored.gif
new file mode 100644
index 000000000..a45594896
Binary files /dev/null and b/nl-NL/images/points-scored.gif differ
diff --git a/nl-NL/images/quiz-colour.png b/nl-NL/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/nl-NL/images/quiz-colour.png differ
diff --git a/nl-NL/images/random-side.png b/nl-NL/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/nl-NL/images/random-side.png differ
diff --git a/nl-NL/images/rectangle-diagram.png b/nl-NL/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/nl-NL/images/rectangle-diagram.png differ
diff --git a/nl-NL/images/showcase_rocket.png b/nl-NL/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/nl-NL/images/showcase_rocket.png differ
diff --git a/nl-NL/images/showcase_static.png b/nl-NL/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/nl-NL/images/showcase_static.png differ
diff --git a/nl-NL/images/sky_coords.png b/nl-NL/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/nl-NL/images/sky_coords.png differ
diff --git a/nl-NL/images/sky_stroke.png b/nl-NL/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/nl-NL/images/sky_stroke.png differ
diff --git a/nl-NL/images/stand_coords.png b/nl-NL/images/stand_coords.png
new file mode 100644
index 000000000..98550a379
Binary files /dev/null and b/nl-NL/images/stand_coords.png differ
diff --git a/nl-NL/images/step_4_preview.gif b/nl-NL/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/nl-NL/images/step_4_preview.gif differ
diff --git a/nl-NL/images/step_5_preview.gif b/nl-NL/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/nl-NL/images/step_5_preview.gif differ
diff --git a/nl-NL/images/target-stand.png b/nl-NL/images/target-stand.png
new file mode 100644
index 000000000..c64259beb
Binary files /dev/null and b/nl-NL/images/target-stand.png differ
diff --git a/nl-NL/images/target_area.png b/nl-NL/images/target_area.png
new file mode 100644
index 000000000..c6633448f
Binary files /dev/null and b/nl-NL/images/target_area.png differ
diff --git a/nl-NL/images/target_printed.gif b/nl-NL/images/target_printed.gif
new file mode 100644
index 000000000..b29a244fe
Binary files /dev/null and b/nl-NL/images/target_printed.gif differ
diff --git a/nl-NL/images/three-circles.png b/nl-NL/images/three-circles.png
new file mode 100644
index 000000000..90a5e243a
Binary files /dev/null and b/nl-NL/images/three-circles.png differ
diff --git a/nl-NL/images/top-left.png b/nl-NL/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/nl-NL/images/top-left.png differ
diff --git a/nl-NL/images/triangles-coords.png b/nl-NL/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/nl-NL/images/triangles-coords.png differ
diff --git a/nl-NL/images/upgrade-ideas.png b/nl-NL/images/upgrade-ideas.png
new file mode 100644
index 000000000..16d7d8079
Binary files /dev/null and b/nl-NL/images/upgrade-ideas.png differ
diff --git a/nl-NL/images/yellow-points.png b/nl-NL/images/yellow-points.png
new file mode 100644
index 000000000..dc0315ac4
Binary files /dev/null and b/nl-NL/images/yellow-points.png differ
diff --git a/nl-NL/meta.yml b/nl-NL/meta.yml
new file mode 100644
index 000000000..db79a8faf
--- /dev/null
+++ b/nl-NL/meta.yml
@@ -0,0 +1,41 @@
+---
+title: Oefening doelwit schieten
+hero_image: images/banner.png
+description: Gebruik Python om een doel te tekenen en punten te scoren door het met pijlen te raken
+meta_title: Python programmeer projecten voor kinderen en tieners | Oefening doelwit schieten
+meta_description: Leer Python met de codeerprojecten van de Raspberry Pi Foundation voor kinderen en tieners. Gebruik Python om een doelwit te tekenen en punten te scoren door er met pijlen op te mikken.
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: Wat ga je maken
+ -
+ title: Teken het gras
+ -
+ title: Teken je doelwit
+ completion:
+ - engaged
+ -
+ title: Schiet de pijl af
+ -
+ title: Welke kleur heb je geraakt?
+ -
+ title: Punten scoren
+ completion:
+ - internal
+ -
+ title: Snelle quiz
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: Uitdaging
+ challenge: true
+ -
+ title: Wat kun je verder nog doen?
diff --git a/nl-NL/python-comments-demo.txt b/nl-NL/python-comments-demo.txt
new file mode 100644
index 000000000..7604e4472
--- /dev/null
+++ b/nl-NL/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Stel je spel hier in
+
+breedte en hoogte van het scherm
+
+Dingen om te doen in elk frame
+
+Rood = 92, Groen = 204, Blauw = 206
+
+Stel de vulkleur in op gras
+
+x, y, breedte, hoogte
+
+Stel de vulkleur van de standaard in op hout
+
+Stel de kleur van de cirkelvulling in op buitenste
+
+x, y, breedte van de cirkel
+
+Blauw
+
+Rood
+
+Geel
+
+Zet de kleur van de cirkelvulling op de binnenste
+
+Binnenste cirkel - x, y, breedte van de cirkel
+
+Zet de kleur van de cirkelvulling in op midden
+
+Middelste cirkel - x, y, breedte van de cirkel
+
+De schiet_pijl functie komt hier
+
+Sla een willekeurig getal op tussen 100 en 300
+
+Stel de pijl in om met kleur hout te vullen
+
+Teken een kleine cirkel op willekeurige coördinaten
+
+Pak de kleur van de hit
+
+De muis_ingedrukt functie komt hier
+
+Kan ook gebruikt worden in andere functies
+
+Sla de kleur op voordat je de pijl tekent
+
+Net als functies, zijn 'if'-statements ingesprongen
+
+Bibliotheekcode importeren
+
+Bewaar dit om je code uit te voeren
+
+Definities voor compatibiliteit met de p5py-processing-bibliotheek
+
+Vorm
+
+Lettertypen
+
+Tekst
+
+Kleur
+
+Afbeeldingen
+
+Omgeving
+
+Omzetten
+
+Toetsenbord
+
+Stel de vulkleur in op gras
diff --git a/nl-NL/python-comments.txt b/nl-NL/python-comments.txt
new file mode 100644
index 000000000..667891143
--- /dev/null
+++ b/nl-NL/python-comments.txt
@@ -0,0 +1,27 @@
+Dingen om te doen in elk frame
+
+Teken de binnenste cirkel
+
+Teken de middelste cirkel
+
+De schiet_pijl functie komt hier
+
+De mouse_pressed functie komt hier
+
+Je raakt de buitenste cirkel, 50 punten!
+
+Je hebt de binnenste cirkel geraakt, 200 punten!
+
+Je raakt het midden, 500 punten!
+
+Je hebt het midden geraakt, 500 punten!
+
+Je hebt gemist! Geen punten!
+
+Supersnel
+
+Vrij snel
+
+Zeer snel
+
+Snelheid niet herkend!
\ No newline at end of file
diff --git a/nl-NL/python-translatable-demo.txt b/nl-NL/python-translatable-demo.txt
new file mode 100644
index 000000000..84c32d312
--- /dev/null
+++ b/nl-NL/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+hout
+
+lucht
+
+gras
+
+buitenste
+
+binnenste
+
+midden
+
+schiet_pijl
+
+pijl_x
+
+pijl_y
+
+raak_kleur
+
+Je hebt de buitenste cirkel geraakt, 50 punten!
+
+Je hebt de binnenste cirkel geraakt, 200 punten!
+
+Je hebt het midden geraakt, 500 punten!
+
+Je hebt gemist! Geen punten!
+
+Supersnel
+
+Vrij snel
+
+Zeer snel
+
+Snelheid niet herkend!
+
+snelheid
diff --git a/nl-NL/python-translatable.txt b/nl-NL/python-translatable.txt
new file mode 100644
index 000000000..ed3fd4ba6
--- /dev/null
+++ b/nl-NL/python-translatable.txt
@@ -0,0 +1,9 @@
+schiet_pijl
+
+pijl_x
+
+pijl_y
+
+raak_kleur
+
+snelheid
\ No newline at end of file
diff --git a/nl-NL/quiz1/question_1.md b/nl-NL/quiz1/question_1.md
new file mode 100644
index 000000000..2bc938558
--- /dev/null
+++ b/nl-NL/quiz1/question_1.md
@@ -0,0 +1,60 @@
+## Snelle quiz
+
+Beantwoord de drie vragen. Je wordt naar het juiste antwoord geleid.
+
+Klik na het beantwoorden van elke vraag op **Controleer mijn antwoord**.
+
+Veel plezier!
+
+--- question ---
+---
+legend: Vraag 1 van 3
+---
+In je project heb je `randint(100, 300)` toegevoegd aan je `schiet_pijl()` functie. Wat doet `randint(100, 300)`?
+
+--- code ---
+---
+language: python
+---
+
+def shoot_arrow(): global hit_colour arrow_x = randint(100, 300) arrow_y = randint(100, 300)
+
+--- /code ---
+
+--- choices ---
+
+- (x) Er wordt een willekeurig geheel getal tussen 100 en 300 gekozen.
+
+ --- feedback ---
+
+Dat klopt. Hiermee kies je een willekeurige x-coördinaat voor jouw pijl.
+
+ --- /feedback ---
+
+- ( ) Hierdoor beweegt de pijl willekeurig over het scherm.
+
+ --- feedback ---
+
+Niet helemaal. Deze code bepaalt gedeeltelijk hoe de pijl willekeurig beweegt, maar om dat doel te bereiken, heb je ook nog andere code nodig.
+
+ --- /feedback ---
+
+- () Het haalt de kleur op die door de pijl werd geraakt.
+
+ --- feedback ---
+
+ Niet helemaal. De functie get() wordt gebruikt om de kleur op te halen.
+
+ --- /feedback ---
+
+- ( ) Er wordt een cirkelvorm in jouw programma getekend.
+
+ --- feedback ---
+
+ Niet helemaal. De functie circle() zou worden gebruikt om een cirkel te tekenen.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/nl-NL/quiz1/question_2.md b/nl-NL/quiz1/question_2.md
new file mode 100644
index 000000000..ddf7b3471
--- /dev/null
+++ b/nl-NL/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legenda: Vraag 2 van 3
+---
+
+In je project heb je `if`, `elif`en `else` condities gebruikt om te controleren op welke kleur de pijl terechtkwam.
+
+In het onderstaande voorbeeld is in een variabele met de naam `snelheid` het getal `6` opgeslagen. Als dit `if` commando wordt uitgevoerd, wat wordt er dan afgedrukt in het uitvoergebied?
+
+--- code ---
+---
+language: python
+---
+snelheid = 6
+
+if snelheid == 7: print('Super snel') elif snelheid == 5: print('Aardig snel') elif snelheid == 6: print('Zeer snel') else: print( 'Snelheid niet herkend!')
+
+--- /code ---
+
+--- choices ---
+
+- (x) `Zeer snel`
+
+ --- feedback ---
+
+ Dat is correct! De **snelheid** variabele heeft de waarde `6`gekregen, waardoor de voorwaarde `snelheid == 6` **Waar** is en `Zeer snel` wordt afgedrukt.
+
+ --- /feedback ---
+
+- ( ) `Snelheid niet herkend!`
+
+ --- feedback ---
+
+ Niet helemaal, kijk naar de waarde die is toegewezen aan de variabele **snelheid**.
+
+ --- /feedback ---
+
+- ( ) Er wordt niets afgedrukt
+
+ --- feedback ---
+
+ Probeer het opnieuw, `else` wordt gebruikt als laatste optie voor wanneer alle bovenstaande voorwaarden onwaar zijn. Kijk nog eens naar de voorwaarden. Is een van de voorwaarden waar?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/nl-NL/quiz1/question_3.md b/nl-NL/quiz1/question_3.md
new file mode 100644
index 000000000..052c790ee
--- /dev/null
+++ b/nl-NL/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legenda: Vraag 3 van 3
+---
+
+Een cirkel wordt getekend met behulp van de volgende code:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+Welke van de onderstaande afbeeldingen toont de juiste positie van deze cirkel in het uitvoergebied?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Niet helemaal, om de cirkel in de rechterbenedenhoek te centreren, zouden de coördinaten hetzelfde moeten zijn als de schermgrootte. In dit voorbeeld zou de ellips `circle(400, 400, 300)`zijn.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Niet helemaal, om de cirkel in het midden te centreren, zouden de coördinaten de helft van de schermgrootte moeten zijn. In dit voorbeeld `circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ Dat is correct! Deze cirkel is gecentreerd op coördinaten (0,0), de linkerbovenhoek van het scherm.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Nee, deze cirkel zou de code `circle(350, 150, 300)` hebben om deze bij de rechterbovenhoek van het scherm te centreren. De `x` coördinaat is hoe ver naar rechts over het scherm de ellips is, en de `y` coördinaat is hoe ver het naar beneden op het scherm is.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/nl-NL/resources/main.py b/nl-NL/resources/main.py
new file mode 100644
index 000000000..8d0da5672
--- /dev/null
+++ b/nl-NL/resources/main.py
@@ -0,0 +1,61 @@
+#!/bin/python3
+
+# Import library code
+from p5 import *
+from math import *
+from random import randint
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+ if hit_color == outer:
+ print('You hit the outer circle, 50 points!') #Like functions, 'if' statements are indented
+ elif hit_color == inner:
+ print('You hit the inner circle, 200 points!')
+ elif hit_color == bullseye:
+ print('You hit the bullseye, 500 points!')
+ else:
+ print('You missed! No points!')
+
+# The shoot_arrow function goes here
+def shoot_arrow():
+ global hit_color
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_color = get(arrow_x, arrow_y)
+ ellipse(arrow_x, arrow_y, 15, 15)
+
+def setup():
+# Setup your game here
+ size(400, 400) # width and height
+ frame_rate(2)
+
+
+def draw():
+# Things to do in every frame
+ global outer, inner, bullseye
+ sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+ grass = color(149, 212, 122)
+ wood = color(145, 96, 51)
+ outer = color(0, 120, 180)
+ inner = color(210, 60, 60)
+ bullseye = color(220, 200, 0)
+
+ no_stroke()
+ fill(sky)
+ rect(0, 0, 400, 250)
+ fill(grass)
+ rect(0, 250, 400, 150)
+
+ fill(wood)
+ triangle(150, 350, 200, 150, 250, 350)
+ fill(outer)
+ ellipse(200, 200, 170, 170)
+ fill(inner)
+ ellipse(200, 200, 110, 110) #Inner circle
+ fill(bullseye)
+ ellipse(200, 200, 30, 30) #Bullseye
+
+ fill(wood)
+ shoot_arrow()
+# Keep this to run your code
+run()
diff --git a/nl-NL/resources/p5.py b/nl-NL/resources/p5.py
new file mode 100644
index 000000000..fc023ee64
--- /dev/null
+++ b/nl-NL/resources/p5.py
@@ -0,0 +1,135 @@
+# Definitions for compatibility with the p5py processing library
+from processing import *
+import __main__
+
+# Shape
+from processing import rectMode as rect_mode
+from processing import ellipseMode as ellipse_mode
+from processing import strokeWeight as stroke_weight
+from processing import strokeCap as stroke_cap
+from processing import strokeJoin as stroke_join
+from processing import noStroke as no_stroke
+from processing import noFill as no_fill
+
+# Fonts
+from processing import createFont as create_font
+from processing import loadFont as load_font
+from processing import textFont as text_font
+
+# Text
+from processing import textAlign as text_align
+from processing import textLeading as text_leading
+from processing import textMode as text_mode
+from processing import textSize as text_size
+from processing import textWidth as text_width
+
+# Colour
+from processing import blendColor as blend_color
+from processing import lerpColor as lerp_color
+from processing import color as Color
+
+# Images
+from processing import createImage as create_image
+from processing import imageMode as image_mode
+from processing import loadImage as load_image
+from processing import noTint as no_tint
+from processing import requestImage as request_image
+
+# Environment
+from processing import frameRate as frame_rate
+from processing import noCursor as no_cursor
+from processing import noLoop as no_loop
+
+# Transform
+from processing import applyMatrix as apply_matrix
+from processing import popMatrix as pop_matrix
+from processing import printMatrix as print_matrix
+from processing import pushMatrix as push_matrix
+from processing import resetMatrix as reset_matrix
+from processing import rotateX as rotate_x
+from processing import rotateY as rotate_y
+from processing import pushStyle as push_style
+from processing import popStyle as pop_style
+
+from processing import run as main_run
+
+# Keyboard
+
+def mousePressed():
+ if hasattr(__main__, "mouse_pressed"):
+ mouse_pressed = getattr(__main__, "mouse_pressed")
+ mouse_pressed()
+
+def mouseReleased():
+ if hasattr(__main__, "mouse_released"):
+ mouse_released = getattr(__main__, "mouse_released")
+ mouse_released()
+
+__main__.mouse_x = 0
+__main__.mouse_y = 0
+__main__.mouse_px = 0
+__main__.mouse_py = 0
+__main__.frame_count = 0
+__main__.frame_rate = 60
+
+def mouseMoved():
+ __main__.mouse_x = mouse.x
+ __main__.mouse_y = mouse.y
+ __main__.mouse_px = mouse.px
+ __main__.mouse_py = mouse.py
+ if hasattr(__main__, "mouse_moved"):
+ mouse_moved = getattr(__main__, "mouse_moved")
+ mouse_moved()
+
+def mouseDragged():
+ if hasattr(__main__, "mouse_dragged"):
+ mouse_dragged = getattr(__main__, "mouse_dragged")
+ mouse_dragged()
+
+def new_draw():
+ __main__.frame_count = frameCount
+ frameRate = __main__.frame_rate
+ old_draw()
+
+def run():
+ global old_draw
+ old_draw = __main__.draw
+ __main__.draw = new_draw
+ main_run()
+
+def grid():
+ pushMatrix()
+ stroke(200)
+ fill(0)
+ line(0, height/2, width, height/2)
+ line(width/2, 0, width/2, height)
+ x_coords = [0, width/2, width]
+ y_coords = [0, height/2, height]
+
+ for x in x_coords:
+ for y in y_coords:
+ show_coord(x, y)
+
+ popMatrix()
+
+def show_coord(x, y):
+ if x == width:
+ x_align = RIGHT
+ elif x == 0:
+ x_align = LEFT
+ else:
+ x_align = CENTER
+
+ if y == height:
+ y_align = BASELINE
+ elif y == 0:
+ y_align = TOP
+ else:
+ y_align = CENTER
+
+ pushStyle()
+ fill(100)
+ text_align(x_align, y_align)
+ text('(' + str(int(x)) + ', ' + str(int(y)) + ')', x, y)
+ popStyle()
+
diff --git a/nl-NL/step_1.md b/nl-NL/step_1.md
new file mode 100644
index 000000000..7dc835c6a
--- /dev/null
+++ b/nl-NL/step_1.md
@@ -0,0 +1,29 @@
+## Wat ga je maken
+
+Gebruik Python om een doel te tekenen en punten te scoren door het met pijlen te raken.
+
+--- print-only ---
+
+{:width="640px"}
+
+--- /print-only ---
+
+--- no-print ---
+
+
+
+Klik op de knop **Run** hieronder om het spel te starten. Wanneer de stip op het doel 🎯 komt, klik je met de muis (of tik je op je tablet) om je pijl af te schieten.
+
+
+
+
+
+--- /no-print ---
+
+
+
+
+
diff --git a/nl-NL/step_2.md b/nl-NL/step_2.md
new file mode 100644
index 000000000..8d06aced2
--- /dev/null
+++ b/nl-NL/step_2.md
@@ -0,0 +1,37 @@
+## Teken het gras
+
+--- task ---
+
+Open het project [Doelpraktijk-start](https://editor.raspberrypi.org/en/projects/target-practice-starter){:target="_blank"}.
+
+--- /task ---
+
+--- task ---
+
+**Voeg** code toe om een groene rechthoek onder aan het scherm te tekenen.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 17
+line_highlights: 21-22
+---
+def draw(): # Things to do in every frame fill('cyan')
+rect(0, 0, 400, 250)
+fill('lightgreen')
+rect(0, 250, 400, 150)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Voer je project opnieuw uit om de voltooide achtergrond te bekijken.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/nl-NL/step_3.md b/nl-NL/step_3.md
new file mode 100644
index 000000000..e12865386
--- /dev/null
+++ b/nl-NL/step_3.md
@@ -0,0 +1,115 @@
+## Teken je doelwit
+
+
+
+Je spel heeft een doel nodig om pijlen op te schieten.
+
+
+
+{:width="300px"}
+
+
+
+
+### Teken een driehoekige standaard
+
+--- task ---
+
+Stel de vulkleur in op `brown` (bruin).
+
+Teken een driehoek met de x- en y-coördinaten voor elk van de hoeken.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 21
+line_highlights: 23-24
+---
+
+ fill('lightgreen')
+ rect(0, 250, 400, 150)
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Voer je code uit om de standaard voor je doelwit te zien:
+
+{:width="400px"}
+
+--- /task ---
+
+### Teken de doelcirkels
+
+--- task ---
+
+Het grootste deel van het doel is een blauwe **cirkel**.
+
+Stel de vulkleur in op `blue` (blauw).
+
+Teken een cirkel met x- en y-coördinaten voor het midden en de breedte.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 23
+line_highlights: 25-26
+---
+
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+ fill('blue')
+ circle(200, 200, 170)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Voer je code uit om de eerste grote blauwe cirkel te zien.
+
+De blauwe cirkel is na de standaard getekend, dus deze staat vooraan.
+
+{:width="400px"}
+
+--- /task ---
+
+Het doel is gemaakt van cirkels van verschillende grootte met dezelfde centrale coördinaten (200, 200).
+
+--- task ---
+
+**Voeg** gekleurde cirkels toe voor de binnenste en middelste delen van het doel.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 25
+line_highlights: 27-30
+---
+
+ fill('blue')
+ circle(200, 200, 170)
+ fill('red')
+ circle(200, 200, 110) # Draw the inner circle
+ fill('yellow')
+ circle(200, 200, 30) # Draw the middle circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Voer je project uit om het doel met drie gekleurde cirkels te zien.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/nl-NL/step_4.md b/nl-NL/step_4.md
new file mode 100644
index 000000000..c9a2c1692
--- /dev/null
+++ b/nl-NL/step_4.md
@@ -0,0 +1,88 @@
+## Schiet de pijl af
+
+
+
+Voeg een nog kleinere cirkel toe die een pijlt voorstelt.
+
+
+
+{:width="300px"}
+
+
+
+
+### Waar ga je schieten?
+
+--- task ---
+
+Voeg een functie toe om een bruine cirkel te tekenen op de coördinaten `200`, `200`.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 8
+line_highlights: 9-13
+---
+# De schiet_pijl functie komt hier
+def shoot_arrow():
+arrow_x = 200 arrow_y = 200 fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Roep je nieuwe `schiet_pijl()`{:.language-python} functie aan het einde van jouw `draw()`{:.language-python} functie aan.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 33
+line_highlights: 35
+---
+
+ fill('yellow')
+ circle(200, 200, 30)
+ shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Klik op de knop **Run**. Je zou de pijl in het midden moeten zien.
+
+
+
+
+--- /task ---
+
+De pijl moet willekeurig bewegen.
+
+
+--- task ---
+
+Wijzig de `pijl_x`{:.language-python} en `pijl_y`{:.language-python} variabelen om een willekeurig getal tussen 100 en 300 te kiezen.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10-11
+---
+def shoot_arrow(): arrow_x = randint(100, 300) arrow_y = randint(100, 300) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+
+--- task ---
+
+
+**Test:** Klik op de knop **Run**. Je zou de pijl rond het doel moeten zien springen.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/nl-NL/step_5.md b/nl-NL/step_5.md
new file mode 100644
index 000000000..028cabac6
--- /dev/null
+++ b/nl-NL/step_5.md
@@ -0,0 +1,80 @@
+## Welke kleur heb je geraakt?
+
+Vervolgens voeg je wat code toe om de kleur op de plek van de pijl op te halen.
+
+### Haal de kleur op die door de pijl wordt geraakt
+
+--- task ---
+
+Voeg een nieuwe **globale variabele** toe met de naam `raak_kleur`.
+
+Voeg code toe om de kleur in het midden van de pijl `op te halen` en sla deze op in de variabele `raak_kleur`.
+
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10, 13, 14
+---
+def shoot_arrow(): global hit_colour
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300) hit_colour = get(arrow_x, arrow_y).hex print(hit_colour) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+**Tip:** 💡 De `get`-code om de kleur op te halen en op te slaan moet **vóór** de code om de `cirkel` te tekenen staan, anders bewaar je altijd de bruin kleur van de pijl!
+
+--- /task ---
+
+--- task ---
+
+**Test:** Klik op de knop **Run**. Je zou kleuren moeten zien afgedrukt in de **Tekstuitvoer**, in hexadecimaal formaat.
+
+--- /task ---
+
+### Code uitvoeren wanneer de muis wordt ingedrukt
+
+--- task ---
+
+Maak een comment van de regel die de kleur print. Dit betekent dat het niet zal werken.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 13
+line_highlights: 14
+---
+
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Voeg code toe om de doel-emoji 🎯 af te drukken ** wanneer met de muis wordt geklikt**.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 5
+line_highlights: 6-7
+---
+# De mouse_pressed functie komt hier
+def mouse_pressed():
+print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Klik op de knop **Run**. Wanneer je met de muis op het doel klikt, zou je het teken 🎯 moeten zien.
+
+
+
+--- /task ---
+
+--- save ---
\ No newline at end of file
diff --git a/nl-NL/step_6.md b/nl-NL/step_6.md
new file mode 100644
index 000000000..462b52f70
--- /dev/null
+++ b/nl-NL/step_6.md
@@ -0,0 +1,112 @@
+## Punten scoren
+
+
+
+Afhankelijk van waar de pijl terechtkomt, wordt er een score toegekend.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Maak een comment van de regel die het teken 🎯 print, zodat deze niet meer wordt uitgevoerd.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 7
+---
+def mouse_pressed(): # print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Geef een bericht weer **als** de `raak_kleur`{:.language-python} gelijk is aan de `buitenste` cirkelkleur (blauw).
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 8-9
+---
+def mouse_pressed():
+# print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!')
+
+--- /code ---
+
+**Tip:** Als je de kleur van je buitenste cirkel hebt gewijzigd, moet je `'blue'` vervangen door de kleurnaam die je hebt gekozen.
+
+--- /task ---
+
+--- task ---
+
+**Test:** Klik op de knop **Run**. Wacht tot de pijl in de blauwe cirkel terechtkomt en klik vervolgens op de linkermuisknop. 
+
+--- /task ---
+
+`elif`{:.language-python} kan worden gebruikt om meer voorwaarden toe te voegen aan je `if`{:.language-python} statement.
+
+--- task ---
+
+Voeg wat meer code toe om punten te scoren als de pijl op de **binnenste** of **middelste** cirkel terechtkomt.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 10-14
+---
+
+def mouse_pressed(): # print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!') elif hit_colour == Color('red').hex: print('You hit the inner circle, 200 points!') elif hit_colour == Color('yellow').hex: print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Klik op de knop **Run**. Je zou punten moeten scoren wanneer je het doel raakt.
+
+
+
+--- /task ---
+
+### Het doel missen
+
+Er is nog een beslissing die je moet nemen: wat gebeurt er als de pijl niet op een van de doelcirkels landt?
+
+Om deze laatste controle uit te voeren, gebruikt je `else`{:.language-python}.
+
+--- task ---
+
+Voeg code toe aan het `print` commando om een bericht weer te geven wanneer geen van de `if` en `elif` statements waar zijn.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 12
+line_highlights: 14-15
+---
+
+ elif hit_colour == Color('yellow').hex:
+ print('You hit the middle, 500 points!')
+ else:
+ print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Klik op de knop **Run**. Probeer de pijl in het gras of de lucht te laten landen om het gemist bericht te zien.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/nl-NL/step_7.md b/nl-NL/step_7.md
new file mode 100644
index 000000000..2097d0e6f
--- /dev/null
+++ b/nl-NL/step_7.md
@@ -0,0 +1 @@
+## Snelle quiz
\ No newline at end of file
diff --git a/nl-NL/step_8.md b/nl-NL/step_8.md
new file mode 100644
index 000000000..ac37fce08
--- /dev/null
+++ b/nl-NL/step_8.md
@@ -0,0 +1,36 @@
+## Uitdaging
+
+--- challenge ---
+
+
+Je kunt:
+
+
+--- task ---
+
+Een `vierde` en `vijfde` cirkel toevoegen, in nieuwe kleuren, die verschillende punten scoren op basis van hun positie
+
+--- /task ---
+
+--- task ---
+
+Emoji in je geprinte berichten zetten ([hier is een lijst met emojis](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} waaruit je kunt kopiëren)
+
+--- /task ---
+
+--- task ---
+
+Het spel gemakkelijker of moeilijker maken door de waarde van `frame_rate=2` te wijzigen
+
+
+--- /task ---
+
+--- task ---
+
+Voeg een variabele toe om de totaalscore bij te houden en tel er elke keer het juiste aantal punten bij op.
+
+--- /task ---
+
+
+
+--- /challenge ---
diff --git a/nl-NL/step_9.md b/nl-NL/step_9.md
new file mode 100644
index 000000000..c425daec9
--- /dev/null
+++ b/nl-NL/step_9.md
@@ -0,0 +1,21 @@
+## Wat kun je verder nog doen?
+
+Als je het [Inleiding tot Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pad volgt, kun je doorgaan naar het [Raket lanceren](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In dit project maak je een interactieve animatie van een raket die een satelliet in een baan om de aarde lanceert.
+
+\--- print-only ---
+
+{:width="600px"}
+
+\--- /print-only ---
+
+\--- no-print ---
+
+Klik op de knop **Run** om een voorbeeld van dit project te bekijken.
+
+
+
+\--- /no-print ---
+
+Of waarom probeer je geen ander [Python](https://projects.raspberrypi.org/en/projects?software%5B%5D=python) project?
+
diff --git a/or-IN/images/alternative-colours.png b/or-IN/images/alternative-colours.png
new file mode 100644
index 000000000..a688ac942
Binary files /dev/null and b/or-IN/images/alternative-colours.png differ
diff --git a/or-IN/images/animation_bg_erase.gif b/or-IN/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/or-IN/images/animation_bg_erase.gif differ
diff --git a/or-IN/images/animation_no_bg_erase.gif b/or-IN/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/or-IN/images/animation_no_bg_erase.gif differ
diff --git a/or-IN/images/arrow-middle.png b/or-IN/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/or-IN/images/arrow-middle.png differ
diff --git a/or-IN/images/arrow-target.png b/or-IN/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/or-IN/images/arrow-target.png differ
diff --git a/or-IN/images/background.png b/or-IN/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/or-IN/images/background.png differ
diff --git a/or-IN/images/banner.png b/or-IN/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/or-IN/images/banner.png differ
diff --git a/or-IN/images/blue-circle.png b/or-IN/images/blue-circle.png
new file mode 100644
index 000000000..65c8564cc
Binary files /dev/null and b/or-IN/images/blue-circle.png differ
diff --git a/or-IN/images/blue-points.png b/or-IN/images/blue-points.png
new file mode 100644
index 000000000..7c1a8049a
Binary files /dev/null and b/or-IN/images/blue-points.png differ
diff --git a/or-IN/images/bottom-right.png b/or-IN/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/or-IN/images/bottom-right.png differ
diff --git a/or-IN/images/centre.png b/or-IN/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/or-IN/images/centre.png differ
diff --git a/or-IN/images/circle-coords.png b/or-IN/images/circle-coords.png
new file mode 100644
index 000000000..6c0d2c78b
Binary files /dev/null and b/or-IN/images/circle-coords.png differ
diff --git a/or-IN/images/coords_animation.gif b/or-IN/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/or-IN/images/coords_animation.gif differ
diff --git a/or-IN/images/difficulty-setting.png b/or-IN/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/or-IN/images/difficulty-setting.png differ
diff --git a/or-IN/images/fire_arrow.gif b/or-IN/images/fire_arrow.gif
new file mode 100644
index 000000000..c084db578
Binary files /dev/null and b/or-IN/images/fire_arrow.gif differ
diff --git a/or-IN/images/five_circles.png b/or-IN/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/or-IN/images/five_circles.png differ
diff --git a/or-IN/images/green-grass.png b/or-IN/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/or-IN/images/green-grass.png differ
diff --git a/or-IN/images/grey-circle.png b/or-IN/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/or-IN/images/grey-circle.png differ
diff --git a/or-IN/images/grey-points.png b/or-IN/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/or-IN/images/grey-points.png differ
diff --git a/or-IN/images/initial_target.png b/or-IN/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/or-IN/images/initial_target.png differ
diff --git a/or-IN/images/missed-points.png b/or-IN/images/missed-points.png
new file mode 100644
index 000000000..0cd14626c
Binary files /dev/null and b/or-IN/images/missed-points.png differ
diff --git a/or-IN/images/outline-circles.png b/or-IN/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/or-IN/images/outline-circles.png differ
diff --git a/or-IN/images/points-scored.gif b/or-IN/images/points-scored.gif
new file mode 100644
index 000000000..e6ddac2a3
Binary files /dev/null and b/or-IN/images/points-scored.gif differ
diff --git a/or-IN/images/quiz-colour.png b/or-IN/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/or-IN/images/quiz-colour.png differ
diff --git a/or-IN/images/random-side.png b/or-IN/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/or-IN/images/random-side.png differ
diff --git a/or-IN/images/rectangle-diagram.png b/or-IN/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/or-IN/images/rectangle-diagram.png differ
diff --git a/or-IN/images/showcase_rocket.png b/or-IN/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/or-IN/images/showcase_rocket.png differ
diff --git a/or-IN/images/showcase_static.png b/or-IN/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/or-IN/images/showcase_static.png differ
diff --git a/or-IN/images/sky_coords.png b/or-IN/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/or-IN/images/sky_coords.png differ
diff --git a/or-IN/images/sky_stroke.png b/or-IN/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/or-IN/images/sky_stroke.png differ
diff --git a/or-IN/images/stand_coords.png b/or-IN/images/stand_coords.png
new file mode 100644
index 000000000..28e151045
Binary files /dev/null and b/or-IN/images/stand_coords.png differ
diff --git a/or-IN/images/step_4_preview.gif b/or-IN/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/or-IN/images/step_4_preview.gif differ
diff --git a/or-IN/images/step_5_preview.gif b/or-IN/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/or-IN/images/step_5_preview.gif differ
diff --git a/or-IN/images/target-stand.png b/or-IN/images/target-stand.png
new file mode 100644
index 000000000..c64259beb
Binary files /dev/null and b/or-IN/images/target-stand.png differ
diff --git a/or-IN/images/target_area.png b/or-IN/images/target_area.png
new file mode 100644
index 000000000..72d80ba1d
Binary files /dev/null and b/or-IN/images/target_area.png differ
diff --git a/or-IN/images/three-circles.png b/or-IN/images/three-circles.png
new file mode 100644
index 000000000..90a5e243a
Binary files /dev/null and b/or-IN/images/three-circles.png differ
diff --git a/or-IN/images/top-left.png b/or-IN/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/or-IN/images/top-left.png differ
diff --git a/or-IN/images/triangles-coords.png b/or-IN/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/or-IN/images/triangles-coords.png differ
diff --git a/or-IN/images/upgrade-ideas.png b/or-IN/images/upgrade-ideas.png
new file mode 100644
index 000000000..bfda023ae
Binary files /dev/null and b/or-IN/images/upgrade-ideas.png differ
diff --git a/or-IN/images/yellow-points.png b/or-IN/images/yellow-points.png
new file mode 100644
index 000000000..5e702c248
Binary files /dev/null and b/or-IN/images/yellow-points.png differ
diff --git a/or-IN/meta.yml b/or-IN/meta.yml
new file mode 100644
index 000000000..d4420e902
--- /dev/null
+++ b/or-IN/meta.yml
@@ -0,0 +1,36 @@
+---
+title: Target practice
+hero_image: images/banner.png
+description: Use Python to draw a target and score points by hitting it with arrows
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: You will make
+ -
+ title: Create a background
+ -
+ title: Draw your target
+ completion:
+ - engaged
+ -
+ title: Fire your arrow
+ -
+ title: Score points
+ completion:
+ - internal
+ -
+ title: Quick quiz
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: Upgrade your project
+ -
+ title: What next?
diff --git a/or-IN/python-comments-demo.txt b/or-IN/python-comments-demo.txt
new file mode 100644
index 000000000..cb2eb5621
--- /dev/null
+++ b/or-IN/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Setup your game here
+
+width and height of screen
+
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Set the fill color to grass
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the circle fill colour to outer
+
+x, y, width of the circle
+
+Blue
+
+Red
+
+Yellow
+
+Set the circle fill colour to inner
+
+Inner circle - x, y, width of the circle
+
+Set the circle fill colour to middle
+
+Middle circle - x, y, width of the circle
+
+The shoot_arrow function goes here
+
+Store a random number between 100 and 300
+
+Set the arrow to fill colour to wood
+
+Draw a small circle at random coordinates
+
+Get the hit colour
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Save the colour before drawing the arrow
+
+Like functions, 'if' statements are indented
+
+Import library code
+
+Keep this to run your code
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Set the fill color to grass
diff --git a/or-IN/python-comments.txt b/or-IN/python-comments.txt
new file mode 100644
index 000000000..160666a85
--- /dev/null
+++ b/or-IN/python-comments.txt
@@ -0,0 +1,87 @@
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Start x, start y, width, height
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the arrow to fill colour to wood
+
+Set the stand fill colour to grass
+
+Set the circle fill colour to outer
+
+Set the circle fill colour to inner
+
+Set the circle fill colour to middle
+
+x, y, width of the circle
+
+Inner circle - x, y, width of the circle
+
+Middle circle - x, y, width of the circle
+
+Outer circle.200, 200 is the middle of the screen
+
+Blue
+
+Red
+
+Yellow
+
+Stand
+
+Outer circle
+
+Inner circle
+
+Bullseye
+
+The shoot_arrow function goes here
+
+Import library code
+
+Update to random coordinates
+
+Save the colour before drawing the arrow
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Like functions, 'if' statements are indented
+
+Setup your game here
+
+width and height
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Keep this to run your code
+
+Store a random number between 100 and 300
+
+Get the hit colour
+
+Draw a small circle at random coordinates
+
+width and height of screen
diff --git a/or-IN/python-translatable-demo.txt b/or-IN/python-translatable-demo.txt
new file mode 100644
index 000000000..71707d059
--- /dev/null
+++ b/or-IN/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+wood
+
+sky
+
+grass
+
+outer
+
+inner
+
+middle
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
+
+speed
diff --git a/or-IN/python-translatable.txt b/or-IN/python-translatable.txt
new file mode 100644
index 000000000..75c0058cc
--- /dev/null
+++ b/or-IN/python-translatable.txt
@@ -0,0 +1,43 @@
+sky
+
+grass
+
+wood
+
+outer
+
+inner
+
+bullseye
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You hit the bullseye, 500 points!
+
+You missed! No points!
+
+How fast do you want the arrow? slow, medium, fast
+
+You hit red, 200 points!
+
+speed
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
diff --git a/or-IN/quiz1/question_1.md b/or-IN/quiz1/question_1.md
new file mode 100644
index 000000000..7413e69a7
--- /dev/null
+++ b/or-IN/quiz1/question_1.md
@@ -0,0 +1,53 @@
+## Quick quiz
+
+Answer the three questions. There are hints to guide you to the correct answer.
+
+When you have answered each question, click on **Check my answer**.
+
+Have fun!
+
+--- question ---
+---
+legend: Question 1 of 3
+---
+Here is a blue square, what are the RGB values that will create it?
+
+
+
+--- choices ---
+
+- ( ) (0, 0, 0)
+
+ --- feedback ---
+
+Not quite, when all the colour values are set to `0`, the color is **black**.
+
+ --- /feedback ---
+
+- ( ) (255, 0, 0)
+
+ --- feedback ---
+
+Not quite, colours follow the RGB model. This colour has maximum R value and no G or B, so will be **red**.
+
+ --- /feedback ---
+
+- (x) (0, 0, 255)
+
+ --- feedback ---
+
+ That's correct! Colours follow the RGB model. This colour has no R or G, but maximum B, so will be **blue**.
+
+ --- /feedback ---
+
+- ( ) (255, 255, 255)
+
+ --- feedback ---
+
+ Not quite, when all the colour values are set to the `255` maximum, the color is **white**.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/or-IN/quiz1/question_2.md b/or-IN/quiz1/question_2.md
new file mode 100644
index 000000000..cb8b743b2
--- /dev/null
+++ b/or-IN/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legend: Question 2 of 3
+---
+
+In your project, you used `if` , `elif`, and `else` conditions to check which colour the arrow landed on.
+
+In the example below, a variable called `speed` has the number `6` stored in it. When this `if` statement is run, what would be printed in the output area?
+
+--- code ---
+---
+language: python
+---
+speed = 6
+
+if speed == 7: print('Super fast') elif speed == 5: print('Pretty quick') elif speed == 6: print('Very fast') else: print('Speed not recognised!')
+
+--- /code ---
+
+--- choices ---
+
+- (x) `Very fast`
+
+ --- feedback ---
+
+ That's correct! The **speed** variable has been assigned the value `6`, which makes the `speed == 6` condition **True** and prints `Very fast`.
+
+ --- /feedback ---
+
+- ( ) `Speed not recognised!`
+
+ --- feedback ---
+
+ Not quite, look at the value assigned to the **speed** variable.
+
+ --- /feedback ---
+
+- ( ) Nothing gets printed
+
+ --- feedback ---
+
+ Try again, `else` is used as a final option for when all the above conditions are false. Look through the conditions again, are any of the conditions true?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/or-IN/quiz1/question_3.md b/or-IN/quiz1/question_3.md
new file mode 100644
index 000000000..de44b3b7f
--- /dev/null
+++ b/or-IN/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legend: Question 3 of 3
+---
+
+A circle is drawn using the following code:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+Which of the images below show the correct position of this circle in the output area?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the bottom-right corner, the coordinates would need to be the same as the screen size. In this example, the ellipse would be `circle(400, 400, 300)`.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the middle, the coordinates would need to be half of the screen size. In this example, `circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ That's correct! This circle is centred at coordinates (0,0), the top-left corner of the screen.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ No, this circle would have code of `circle(350, 150, 300)` to centre it towards the top-right of the screen. The `x` coordinate is how far across the screen the ellipse is, and the `y` coordinate is how far down the screen it is.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/or-IN/step_1.md b/or-IN/step_1.md
new file mode 100644
index 000000000..21a69d6b9
--- /dev/null
+++ b/or-IN/step_1.md
@@ -0,0 +1,40 @@
+## You will make
+
+Use Python, with the `p5` graphics library, to draw a target and score points by hitting it with arrows.
+
+You will:
+ + Personalise your game with **RGB colours**
+ + Use **conditional statements** (`if`, `elif`, `else`) to make decisions
+ + Position shapes with **x, y coordinates**
+
+--- no-print ---
+
+### Play ▶️
+
+--- task ---
+
+
+
+Click the **Run** button below to start the game. When the dot appears on the target 🎯, click the mouse (or tap on your tablet) to fire your arrow.
+
+Have a few goes. Your score appears in the output area below the target. How does your score change when the arrow lands on the different colours?
+
+
+
+
+--- /task ---
+
+--- /no-print ---
+
+--- print-only ---
+
+
+
+--- /print-only ---
+
+
+The oldest evidence of archery comes from the Sibudu Cave in KwaZulu-Natal, South Africa. Remains of stone and bone arrowheads have been found, which date to between 60,000 and 70,000 years ago.
+
+
+
diff --git a/or-IN/step_2.md b/or-IN/step_2.md
new file mode 100644
index 000000000..b03ac80cf
--- /dev/null
+++ b/or-IN/step_2.md
@@ -0,0 +1,97 @@
+## Create a background
+
+
+
+Your game needs a colourful background.
+
+
+
+{:width="300px"}
+
+
+
+
+### Open the starter project
+
+--- task ---
+
+Open the [Target practice starter](https://trinket.io/python/9973649e5c){:target="_blank"} project.
+
+If you have a Trinket account, you can click on the **Remix** button to save a copy to your **My Trinkets** library.
+
+--- /task ---
+
+### Edit the sky
+
+--- task ---
+
+The starter project has some code already written for you.
+
+Click **'Run'** to see a blue filled rectangle drawn from x=`0`, y=`0` (the top of the screen). This `400` x `250` pixels rectangle is the sky.
+
+{:width="400px"}
+
+**Tip:** 💡 Coordinates start from (x=0, y=0) in the top left corner. This might be different to other coordinate systems you have used.
+
+--- /task ---
+
+--- task ---
+
+The sky has been drawn with a black border (stroke).
+
+To turn the stroke off for all shapes add `no_stroke()` to the `setup` function:
+
+--- code ---
+---
+language: python filename: main.py — setup() line_numbers: true line_number_start: 11
+line_highlights: 15
+---
+def setup():
+# Setup your game here
+ size(400, 400) # width and height of screen frame_rate(2) no_stroke()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Run** your code again and notice 👀 that the border (stroke) has now disappeared.
+
+--- /task ---
+
+### Draw the grass
+
+--- task ---
+
+**Add** code to draw a green rectangle at the bottom of the screen.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 17
+line_highlights: 27, 28
+---
+def draw():
+# Things to do in every frame
+ global wood sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206 grass = color(149, 212, 122) wood = color(145, 96, 51) outer = color(0, 120, 180)
+
+ fill(sky)
+rect(0, 0, 400, 250)
+fill(grass) # Set the fill color to grass rect(0, 250, 400, 150) # x, y, width, height
+
+--- /code ---
+
+**Tip:** 💡 We have added comments to our code, like `# Set the fill color to grass`, to tell you what it does. You don't need to add these comments to your code, but they can be helpful to remind you what lines of code do.
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project again to view the finished background.
+
+{:width="400px"}
+
+--- /task ---
+
diff --git a/or-IN/step_3.md b/or-IN/step_3.md
new file mode 100644
index 000000000..39986aa1f
--- /dev/null
+++ b/or-IN/step_3.md
@@ -0,0 +1,152 @@
+## Draw your target
+
+
+
+Your game needs a target to shoot arrows at.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a triangular stand
+
+--- task ---
+
+Set the fill colour to `wood` (brown).
+
+Draw a triangle using the x and y coordinates for each of the corners.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 27
+line_highlights: 29, 30
+---
+ fill(grass)
+rect(0, 250, 400, 150) fill(wood) # Set the stand fill colour to wood
+triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your code to see the stand for your target:
+
+{:width="400px"}
+
+--- /task ---
+
+### Draw the target circles
+
+--- task ---
+
+The largest part of the target is a blue **circle**.
+
+Set the fill colour to `outer` (blue).
+
+Draw a circle with x and y coordinates for its centre and a width.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 29
+line_highlights: 31, 32
+---
+
+ fill(wood)
+triangle(150, 350, 200, 150, 250, 350)
+fill(outer) # Set the circle fill colour to outer
+circle(200, 200, 170) # x, y, width of the circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the first large blue circle.
+
+The blue circle was drawn after the stand so it is in front:
+
+{:width="400px"}
+
+--- /task ---
+
+--- task ---
+
+👀 Find your colour variables in the `draw` function.
+
+Create two variables called `inner` and `middle` to store colours for the other circles.
+
+The `color` function expects three numbers: one each for red, green, and blue.
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 17
+line_highlights: 24, 25
+---
+def draw():
+# Things to do in every frame global wood sky = color(92, 204, 206)
+grass = color(149, 212, 122)
+wood = color(145, 96, 51)
+outer = color(0, 120, 180) # Blue
+inner = color(210, 60, 60) # Red
+middle = color(220, 200, 0) # Yellow
+
+--- /code ---
+
+--- /task ---
+
+The target is made of different-sized circles with the same centre coordinates (200, 200).
+
+--- task ---
+
+**Add** coloured circles for the inner and middle parts of the target.
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 31
+line_highlights: 35, 36, 37, 38
+---
+ fill(wood)
+triangle(150, 350, 200, 150, 250, 350)
+fill(outer)
+circle(200, 200, 170) fill(inner) # Set the circle fill colour to inner
+circle(200, 200, 110) # Inner circle - x, y, width of the circle
+fill(middle) # Set the circle fill colour to middle
+circle(200, 200, 30) # Middle circle - x, y, width of the circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project to see the target with three coloured circles.
+
+{:width="400px"}
+
+**Debug:** 🐞 Check that you have used the American spelling of 'color' (without a 'u').
+
+--- /task ---
+
+--- task ---
+
+**Choose:** 💭 Change any of the colours.
+
+[[[generic-theory-simple-colours]]]
+
+{:width="400px"}
+
+
+--- /task ---
+
+
+
diff --git a/or-IN/step_4.md b/or-IN/step_4.md
new file mode 100644
index 000000000..995a078e0
--- /dev/null
+++ b/or-IN/step_4.md
@@ -0,0 +1,159 @@
+## Fire your arrow
+
+
+
+When you click or tap, an arrow will fire at the position of a moving target circle.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a target circle every frame
+
+ Computers create the effect of movement by showing lots of images one after another. Each image is called a frame .
+
+
+--- task ---
+
+Define your `shoot_arrow()` function under the comment **# The shoot_arrow function goes here**.
+
+Add code to randomly draw a brown circle within a target area:
+
+
+
+--- code ---
+---
+language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 9
+line_highlights: 10, 11, 12, 13, 14
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = randint(100, 300) # Store a random number between 100 and 300
+arrow_y = randint(100, 300) # Store a random number between 100 and 300
+fill(wood) # Set the arrow to fill colour to wood
+circle(arrow_x, arrow_y, 15) # Draw a small circle at random coordinates
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Go to the `draw` function and call your new `shoot_arrow` function.
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 42
+line_highlights: 44
+---
+ fill(middle)
+circle(200, 200, 30)
+shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run you code and see the arrow appear in a random position each frame.
+
+
+
+The background and target will be drawn over the old arrow. This means you only see one arrow at a time.
+
+--- /task ---
+
+### Get the colour hit by the arrow
+
+The `get()` function returns the colour of a pixel.
+
+
+A pixel, short for picture element, is a single coloured dot within an image. Images are made up of lots of coloured pixels.
+
+
+--- task ---
+
+Add code to `get` the colour of the pixel at the centre of the arrow and store it in the `hit_color` variable.
+
+--- code ---
+---
+language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 9
+line_highlights: 13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300)
+hit_color = get(arrow_x, arrow_y) # Get the hit colour fill(wood)
+circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+**Tip:** 💡 The code to `get` the colour needs to be **before** the code to draw the `circle` otherwise you will always save the wood colour of the arrow!
+
+--- /task ---
+
+### Print the colour when the mouse is pressed
+
+The `p5` library 'listens' for certain events, one of these is the press of the mouse button. When it detects that the button has been pressed, it will run whatever code it has been given in the `mouse_pressed` function.
+
+--- task ---
+
+Define your `mouse_pressed()` function under the comment **# The mouse_pressed function goes here**.
+
+Add code to print the amounts of red, green, and blue in the pixel the arrow lands on.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 8, 9
+---
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+print( red(hit_color), green(hit_color), blue(hit_color) )
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Make `hit_color` a **global variable** so that it can be used throughout your code:
+
+--- code ---
+---
+language: python filename: main.py - shoot_arrow() line_numbers: true line_number_start: 11
+line_highlights: 13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+global hit_color # Can be used in other functions
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300)
+hit_color = get(arrow_x, arrow_y) # Save the colour before drawing the arrow fill(wood)
+circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project.
+
+The project prints the `hit_color` each time the arrow is redrawn.
+
+
+
+**Debug:** 🐞 If you are seeing a message about `hit_color` being 'not defined', then go back to `shoot_arrow()` and check that you have the `global hit_color` line.
+
+**Debug:** 🐞 Check the `print` line really carefully for commas and brackets.
+
+--- /task ---
+
+
diff --git a/or-IN/step_5.md b/or-IN/step_5.md
new file mode 100644
index 000000000..e0660f134
--- /dev/null
+++ b/or-IN/step_5.md
@@ -0,0 +1,169 @@
+## Score points
+
+
+
+Your game will add scores based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Go to the `draw()` function and add `, outer, inner, middle` to the list of global variables.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 26
+line_highlights: 28
+---
+
+def draw():
+# Things to do in every frame
+ global wood, outer, inner, middle
+sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+grass = color(149, 212, 122)
+wood = color(145, 96, 51)
+outer = color(0, 120, 180)
+inner = color(210, 60, 60)
+middle = color(220, 200, 0)
+
+--- /code ---
+
+--- /task ---
+
+
+We use conditions all the time to make decisions. We could say 'if the pencil is blunt, then sharpen it'. Similarly, `if` conditions let us write code that do something different depending on whether a condition is true or false.
+
+
+### Display the scores
+
+--- task ---
+
+Delete ❌ the `print( red(hit_color), green(hit_color), blue(hit_color) )` line of code.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 9
+---
+# The mouse_pressed function goes here
+def mouse_pressed():
+
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+`print` a message `if` the `hit_color` is equal to `outer` 🎯.
+
+Notice 👀 that the code uses two equals signs `==` to mean **equal to**.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 9, 10
+---
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!') # Like functions, 'if' statements are indented
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow on the blue outer circle to see your message.
+
+**Tip:** 💡 `frame_rate()`, in `setup`, controls how fast your game draws. If it's going too fast, set it to a lower number.
+
+
+
+**Debug:** 🐞 Make sure your code matches exactly and you indented the code inside your `if` statement.
+
+--- /task ---
+
+`elif` (else - if) can be used to add more conditions to your `if` statement. These will be read from top to bottom. As soon as a **True** condition is found, it will be actioned. The remaining conditions will be ignored.
+
+--- task ---
+
+Score points if the arrow lands on the `inner` or `middle` circles 🎯:
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 8
+line_highlights: 11, 12, 13, 14
+---
+
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!')
+elif hit_color == inner:
+print('You hit the inner circle, 200 points!')
+elif hit_color == middle:
+print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow on the inner and middle circles to see their messages.
+
+
+
+**Debug:** 🐞 Check your indentation matches the example.
+
+**Debug:** 🐞 If you see a message about `inner` or `middle` being 'not defined', then go back to `draw()` and check that they are on the line that declares variables global.
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles? ❌
+
+To do this last check, you use `else`.
+
+--- task ---
+
+Add code to `print` a message `else` none of the `if` and `elif` statements have been met.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 8
+line_highlights: 15, 16
+---
+
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!')
+elif hit_color == inner:
+print('You hit the inner circle, 200 points!')
+elif hit_color == middle:
+print('You hit the middle, 500 points!')
+else:
+print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow in the grass or sky to see the miss message.
+
+**Choose:** 💭 Change the number of points scored for the different colours if you like.
+
+
+
+--- /task ---
+
diff --git a/or-IN/step_6.md b/or-IN/step_6.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/or-IN/step_6.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/or-IN/step_7.md b/or-IN/step_7.md
new file mode 100644
index 000000000..e479b9649
--- /dev/null
+++ b/or-IN/step_7.md
@@ -0,0 +1,35 @@
+## Upgrade your project
+
+
+
+Personalise and add more to your project. Perhaps you could change the difficulty level or add more circles to your target.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+You could:
+
++ Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position 🟠🟣
++ Put emoji in your print messages ([here's a list of emoji](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from) 🎯
++ Make the game easier or harder by changing the `frame_rate(2)` value 💨
++ Use `input()` to ask the user which difficulty level they want to play at 🗣️
+
+--- /task ---
+
+
+
+--- collapse ---
+---
+title: Completed project
+---
+
+You can view the [completed project here](https://trinket.io/python/f686c82d8a){:target="_blank"}.
+
+--- /collapse ---
+
diff --git a/or-IN/step_8.md b/or-IN/step_8.md
new file mode 100644
index 000000000..867ede7b9
--- /dev/null
+++ b/or-IN/step_8.md
@@ -0,0 +1,31 @@
+## What next?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+--- print-only ---
+
+
+
+--- /print-only ---
+
+--- no-print ---
+
+--- task ---
+
+**Try it:** Your program will adjust the animation based on how much fuel you give it and will succeed or fail in reaching orbit. How much fuel do you want to use to reach orbit but not waste too much extra fuel?
+
+**Tip:** Around 25,000kg should be enough, but experiment with the numbers to see what happens.
+
+
+
+
+
+--- /task ---
+
+--- /no-print ---
+
+If you want to have more fun exploring Python, then you could try out any of [these projects](https://projects.raspberrypi.org/en/projects?software%5B%5D=python).
+
+
+
diff --git a/pl-PL/code/target-practice-solution/main.py b/pl-PL/code/target-practice-solution/main.py
new file mode 100644
index 000000000..c4066550d
--- /dev/null
+++ b/pl-PL/code/target-practice-solution/main.py
@@ -0,0 +1,55 @@
+## Import library code
+
+from p5 import *
+from random import randint
+
+
+# Funkcja mouse_pressed pojawi się tutaj
+def mouse_pressed():
+ # print('🎯')
+ if hit_colour == Color("blue").hex:
+ print("You hit the outer circle, 50 points!")
+ elif hit_colour == Color("red").hex:
+ print("You hit the inner circle, 200 points!")
+ elif hit_colour == Color("yellow").hex:
+ print("You hit the middle, 500 points!")
+ else:
+ print("You missed! No points!")
+
+
+# Funkcja shoot_arrow pojawia się tutaj
+def shoot_arrow():
+ global hit_colour
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ fill("brown")
+ circle(arrow_x, arrow_y, 15)
+
+
+def setup():
+ # Set up your game here
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Rzeczy do zrobienia w każdej klatce
+ fill("cyan")
+ rect(0, 0, 400, 250)
+ fill("lightgreen")
+ rect(0, 250, 400, 150)
+ fill("brown")
+ triangle(150, 350, 200, 150, 250, 350)
+ fill("blue")
+ circle(200, 200, 170)
+ fill("red")
+ circle(200, 200, 110) # Draw the inner circle
+ fill("yellow")
+ circle(200, 200, 30) # Draw the middle circle
+ strzałka_strzałka()
+
+
+# Zatrzymaj to, aby uruchomić swój kod
+run(frame_rate=2)
diff --git a/pl-PL/code/target-practice-solution/project_config.yml b/pl-PL/code/target-practice-solution/project_config.yml
new file mode 100644
index 000000000..16159cfe0
--- /dev/null
+++ b/pl-PL/code/target-practice-solution/project_config.yml
@@ -0,0 +1,3 @@
+name: 'Przykład praktyki docelowej'
+identifier: 'target-practice-solution'
+type: 'python'
diff --git a/pl-PL/code/target-practice-starter/main.py b/pl-PL/code/target-practice-starter/main.py
new file mode 100644
index 000000000..929006b47
--- /dev/null
+++ b/pl-PL/code/target-practice-starter/main.py
@@ -0,0 +1,24 @@
+## Import library code
+from p5 import *
+from random import randint
+
+# Funkcja mouse_pressed pojawi się tutaj
+
+
+# Funkcja shoot_arrow pojawia się tutaj
+
+
+def setup():
+ # Set up your game here
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Rzeczy do zrobienia w każdej klatce
+ fill("cyan")
+ rect(0, 0, 400, 250)
+
+
+# Zatrzymaj to, aby uruchomić swój kod
+run(frame_rate=2)
diff --git a/pl-PL/code/target-practice-starter/project_config.yml b/pl-PL/code/target-practice-starter/project_config.yml
new file mode 100644
index 000000000..7bd406455
--- /dev/null
+++ b/pl-PL/code/target-practice-starter/project_config.yml
@@ -0,0 +1,3 @@
+name: "Praktyka docelowa"
+identifier: 'target-practice-starter'
+type: 'python'
diff --git a/pl-PL/images/alternative-colours.png b/pl-PL/images/alternative-colours.png
new file mode 100644
index 000000000..e630dd54b
Binary files /dev/null and b/pl-PL/images/alternative-colours.png differ
diff --git a/pl-PL/images/animation_bg_erase.gif b/pl-PL/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/pl-PL/images/animation_bg_erase.gif differ
diff --git a/pl-PL/images/animation_no_bg_erase.gif b/pl-PL/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/pl-PL/images/animation_no_bg_erase.gif differ
diff --git a/pl-PL/images/arrow-centre.png b/pl-PL/images/arrow-centre.png
new file mode 100644
index 000000000..14dba17ee
Binary files /dev/null and b/pl-PL/images/arrow-centre.png differ
diff --git a/pl-PL/images/arrow-middle.png b/pl-PL/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/pl-PL/images/arrow-middle.png differ
diff --git a/pl-PL/images/arrow-target.png b/pl-PL/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/pl-PL/images/arrow-target.png differ
diff --git a/pl-PL/images/background.png b/pl-PL/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/pl-PL/images/background.png differ
diff --git a/pl-PL/images/banner.png b/pl-PL/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/pl-PL/images/banner.png differ
diff --git a/pl-PL/images/blue-circle.png b/pl-PL/images/blue-circle.png
new file mode 100644
index 000000000..054b612e8
Binary files /dev/null and b/pl-PL/images/blue-circle.png differ
diff --git a/pl-PL/images/blue-points.png b/pl-PL/images/blue-points.png
new file mode 100644
index 000000000..921b62ff2
Binary files /dev/null and b/pl-PL/images/blue-points.png differ
diff --git a/pl-PL/images/blue_circle_points.gif b/pl-PL/images/blue_circle_points.gif
new file mode 100644
index 000000000..e6308eb07
Binary files /dev/null and b/pl-PL/images/blue_circle_points.gif differ
diff --git a/pl-PL/images/bottom-right.png b/pl-PL/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/pl-PL/images/bottom-right.png differ
diff --git a/pl-PL/images/centre.png b/pl-PL/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/pl-PL/images/centre.png differ
diff --git a/pl-PL/images/circle-coords.png b/pl-PL/images/circle-coords.png
new file mode 100644
index 000000000..a888286e1
Binary files /dev/null and b/pl-PL/images/circle-coords.png differ
diff --git a/pl-PL/images/coords_animation.gif b/pl-PL/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/pl-PL/images/coords_animation.gif differ
diff --git a/pl-PL/images/difficulty-setting.png b/pl-PL/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/pl-PL/images/difficulty-setting.png differ
diff --git a/pl-PL/images/fire_arrow.gif b/pl-PL/images/fire_arrow.gif
new file mode 100644
index 000000000..924ba34af
Binary files /dev/null and b/pl-PL/images/fire_arrow.gif differ
diff --git a/pl-PL/images/five_circles.png b/pl-PL/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/pl-PL/images/five_circles.png differ
diff --git a/pl-PL/images/green-grass.png b/pl-PL/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/pl-PL/images/green-grass.png differ
diff --git a/pl-PL/images/grey-circle.png b/pl-PL/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/pl-PL/images/grey-circle.png differ
diff --git a/pl-PL/images/grey-points.png b/pl-PL/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/pl-PL/images/grey-points.png differ
diff --git a/pl-PL/images/initial_target.png b/pl-PL/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/pl-PL/images/initial_target.png differ
diff --git a/pl-PL/images/missed-points.png b/pl-PL/images/missed-points.png
new file mode 100644
index 000000000..0cd14626c
Binary files /dev/null and b/pl-PL/images/missed-points.png differ
diff --git a/pl-PL/images/missed_no_points.gif b/pl-PL/images/missed_no_points.gif
new file mode 100644
index 000000000..212ca30e4
Binary files /dev/null and b/pl-PL/images/missed_no_points.gif differ
diff --git a/pl-PL/images/outline-circles.png b/pl-PL/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/pl-PL/images/outline-circles.png differ
diff --git a/pl-PL/images/points-scored.gif b/pl-PL/images/points-scored.gif
new file mode 100644
index 000000000..3fbe161a8
Binary files /dev/null and b/pl-PL/images/points-scored.gif differ
diff --git a/pl-PL/images/quiz-colour.png b/pl-PL/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/pl-PL/images/quiz-colour.png differ
diff --git a/pl-PL/images/random-side.png b/pl-PL/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/pl-PL/images/random-side.png differ
diff --git a/pl-PL/images/rectangle-diagram.png b/pl-PL/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/pl-PL/images/rectangle-diagram.png differ
diff --git a/pl-PL/images/showcase_rocket.png b/pl-PL/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/pl-PL/images/showcase_rocket.png differ
diff --git a/pl-PL/images/showcase_static.png b/pl-PL/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/pl-PL/images/showcase_static.png differ
diff --git a/pl-PL/images/sky_coords.png b/pl-PL/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/pl-PL/images/sky_coords.png differ
diff --git a/pl-PL/images/sky_stroke.png b/pl-PL/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/pl-PL/images/sky_stroke.png differ
diff --git a/pl-PL/images/stand_coords.png b/pl-PL/images/stand_coords.png
new file mode 100644
index 000000000..2002bae5f
Binary files /dev/null and b/pl-PL/images/stand_coords.png differ
diff --git a/pl-PL/images/step_4_preview.gif b/pl-PL/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/pl-PL/images/step_4_preview.gif differ
diff --git a/pl-PL/images/step_5_preview.gif b/pl-PL/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/pl-PL/images/step_5_preview.gif differ
diff --git a/pl-PL/images/target-stand.png b/pl-PL/images/target-stand.png
new file mode 100644
index 000000000..c65d89363
Binary files /dev/null and b/pl-PL/images/target-stand.png differ
diff --git a/pl-PL/images/target_area.png b/pl-PL/images/target_area.png
new file mode 100644
index 000000000..1e5c72120
Binary files /dev/null and b/pl-PL/images/target_area.png differ
diff --git a/pl-PL/images/target_printed.gif b/pl-PL/images/target_printed.gif
new file mode 100644
index 000000000..b29a244fe
Binary files /dev/null and b/pl-PL/images/target_printed.gif differ
diff --git a/pl-PL/images/three-circles.png b/pl-PL/images/three-circles.png
new file mode 100644
index 000000000..13a8dd8ed
Binary files /dev/null and b/pl-PL/images/three-circles.png differ
diff --git a/pl-PL/images/top-left.png b/pl-PL/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/pl-PL/images/top-left.png differ
diff --git a/pl-PL/images/triangles-coords.png b/pl-PL/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/pl-PL/images/triangles-coords.png differ
diff --git a/pl-PL/images/upgrade-ideas.png b/pl-PL/images/upgrade-ideas.png
new file mode 100644
index 000000000..083f82320
Binary files /dev/null and b/pl-PL/images/upgrade-ideas.png differ
diff --git a/pl-PL/images/yellow-points.png b/pl-PL/images/yellow-points.png
new file mode 100644
index 000000000..0c461812c
Binary files /dev/null and b/pl-PL/images/yellow-points.png differ
diff --git a/pl-PL/meta.yml b/pl-PL/meta.yml
new file mode 100644
index 000000000..bfc4b64f6
--- /dev/null
+++ b/pl-PL/meta.yml
@@ -0,0 +1,41 @@
+---
+title: Praktyka docelowa
+hero_image: images/banner.png
+description: Użyj Pythona, aby narysować cel i zdobywać punkty, uderzając go strzałkami
+meta_title: Projekty kodowania w Pythonie dla dzieci i młodzieży | Praktyka docelowa
+meta_description: Naucz się języka Python z projektami programistycznymi Fundacji Raspberry Pi dla dzieci i młodzieży. Użyj Pythona, aby narysować cel i zdobywać punkty, uderzając go strzałkami.
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: What you will make
+ -
+ title: Draw the grass
+ -
+ title: Narysuj swój cel
+ completion:
+ - engaged
+ -
+ title: Add an arrow
+ -
+ title: What colour did you hit?
+ -
+ title: Score points
+ completion:
+ - internal
+ -
+ title: Quick quiz
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: Challenge
+ challenge: true
+ -
+ title: What can you do now?
diff --git a/pl-PL/python-comments-demo.txt b/pl-PL/python-comments-demo.txt
new file mode 100644
index 000000000..61c071425
--- /dev/null
+++ b/pl-PL/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Tutaj skonfiguruj swoją grę
+
+szerokość i wysokość ekranu
+
+Rzeczy do zrobienia w każdej klatce
+
+Czerwony = 92, zielony = 204, niebieski = 206
+
+Ustaw kolor wypełnienia na trawę
+
+x, y, szerokość, wysokość
+
+Ustaw kolor wypełnienia stojaka na drewno
+
+Ustaw kolor wypełnienia okręgu na zewnętrzny
+
+x, y, szerokość okręgu
+
+Niebieski
+
+Czerwony
+
+Żółty
+
+Ustaw kolor wypełnienia okręgu na wewnętrzny
+
+Wewnętrzny okrąg - x, y, szerokość okręgu
+
+Ustaw kolor wypełnienia okręgu na środkowy
+
+Środkowe koło - x, y, szerokość okręgu
+
+Pojawi się tutaj funkcja shoot_arrow
+
+Przechowuj losową liczbę z zakresu od 100 do 300
+
+Ustaw strzałkę, aby wypełnić kolor na drewno
+
+Narysuj małe kółko o losowych współrzędnych
+
+Zdobądź kolor uderzenia
+
+Tutaj pojawi się funkcja Mouse_pressed
+
+Może być używany w innych funkcjach
+
+Zapisz kolor przed narysowaniem strzałki
+
+Podobnie jak funkcje, polecenia „jeśli” są wcięte
+
+Importuj kod biblioteki
+
+Zachowaj to, aby uruchomić swój kod
+
+Definicje zgodności z biblioteką przetwarzania p5py
+
+Kształt
+
+Czcionki
+
+Tekst
+
+Kolor
+
+Obrazy
+
+Środowisko
+
+Przekształć
+
+Klawiatura
+
+Ustaw kolor wypełnienia na trawę
diff --git a/pl-PL/python-comments.txt b/pl-PL/python-comments.txt
new file mode 100644
index 000000000..d356f900b
--- /dev/null
+++ b/pl-PL/python-comments.txt
@@ -0,0 +1,27 @@
+Rzeczy do zrobienia w każdej klatce
+
+Draw the inner circle
+
+Draw the middle circle
+
+Pojawi się tutaj funkcja shoot_arrow
+
+Tutaj pojawi się funkcja Mouse_pressed
+
+Trafiłeś w zewnętrzne koło, 50 punktów!
+
+Trafiłeś w wewnętrzne koło, 200 punktów!
+
+Trafiłeś na środek, 500 punktów!
+
+You hit the middle, 500 points!
+
+Przegapiłeś! Brak punktów!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
\ No newline at end of file
diff --git a/pl-PL/python-translatable-demo.txt b/pl-PL/python-translatable-demo.txt
new file mode 100644
index 000000000..a40a5f14f
--- /dev/null
+++ b/pl-PL/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+drewno
+
+niebo
+
+trawa
+
+zewnętrzny
+
+wewnętrzny
+
+środkowy
+
+strzałka_strzałka
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+Trafiłeś w zewnętrzne koło, 50 punktów!
+
+Trafiłeś w wewnętrzne koło, 200 punktów!
+
+Trafiłeś na środek, 500 punktów!
+
+Przegapiłeś! Brak punktów!
+
+Super szybki
+
+Dość szybko
+
+Bardzo szybko
+
+Prędkość nie rozpoznana!
+
+prędkość
diff --git a/pl-PL/python-translatable.txt b/pl-PL/python-translatable.txt
new file mode 100644
index 000000000..ec359d075
--- /dev/null
+++ b/pl-PL/python-translatable.txt
@@ -0,0 +1,9 @@
+strzałka_strzałka
+
+arrow_x
+
+arrow_y
+
+hit_colour
+
+speed
\ No newline at end of file
diff --git a/pl-PL/quiz1/question_1.md b/pl-PL/quiz1/question_1.md
new file mode 100644
index 000000000..b52c1ec43
--- /dev/null
+++ b/pl-PL/quiz1/question_1.md
@@ -0,0 +1,60 @@
+## Szybki quiz
+
+Odpowiedz na trzy pytania. Istnieją wskazówki, które poprowadzą Cię do prawidłowej odpowiedzi.
+
+Po udzieleniu odpowiedzi na każde pytanie kliknij ** Sprawdź moją odpowiedź **.
+
+Miłej zabawy!
+
+--- question ---
+---
+legend: Pytanie 1 z 3
+---
+In your project you added `randint(100, 300)` to your `shoot_arrow()` function. What does `randint(100, 300)` do?
+
+--- code ---
+---
+language: python
+---
+
+def shoot_arrow(): global hit_colour arrow_x = randint(100, 300) arrow_y = randint(100, 300)
+
+--- /code ---
+
+--- choices ---
+
+- (x) It chooses a random whole number between 100 and 300.
+
+ --- feedback ---
+
+Zgadza się. This chooses a random x coordinate for your arrow.
+
+ --- /feedback ---
+
+- ( ) It makes the arrow move randomly around the screen.
+
+ --- feedback ---
+
+Nie do końca. This code part of how the arrow moves randomly but you need other code too to achieve that goal.
+
+ --- /feedback ---
+
+- () It gets the colour that was hit by the arrow.
+
+ --- feedback ---
+
+ Nie do końca. The get() function would be used to get the colour.
+
+ --- /feedback ---
+
+- ( ) It draws a circle of a random size.
+
+ --- feedback ---
+
+ Nie do końca. Funkcja circle() zostanie użyta do narysowania koła.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/pl-PL/quiz1/question_2.md b/pl-PL/quiz1/question_2.md
new file mode 100644
index 000000000..19b4352e1
--- /dev/null
+++ b/pl-PL/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legend: Pytanie 2 z 3
+---
+
+W swoim projekcie użyłeś warunków ` ` , ` ` i ` ` , aby sprawdzić, na którym kolorze wylądowała strzałka.
+
+W poniższym przykładzie zmienna o nazwie ` ` ma zapisaną w niej liczbę ` `. Co zostanie wydrukowane w obszarze wydruku po uruchomieniu polecenia ` `?
+
+--- code ---
+---
+language: python
+---
+prędkość = 6
+
+if prędkość == 7: Print('Super szybki') prędkość elif == 5: Print('dość szybko') prędkość elif == 6: Print('bardzo szybko') inaczej: Print('Prędkość nierozpoznana!')
+
+--- /code ---
+
+--- choices ---
+
+- (X) ` bardzo szybki `
+
+ --- feedback ---
+
+ Zgadza się! Zmienna ** ** została przypisana wartość ` 6 `, która sprawia, że ` speed == 6 ` warunek ** ** i drukuje ` bardzo szybko `.
+
+ --- /feedback ---
+
+- ( ) Prędkość ` nie została rozpoznana!`
+
+ --- feedback ---
+
+ Nie do końca, spójrz na wartość przypisaną do zmiennej ** **.
+
+ --- /feedback ---
+
+- ( ) Nic nie zostanie wydrukowane
+
+ --- feedback ---
+
+ Spróbuj ponownie, ` ` jest używany jako ostateczna opcja, gdy wszystkie powyższe warunki są fałszywe. Sprawdź ponownie warunki, czy któryś z warunków jest prawdziwy?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/pl-PL/quiz1/question_3.md b/pl-PL/quiz1/question_3.md
new file mode 100644
index 000000000..e37f22706
--- /dev/null
+++ b/pl-PL/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legend: Pytanie 3 z 3
+---
+
+Okrąg jest rysowany przy użyciu następującego kodu:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+Które z poniższych obrazów pokazują prawidłową pozycję tego okręgu w obszarze wyjściowym?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Nie do końca, aby wyśrodkować okrąg w prawym dolnym rogu, współrzędne musiałyby być takie same jak rozmiar ekranu. W tym przykładzie elipsa byłaby ` circle(400, 400, 300)`.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Nie do końca, aby wyśrodkować okrąg na środku, współrzędne musiałyby być o połowę mniejsze od rozmiaru ekranu. W tym przykładzie ` circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ Zgadza się! Ten okrąg jest wyśrodkowany w współrzędnych (0,0), lewym górnym rogu ekranu.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Nie, to koło będzie miało kod ` circle(350, 150, 300)`, który wyśrodkuje go w kierunku prawego górnego rogu ekranu. Współrzędna ` ` określa odległość elipsy na ekranie, a współrzędna `.` określa odległość ekranu od niego do dołu.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/pl-PL/resources/main.py b/pl-PL/resources/main.py
new file mode 100644
index 000000000..8d0da5672
--- /dev/null
+++ b/pl-PL/resources/main.py
@@ -0,0 +1,61 @@
+#!/bin/python3
+
+# Import library code
+from p5 import *
+from math import *
+from random import randint
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+ if hit_color == outer:
+ print('You hit the outer circle, 50 points!') #Like functions, 'if' statements are indented
+ elif hit_color == inner:
+ print('You hit the inner circle, 200 points!')
+ elif hit_color == bullseye:
+ print('You hit the bullseye, 500 points!')
+ else:
+ print('You missed! No points!')
+
+# The shoot_arrow function goes here
+def shoot_arrow():
+ global hit_color
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_color = get(arrow_x, arrow_y)
+ ellipse(arrow_x, arrow_y, 15, 15)
+
+def setup():
+# Setup your game here
+ size(400, 400) # width and height
+ frame_rate(2)
+
+
+def draw():
+# Things to do in every frame
+ global outer, inner, bullseye
+ sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+ grass = color(149, 212, 122)
+ wood = color(145, 96, 51)
+ outer = color(0, 120, 180)
+ inner = color(210, 60, 60)
+ bullseye = color(220, 200, 0)
+
+ no_stroke()
+ fill(sky)
+ rect(0, 0, 400, 250)
+ fill(grass)
+ rect(0, 250, 400, 150)
+
+ fill(wood)
+ triangle(150, 350, 200, 150, 250, 350)
+ fill(outer)
+ ellipse(200, 200, 170, 170)
+ fill(inner)
+ ellipse(200, 200, 110, 110) #Inner circle
+ fill(bullseye)
+ ellipse(200, 200, 30, 30) #Bullseye
+
+ fill(wood)
+ shoot_arrow()
+# Keep this to run your code
+run()
diff --git a/pl-PL/resources/p5.py b/pl-PL/resources/p5.py
new file mode 100644
index 000000000..fc023ee64
--- /dev/null
+++ b/pl-PL/resources/p5.py
@@ -0,0 +1,135 @@
+# Definitions for compatibility with the p5py processing library
+from processing import *
+import __main__
+
+# Shape
+from processing import rectMode as rect_mode
+from processing import ellipseMode as ellipse_mode
+from processing import strokeWeight as stroke_weight
+from processing import strokeCap as stroke_cap
+from processing import strokeJoin as stroke_join
+from processing import noStroke as no_stroke
+from processing import noFill as no_fill
+
+# Fonts
+from processing import createFont as create_font
+from processing import loadFont as load_font
+from processing import textFont as text_font
+
+# Text
+from processing import textAlign as text_align
+from processing import textLeading as text_leading
+from processing import textMode as text_mode
+from processing import textSize as text_size
+from processing import textWidth as text_width
+
+# Colour
+from processing import blendColor as blend_color
+from processing import lerpColor as lerp_color
+from processing import color as Color
+
+# Images
+from processing import createImage as create_image
+from processing import imageMode as image_mode
+from processing import loadImage as load_image
+from processing import noTint as no_tint
+from processing import requestImage as request_image
+
+# Environment
+from processing import frameRate as frame_rate
+from processing import noCursor as no_cursor
+from processing import noLoop as no_loop
+
+# Transform
+from processing import applyMatrix as apply_matrix
+from processing import popMatrix as pop_matrix
+from processing import printMatrix as print_matrix
+from processing import pushMatrix as push_matrix
+from processing import resetMatrix as reset_matrix
+from processing import rotateX as rotate_x
+from processing import rotateY as rotate_y
+from processing import pushStyle as push_style
+from processing import popStyle as pop_style
+
+from processing import run as main_run
+
+# Keyboard
+
+def mousePressed():
+ if hasattr(__main__, "mouse_pressed"):
+ mouse_pressed = getattr(__main__, "mouse_pressed")
+ mouse_pressed()
+
+def mouseReleased():
+ if hasattr(__main__, "mouse_released"):
+ mouse_released = getattr(__main__, "mouse_released")
+ mouse_released()
+
+__main__.mouse_x = 0
+__main__.mouse_y = 0
+__main__.mouse_px = 0
+__main__.mouse_py = 0
+__main__.frame_count = 0
+__main__.frame_rate = 60
+
+def mouseMoved():
+ __main__.mouse_x = mouse.x
+ __main__.mouse_y = mouse.y
+ __main__.mouse_px = mouse.px
+ __main__.mouse_py = mouse.py
+ if hasattr(__main__, "mouse_moved"):
+ mouse_moved = getattr(__main__, "mouse_moved")
+ mouse_moved()
+
+def mouseDragged():
+ if hasattr(__main__, "mouse_dragged"):
+ mouse_dragged = getattr(__main__, "mouse_dragged")
+ mouse_dragged()
+
+def new_draw():
+ __main__.frame_count = frameCount
+ frameRate = __main__.frame_rate
+ old_draw()
+
+def run():
+ global old_draw
+ old_draw = __main__.draw
+ __main__.draw = new_draw
+ main_run()
+
+def grid():
+ pushMatrix()
+ stroke(200)
+ fill(0)
+ line(0, height/2, width, height/2)
+ line(width/2, 0, width/2, height)
+ x_coords = [0, width/2, width]
+ y_coords = [0, height/2, height]
+
+ for x in x_coords:
+ for y in y_coords:
+ show_coord(x, y)
+
+ popMatrix()
+
+def show_coord(x, y):
+ if x == width:
+ x_align = RIGHT
+ elif x == 0:
+ x_align = LEFT
+ else:
+ x_align = CENTER
+
+ if y == height:
+ y_align = BASELINE
+ elif y == 0:
+ y_align = TOP
+ else:
+ y_align = CENTER
+
+ pushStyle()
+ fill(100)
+ text_align(x_align, y_align)
+ text('(' + str(int(x)) + ', ' + str(int(y)) + ')', x, y)
+ popStyle()
+
diff --git a/pl-PL/step_1.md b/pl-PL/step_1.md
new file mode 100644
index 000000000..1d7d0114e
--- /dev/null
+++ b/pl-PL/step_1.md
@@ -0,0 +1,29 @@
+## What you will make
+
+Use Python to draw a target and score points by hitting it with arrows.
+
+--- print-only ---
+
+{:width="640px"}
+
+--- /print-only ---
+
+--- no-print ---
+
+
+
+Kliknij przycisk **Run** poniżej, aby rozpocząć grę. Kiedy kropka pojawi się na obiekcie docelowym ?, kliknij mysz (lub stuknij w tablet), aby wystrzelić strzałkę.
+
+
+
+
+
+--- /no-print ---
+
+
+
+
+
diff --git a/pl-PL/step_2.md b/pl-PL/step_2.md
new file mode 100644
index 000000000..99541f68f
--- /dev/null
+++ b/pl-PL/step_2.md
@@ -0,0 +1,37 @@
+## Narysuj trawę
+
+--- task ---
+
+Otwórz projekt [ Praktyka docelowa ](https://editor.raspberrypi.org/en/projects/target-practice-starter){:target="_blank"}.
+
+--- /task ---
+
+--- task ---
+
+**Add** code to draw a green rectangle at the bottom of the screen to represent the grass.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 17
+line_highlights: 21-22
+---
+def draw(): # Things to do in every frame fill('cyan')
+rect(0, 0, 400, 250)
+fill('lightgreen')
+rect(0, 250, 400, 150)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your project to view the background.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/pl-PL/step_3.md b/pl-PL/step_3.md
new file mode 100644
index 000000000..b83508907
--- /dev/null
+++ b/pl-PL/step_3.md
@@ -0,0 +1,115 @@
+## Narysuj swój cel
+
+
+
+Twoja gra potrzebuje celu do strzelania strzałkami.
+
+
+
+{:width="300px"}
+
+
+
+
+### Narysuj stojak trójkątny
+
+--- task ---
+
+Set the fill colour to `brown`.
+
+Narysuj trójkąt używając współrzędnych x i y dla każdego z rogów.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 21
+line_highlights: 23-24
+---
+
+ fill('lightgreen')
+ rect(0, 250, 400, 150)
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the stand for your target:
+
+{:width="400px"}
+
+--- /task ---
+
+### Narysuj docelowe okręgi
+
+--- task ---
+
+Największa część celu to niebieski okrąg ** **.
+
+Ustaw kolor wypełnienia na ` `.
+
+Narysuj okrąg ze współrzędnymi x i y dla jego środka i szerokości.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 23
+line_highlights: 25-26
+---
+
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+ fill('blue')
+ circle(200, 200, 170)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+** Test:** Uruchom swój kod, aby zobaczyć pierwsze duże niebieskie kółko.
+
+Niebieskie kółko zostało narysowane za stojakiem, więc jest z przodu.
+
+{:width="400px"}
+
+--- /task ---
+
+Cel składa się z okręgów o różnych rozmiarach o tych samych współrzędnych środka (200, 200).
+
+--- task ---
+
+** ** kolorowe kółka dla wewnętrznej i środkowej części celu.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 25
+line_highlights: 27-30
+---
+
+ fill('blue')
+ circle(200, 200, 170)
+ fill('red')
+ circle(200, 200, 110) # Draw the inner circle
+ fill('yellow')
+ circle(200, 200, 30) # Draw the middle circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your project to see the target with three coloured circles.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/pl-PL/step_4.md b/pl-PL/step_4.md
new file mode 100644
index 000000000..99919f193
--- /dev/null
+++ b/pl-PL/step_4.md
@@ -0,0 +1,88 @@
+## Add an arrow
+
+
+
+Add an even smaller circle to represent an arrow.
+
+
+
+{:width="300px"}
+
+
+
+
+### Where will you shoot?
+
+--- task ---
+
+Add a function to draw a brown circle at coordinates `200`, `200`.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 8
+line_highlights: 9-13
+---
+# Pojawi się tutaj funkcja shoot_arrow
+def shoot_arrow():
+arrow_x = 200 arrow_y = 200 fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Call your new `shoot_arrow()`{:.language-python} function at the end of your `draw()`{:.language-python} function.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 33
+line_highlights: 35
+---
+
+ fill('yellow')
+ circle(200, 200, 30)
+ shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see the arrow in the centre.
+
+
+
+
+--- /task ---
+
+The arrow needs to move randomly.
+
+
+--- task ---
+
+Change the `arrow_x`{:.language-python} and `arrow_y`{:.language-python} variables to choose a random number between 100 and 300.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10-11
+---
+def shoot_arrow(): arrow_x = randint(100, 300) arrow_y = randint(100, 300) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+
+--- task ---
+
+
+**Test:** Click the **Run** button. You should see the arrow jump around the target.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/pl-PL/step_5.md b/pl-PL/step_5.md
new file mode 100644
index 000000000..69d6e03fe
--- /dev/null
+++ b/pl-PL/step_5.md
@@ -0,0 +1,80 @@
+## What colour did you hit?
+
+Next, you will add some code to get the colour at the location of the arrow.
+
+### Get the colour hit by the arrow
+
+--- task ---
+
+Add a new **global variable** called `hit_colour`.
+
+Add code to `get` the colour at the centre of the arrow ,and store it in the `hit_colour` variable.
+
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10, 13, 14
+---
+def shoot_arrow(): global hit_colour
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300) hit_colour = get(arrow_x, arrow_y).hex print(hit_colour) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+**Tip:** The code to `get` the colour needs to be **before** the code to draw the `circle` otherwise you will always save the brown colour of the arrow!
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see colours being printed in the **Text output**, in hexadecimal format.
+
+--- /task ---
+
+### Run code when the mouse is pressed
+
+--- task ---
+
+Comment out the line that prints the colour. This means it will not run.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 13
+line_highlights: 14
+---
+
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Add code to print the target emoji 🎯 **when the mouse is clicked**.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 5
+line_highlights: 6-7
+---
+# Tutaj pojawi się funkcja Mouse_pressed
+def mouse_pressed():
+print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see the 🎯 character printed when you click the mouse on the target.
+
+
+
+--- /task ---
+
+--- save ---
\ No newline at end of file
diff --git a/pl-PL/step_6.md b/pl-PL/step_6.md
new file mode 100644
index 000000000..9449522ab
--- /dev/null
+++ b/pl-PL/step_6.md
@@ -0,0 +1,112 @@
+## Score points
+
+
+
+Add a score based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Comment out the line to print the 🎯 character so that it no longer runs.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 7
+---
+def mouse_pressed(): # print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Display a message **if** the `hit_colour`{:.language-python} is equal to the `outer` circle colour (blue).
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 8-9
+---
+def mouse_pressed():
+# print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!')
+
+--- /code ---
+
+**Tip:** If you changed the colour of your outer circle then you will need to replace `blue` with the colour name that you have chosen.
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Wait for the arrow to land on the blue circle, then click your left mouse button. 
+
+--- /task ---
+
+`elif`{:.language-python} can be used to add more conditions to your `if`{:.language-python} statement.
+
+--- task ---
+
+Add some more code to score points if the arrow lands on the **inner** or **middle** circles.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 10-14
+---
+
+def mouse_pressed(): # print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!') elif hit_colour == Color('red').hex: print('You hit the inner circle, 200 points!') elif hit_colour == Color('yellow').hex: print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button.You should score points whenever you hit the target.
+
+
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles?
+
+To do this last check, you use `else`{:.language-python}.
+
+--- task ---
+
+Add code to `print` a message when none of the `if` and `elif` statements are true.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 12
+line_highlights: 14-15
+---
+
+ elif hit_colour == Color('yellow').hex:
+ print('You hit the middle, 500 points!')
+ else:
+ print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Fire the arrow in the grass or sky to see the miss message.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/pl-PL/step_7.md b/pl-PL/step_7.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/pl-PL/step_7.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/pl-PL/step_8.md b/pl-PL/step_8.md
new file mode 100644
index 000000000..910635d28
--- /dev/null
+++ b/pl-PL/step_8.md
@@ -0,0 +1,36 @@
+## Challenge
+
+--- challenge ---
+
+
+You could:
+
+
+--- task ---
+
+Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position
+
+--- /task ---
+
+--- task ---
+
+Put emojis in your print messages ([here's a list of emojis](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from)
+
+--- /task ---
+
+--- task ---
+
+Make the game easier or harder by changing the `frame_rate=2` value
+
+
+--- /task ---
+
+--- task ---
+
+Add a variable to keep track of the total score, adding the correct number of points to it each time.
+
+--- /task ---
+
+
+
+--- /challenge ---
diff --git a/pl-PL/step_9.md b/pl-PL/step_9.md
new file mode 100644
index 000000000..86edf4a89
--- /dev/null
+++ b/pl-PL/step_9.md
@@ -0,0 +1,21 @@
+## What can you do now?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+\--- print-only ---
+
+{:width="600px"}
+
+\--- /print-only ---
+
+\--- no-print ---
+
+Click the **Run** button to view an example of this project.
+
+
+
+\--- /no-print ---
+
+Or, why not try out another [Python](https://projects.raspberrypi.org/en/projects?software%5B%5D=python) project.
+
diff --git a/pt-BR/code/target-practice-solution/main.py b/pt-BR/code/target-practice-solution/main.py
new file mode 100644
index 000000000..4701c054a
--- /dev/null
+++ b/pt-BR/code/target-practice-solution/main.py
@@ -0,0 +1,55 @@
+# Importa código da biblioteca!
+
+from p5 import *
+from random import randint
+
+
+# A função mouse_pressed vai aqui
+def mouse_pressed():
+ # print('🎯')
+ if cor_acerto == Color('blue').hex: # Como as funções, as instruções 'if' são indentadas
+ print('Você acertou o círculo externo, 50 pontos!')
+ elif cor_acerto == Color('red').hex:
+ print('Você acertou o círculo interno, 200 pontos!')
+ elif cor_acerto == Color('yellow').hex:
+ print('Você acertou o meio, 500 pontos!')
+ else:
+ print('Você errou! Sem pontos!')
+
+
+# A função atirar_flecha vai aqui
+def atirar_flecha():
+ global hit_colour
+ flecha_x = randint(100, 300) # Armazena um número aleatório entre 100 e 300
+ flecha_y = randint(100, 300) # Armazena um número aleatório entre 100 e 300
+ cor_acerto = get(flecha_x, flecha_y).hex # Obtém a cor acertada
+ # print(hit_colour)
+ fill('sienna') # Defina a cor de preenchimento da flecha como marrom
+ circle(flecha_x, flecha_y, 15) # Desenha um pequeno círculo em coordenadas aleatórias
+
+
+def setup():
+ # Configure seu jogo aqui
+ size(400, 400) # largura e altura
+ no_stroke()
+
+
+def draw():
+ # Coisas para fazer em cada quadro
+ fill('cyan')
+ rect(0, 0, 400, 250) # Céu
+ fill('lightgreen')
+ rect(0, 250, 400, 150) # Grama
+ fill('sienna')
+ triangle(150, 350, 200, 150, 250, 350) # Suporte
+ fill('blue')
+ circle(200, 200, 170) # Círculo externo
+ fill('red')
+ circle(200, 200, 110) # Círculo interno
+ fill('yellow')
+ circle(200, 200, 30) # Círculo do meio
+ atirar_flecha()
+
+
+# Mantenha isto para executar seu código
+run(frame_rate=2)
diff --git a/pt-BR/code/target-practice-solution/project_config.yml b/pt-BR/code/target-practice-solution/project_config.yml
new file mode 100644
index 000000000..a2a3181ad
--- /dev/null
+++ b/pt-BR/code/target-practice-solution/project_config.yml
@@ -0,0 +1,3 @@
+name: 'Tiro ao alvo - Exemplo'
+identifier: 'target-practice-solution'
+type: 'python'
diff --git a/pt-BR/code/target-practice-starter/main.py b/pt-BR/code/target-practice-starter/main.py
new file mode 100644
index 000000000..85ac867bb
--- /dev/null
+++ b/pt-BR/code/target-practice-starter/main.py
@@ -0,0 +1,24 @@
+# Importar código da biblioteca
+from p5 import *
+from random import randint
+
+# A função mouse_pressed vai aqui
+
+
+# A função atirar_flecha vai aqui
+
+
+def setup():
+ # Configure seu jogo aqui
+ size(400, 400) # largura e altura da tela
+ no_stroke()
+
+
+def draw():
+ # Coisas para fazer em cada quadro
+ fill("cyan")
+ rect(0, 0, 400, 250)
+
+
+# Mantenha isto para executar seu código
+run(frame_rate=2)
diff --git a/pt-BR/code/target-practice-starter/project_config.yml b/pt-BR/code/target-practice-starter/project_config.yml
new file mode 100644
index 000000000..befdca07c
--- /dev/null
+++ b/pt-BR/code/target-practice-starter/project_config.yml
@@ -0,0 +1,3 @@
+name: "Tiro ao alvo"
+identifier: 'target-practice-starter'
+type: 'python'
diff --git a/pt-BR/images/alternative-colours.png b/pt-BR/images/alternative-colours.png
new file mode 100644
index 000000000..e630dd54b
Binary files /dev/null and b/pt-BR/images/alternative-colours.png differ
diff --git a/pt-BR/images/animation_bg_erase.gif b/pt-BR/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/pt-BR/images/animation_bg_erase.gif differ
diff --git a/pt-BR/images/animation_no_bg_erase.gif b/pt-BR/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/pt-BR/images/animation_no_bg_erase.gif differ
diff --git a/pt-BR/images/arrow-centre.png b/pt-BR/images/arrow-centre.png
new file mode 100644
index 000000000..14dba17ee
Binary files /dev/null and b/pt-BR/images/arrow-centre.png differ
diff --git a/pt-BR/images/arrow-middle.png b/pt-BR/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/pt-BR/images/arrow-middle.png differ
diff --git a/pt-BR/images/arrow-target.png b/pt-BR/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/pt-BR/images/arrow-target.png differ
diff --git a/pt-BR/images/background.png b/pt-BR/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/pt-BR/images/background.png differ
diff --git a/pt-BR/images/banner.png b/pt-BR/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/pt-BR/images/banner.png differ
diff --git a/pt-BR/images/blue-circle.png b/pt-BR/images/blue-circle.png
new file mode 100644
index 000000000..054b612e8
Binary files /dev/null and b/pt-BR/images/blue-circle.png differ
diff --git a/pt-BR/images/blue-points.png b/pt-BR/images/blue-points.png
new file mode 100644
index 000000000..c8f5b941c
Binary files /dev/null and b/pt-BR/images/blue-points.png differ
diff --git a/pt-BR/images/blue_circle_points.gif b/pt-BR/images/blue_circle_points.gif
new file mode 100644
index 000000000..e6308eb07
Binary files /dev/null and b/pt-BR/images/blue_circle_points.gif differ
diff --git a/pt-BR/images/bottom-right.png b/pt-BR/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/pt-BR/images/bottom-right.png differ
diff --git a/pt-BR/images/centre.png b/pt-BR/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/pt-BR/images/centre.png differ
diff --git a/pt-BR/images/circle-coords.png b/pt-BR/images/circle-coords.png
new file mode 100644
index 000000000..a888286e1
Binary files /dev/null and b/pt-BR/images/circle-coords.png differ
diff --git a/pt-BR/images/coords_animation.gif b/pt-BR/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/pt-BR/images/coords_animation.gif differ
diff --git a/pt-BR/images/difficulty-setting.png b/pt-BR/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/pt-BR/images/difficulty-setting.png differ
diff --git a/pt-BR/images/fire_arrow.gif b/pt-BR/images/fire_arrow.gif
new file mode 100644
index 000000000..924ba34af
Binary files /dev/null and b/pt-BR/images/fire_arrow.gif differ
diff --git a/pt-BR/images/five_circles.png b/pt-BR/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/pt-BR/images/five_circles.png differ
diff --git a/pt-BR/images/green-grass.png b/pt-BR/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/pt-BR/images/green-grass.png differ
diff --git a/pt-BR/images/grey-circle.png b/pt-BR/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/pt-BR/images/grey-circle.png differ
diff --git a/pt-BR/images/grey-points.png b/pt-BR/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/pt-BR/images/grey-points.png differ
diff --git a/pt-BR/images/initial_target.png b/pt-BR/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/pt-BR/images/initial_target.png differ
diff --git a/pt-BR/images/missed-points.png b/pt-BR/images/missed-points.png
new file mode 100644
index 000000000..0cd14626c
Binary files /dev/null and b/pt-BR/images/missed-points.png differ
diff --git a/pt-BR/images/missed_no_points.gif b/pt-BR/images/missed_no_points.gif
new file mode 100644
index 000000000..212ca30e4
Binary files /dev/null and b/pt-BR/images/missed_no_points.gif differ
diff --git a/pt-BR/images/outline-circles.png b/pt-BR/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/pt-BR/images/outline-circles.png differ
diff --git a/pt-BR/images/points-scored.gif b/pt-BR/images/points-scored.gif
new file mode 100644
index 000000000..ab9509e5e
Binary files /dev/null and b/pt-BR/images/points-scored.gif differ
diff --git a/pt-BR/images/quiz-colour.png b/pt-BR/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/pt-BR/images/quiz-colour.png differ
diff --git a/pt-BR/images/random-side.png b/pt-BR/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/pt-BR/images/random-side.png differ
diff --git a/pt-BR/images/rectangle-diagram.png b/pt-BR/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/pt-BR/images/rectangle-diagram.png differ
diff --git a/pt-BR/images/showcase_rocket.png b/pt-BR/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/pt-BR/images/showcase_rocket.png differ
diff --git a/pt-BR/images/showcase_static.png b/pt-BR/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/pt-BR/images/showcase_static.png differ
diff --git a/pt-BR/images/sky_coords.png b/pt-BR/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/pt-BR/images/sky_coords.png differ
diff --git a/pt-BR/images/sky_stroke.png b/pt-BR/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/pt-BR/images/sky_stroke.png differ
diff --git a/pt-BR/images/stand_coords.png b/pt-BR/images/stand_coords.png
new file mode 100644
index 000000000..2002bae5f
Binary files /dev/null and b/pt-BR/images/stand_coords.png differ
diff --git a/pt-BR/images/step_4_preview.gif b/pt-BR/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/pt-BR/images/step_4_preview.gif differ
diff --git a/pt-BR/images/step_5_preview.gif b/pt-BR/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/pt-BR/images/step_5_preview.gif differ
diff --git a/pt-BR/images/target-stand.png b/pt-BR/images/target-stand.png
new file mode 100644
index 000000000..c65d89363
Binary files /dev/null and b/pt-BR/images/target-stand.png differ
diff --git a/pt-BR/images/target_area.png b/pt-BR/images/target_area.png
new file mode 100644
index 000000000..1e5c72120
Binary files /dev/null and b/pt-BR/images/target_area.png differ
diff --git a/pt-BR/images/target_printed.gif b/pt-BR/images/target_printed.gif
new file mode 100644
index 000000000..b29a244fe
Binary files /dev/null and b/pt-BR/images/target_printed.gif differ
diff --git a/pt-BR/images/three-circles.png b/pt-BR/images/three-circles.png
new file mode 100644
index 000000000..13a8dd8ed
Binary files /dev/null and b/pt-BR/images/three-circles.png differ
diff --git a/pt-BR/images/top-left.png b/pt-BR/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/pt-BR/images/top-left.png differ
diff --git a/pt-BR/images/triangles-coords.png b/pt-BR/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/pt-BR/images/triangles-coords.png differ
diff --git a/pt-BR/images/upgrade-ideas.png b/pt-BR/images/upgrade-ideas.png
new file mode 100644
index 000000000..3778a85f1
Binary files /dev/null and b/pt-BR/images/upgrade-ideas.png differ
diff --git a/pt-BR/images/yellow-points.png b/pt-BR/images/yellow-points.png
new file mode 100644
index 000000000..6ef90ca8e
Binary files /dev/null and b/pt-BR/images/yellow-points.png differ
diff --git a/pt-BR/meta.yml b/pt-BR/meta.yml
new file mode 100644
index 000000000..6fd3b75f6
--- /dev/null
+++ b/pt-BR/meta.yml
@@ -0,0 +1,41 @@
+---
+title: Tiro ao alvo
+hero_image: images/banner.png
+description: Use Python para desenhar um alvo e marcar pontos acertando-o com flechas
+meta_title: Projetos de codificação Python para crianças e adolescentes | Tiro ao alvo
+meta_description: Aprenda Python com os projetos de codificação da Raspberry Pi Foundation para crianças e adolescentes. Use Python para desenhar um alvo e marcar pontos acertando-o com flechas.
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: Você vai fazer
+ -
+ title: Crie um plano de fundo
+ -
+ title: Desenhe o seu alvo
+ completion:
+ - engaged
+ -
+ title: Atire sua flecha
+ -
+ title: Marque pontos
+ -
+ title: Teste rápido
+ completion:
+ - external
+ -
+ title: Melhore o seu projeto
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: E agora?
+ challenge: true
+ -
+ title: What can you do now?
diff --git a/pt-BR/python-comments-demo.txt b/pt-BR/python-comments-demo.txt
new file mode 100644
index 000000000..86261a0a7
--- /dev/null
+++ b/pt-BR/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Setup your game here
+
+width and height of screen
+
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Set the fill colour to grass
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the circle fill colour to outer
+
+x, y, width of the circle
+
+Blue
+
+Red
+
+Yellow
+
+Set the circle fill colour to inner
+
+Inner circle - x, y, width of the circle
+
+Set the circle fill colour to middle
+
+Middle circle - x, y, width of the circle
+
+The shoot_arrow function goes here
+
+Store a random number between 100 and 300
+
+Set the arrow to fill colour to wood
+
+Draw a small circle at random coordinates
+
+Get the hit colour
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Save the colour before drawing the arrow
+
+Like functions, 'if' statements are indented
+
+Import library code
+
+Keep this to run your code
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Set the fill colour to grass
diff --git a/pt-BR/python-comments.txt b/pt-BR/python-comments.txt
new file mode 100644
index 000000000..739fc7b94
--- /dev/null
+++ b/pt-BR/python-comments.txt
@@ -0,0 +1,27 @@
+Coisas para fazer em cada quadro
+
+Draw the inner circle
+
+Draw the middle circle
+
+A função atirar_flecha vai aqui
+
+A função mouse_pressed vai aqui
+
+Você acertou o círculo externo, 50 pontos!
+
+Você acertou o círculo interno, 200 pontos!
+
+Você acertou o meio, 500 pontos!
+
+You hit the middle, 500 points!
+
+Você errou! Sem pontos!
+
+Super rápida
+
+Bem rápida
+
+Muito rápida
+
+Velocidade não reconhecida!
\ No newline at end of file
diff --git a/pt-BR/python-translatable-demo.txt b/pt-BR/python-translatable-demo.txt
new file mode 100644
index 000000000..71707d059
--- /dev/null
+++ b/pt-BR/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+wood
+
+sky
+
+grass
+
+outer
+
+inner
+
+middle
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
+
+speed
diff --git a/pt-BR/python-translatable.txt b/pt-BR/python-translatable.txt
new file mode 100644
index 000000000..5175cec1e
--- /dev/null
+++ b/pt-BR/python-translatable.txt
@@ -0,0 +1,9 @@
+atirar_flecha
+
+flecha_x
+
+flecha_y
+
+cor_acerto
+
+velocidade
\ No newline at end of file
diff --git a/pt-BR/quiz1/question_1.md b/pt-BR/quiz1/question_1.md
new file mode 100644
index 000000000..d00a94bdf
--- /dev/null
+++ b/pt-BR/quiz1/question_1.md
@@ -0,0 +1,60 @@
+## Teste rápido
+
+Responda às três perguntas. Há dicas para guiá-lo para a resposta correta.
+
+Após responder cada pergunta, clique em **Ver minha resposta**.
+
+Divirta-se!
+
+--- question ---
+---
+legend: Pergunta 1 de 3
+---
+In your project you added `randint(100, 300)` to your `shoot_arrow()` function. What does `randint(100, 300)` do?
+
+--- code ---
+---
+language: python
+---
+
+def shoot_arrow(): global hit_colour arrow_x = randint(100, 300) arrow_y = randint(100, 300)
+
+--- /code ---
+
+--- choices ---
+
+- (x) It chooses a random whole number between 100 and 300.
+
+ --- feedback ---
+
+Está correto. Uma borda preta será desenhada ao redor de suas formas se você não usar esta função.
+
+ --- /feedback ---
+
+- ( ) It makes the arrow move randomly around the screen.
+
+ --- feedback ---
+
+Não exatamente. This code part of how the arrow moves randomly but you need other code too to achieve that goal.
+
+ --- /feedback ---
+
+- ( ) Preenche a forma com uma determinada cor.
+
+ --- feedback ---
+
+ Não exatamente. A função fill() faz isso e geralmente inclui uma cor fornecida.
+
+ --- /feedback ---
+
+- ( ) It draws a circle of a random size.
+
+ --- feedback ---
+
+ Não exatamente. A função Circle() seria usada para desenhar um círculo.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/pt-BR/quiz1/question_2.md b/pt-BR/quiz1/question_2.md
new file mode 100644
index 000000000..30093ec9a
--- /dev/null
+++ b/pt-BR/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legend: Pergunta 2 de 3
+---
+
+Em seu projeto, você usou as condições `if` , `elif` e `else` para verificar em qual cor a flecha acertou.
+
+No exemplo abaixo, uma variável chamada `velocidade` possui o número `6` armazenado nela. Quando esta instrução `if` for executada, o que será impresso na área de saída?
+
+--- code ---
+---
+language: python
+---
+velocidade = 6
+
+if velocidade == 7: print('Super rápido') elif velocidade == 5: print('Bem rápido') elif velocidade == 6: print('Muito rápido') else: print('Velocidade não reconhecida!')
+
+--- /code ---
+
+--- choices ---
+
+- (x) `Muito rápida`
+
+ --- feedback ---
+
+ Está correto! A variável **velocidade** recebeu o valor `6`, o que torna a condição `velocidade == 6` **Verdadeira** e imprime `Muito rápida`.
+
+ --- /feedback ---
+
+- ( ) `Velocidade não reconhecida!`
+
+ --- feedback ---
+
+ Não necessariamente. Veja o valor atribuído à variável **velocidade**.
+
+ --- /feedback ---
+
+- ( ) Nada é impresso
+
+ --- feedback ---
+
+ Tente novamente. `else` é usado como uma opção final para quando todas as condições acima forem falsas. Examine as condições novamente, algumas das condições são verdadeiras?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/pt-BR/quiz1/question_3.md b/pt-BR/quiz1/question_3.md
new file mode 100644
index 000000000..c2973dd3b
--- /dev/null
+++ b/pt-BR/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legend: Pergunta 3 de 3
+---
+
+Um círculo é desenhado usando o seguinte código:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+Qual das imagens abaixo mostra a posição correta deste círculo na área de saída?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Não necessariamente. Para centralizar o círculo no canto inferior direito, as coordenadas precisariam ser iguais ao tamanho da tela. Neste exemplo, a elipse seria `circle(400, 400, 300)`.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Não necessariamente. Para centralizar o círculo no meio, as coordenadas precisariam ser metade do tamanho da tela. Neste exemplo, `circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ Está correto! Este círculo está centralizado nas coordenadas (0,0), no canto superior esquerdo da tela.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Não, este círculo teria o código `circle(350, 150, 300)` para centralizá-lo no canto superior direito da tela. A coordenada `x` é a posição horizontal da elipse na tela, e a coordenada `y` é posição vertical da elipse na tela.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/pt-BR/resources/main.py b/pt-BR/resources/main.py
new file mode 100644
index 000000000..8d0da5672
--- /dev/null
+++ b/pt-BR/resources/main.py
@@ -0,0 +1,61 @@
+#!/bin/python3
+
+# Import library code
+from p5 import *
+from math import *
+from random import randint
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+ if hit_color == outer:
+ print('You hit the outer circle, 50 points!') #Like functions, 'if' statements are indented
+ elif hit_color == inner:
+ print('You hit the inner circle, 200 points!')
+ elif hit_color == bullseye:
+ print('You hit the bullseye, 500 points!')
+ else:
+ print('You missed! No points!')
+
+# The shoot_arrow function goes here
+def shoot_arrow():
+ global hit_color
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_color = get(arrow_x, arrow_y)
+ ellipse(arrow_x, arrow_y, 15, 15)
+
+def setup():
+# Setup your game here
+ size(400, 400) # width and height
+ frame_rate(2)
+
+
+def draw():
+# Things to do in every frame
+ global outer, inner, bullseye
+ sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+ grass = color(149, 212, 122)
+ wood = color(145, 96, 51)
+ outer = color(0, 120, 180)
+ inner = color(210, 60, 60)
+ bullseye = color(220, 200, 0)
+
+ no_stroke()
+ fill(sky)
+ rect(0, 0, 400, 250)
+ fill(grass)
+ rect(0, 250, 400, 150)
+
+ fill(wood)
+ triangle(150, 350, 200, 150, 250, 350)
+ fill(outer)
+ ellipse(200, 200, 170, 170)
+ fill(inner)
+ ellipse(200, 200, 110, 110) #Inner circle
+ fill(bullseye)
+ ellipse(200, 200, 30, 30) #Bullseye
+
+ fill(wood)
+ shoot_arrow()
+# Keep this to run your code
+run()
diff --git a/pt-BR/resources/p5.py b/pt-BR/resources/p5.py
new file mode 100644
index 000000000..fc023ee64
--- /dev/null
+++ b/pt-BR/resources/p5.py
@@ -0,0 +1,135 @@
+# Definitions for compatibility with the p5py processing library
+from processing import *
+import __main__
+
+# Shape
+from processing import rectMode as rect_mode
+from processing import ellipseMode as ellipse_mode
+from processing import strokeWeight as stroke_weight
+from processing import strokeCap as stroke_cap
+from processing import strokeJoin as stroke_join
+from processing import noStroke as no_stroke
+from processing import noFill as no_fill
+
+# Fonts
+from processing import createFont as create_font
+from processing import loadFont as load_font
+from processing import textFont as text_font
+
+# Text
+from processing import textAlign as text_align
+from processing import textLeading as text_leading
+from processing import textMode as text_mode
+from processing import textSize as text_size
+from processing import textWidth as text_width
+
+# Colour
+from processing import blendColor as blend_color
+from processing import lerpColor as lerp_color
+from processing import color as Color
+
+# Images
+from processing import createImage as create_image
+from processing import imageMode as image_mode
+from processing import loadImage as load_image
+from processing import noTint as no_tint
+from processing import requestImage as request_image
+
+# Environment
+from processing import frameRate as frame_rate
+from processing import noCursor as no_cursor
+from processing import noLoop as no_loop
+
+# Transform
+from processing import applyMatrix as apply_matrix
+from processing import popMatrix as pop_matrix
+from processing import printMatrix as print_matrix
+from processing import pushMatrix as push_matrix
+from processing import resetMatrix as reset_matrix
+from processing import rotateX as rotate_x
+from processing import rotateY as rotate_y
+from processing import pushStyle as push_style
+from processing import popStyle as pop_style
+
+from processing import run as main_run
+
+# Keyboard
+
+def mousePressed():
+ if hasattr(__main__, "mouse_pressed"):
+ mouse_pressed = getattr(__main__, "mouse_pressed")
+ mouse_pressed()
+
+def mouseReleased():
+ if hasattr(__main__, "mouse_released"):
+ mouse_released = getattr(__main__, "mouse_released")
+ mouse_released()
+
+__main__.mouse_x = 0
+__main__.mouse_y = 0
+__main__.mouse_px = 0
+__main__.mouse_py = 0
+__main__.frame_count = 0
+__main__.frame_rate = 60
+
+def mouseMoved():
+ __main__.mouse_x = mouse.x
+ __main__.mouse_y = mouse.y
+ __main__.mouse_px = mouse.px
+ __main__.mouse_py = mouse.py
+ if hasattr(__main__, "mouse_moved"):
+ mouse_moved = getattr(__main__, "mouse_moved")
+ mouse_moved()
+
+def mouseDragged():
+ if hasattr(__main__, "mouse_dragged"):
+ mouse_dragged = getattr(__main__, "mouse_dragged")
+ mouse_dragged()
+
+def new_draw():
+ __main__.frame_count = frameCount
+ frameRate = __main__.frame_rate
+ old_draw()
+
+def run():
+ global old_draw
+ old_draw = __main__.draw
+ __main__.draw = new_draw
+ main_run()
+
+def grid():
+ pushMatrix()
+ stroke(200)
+ fill(0)
+ line(0, height/2, width, height/2)
+ line(width/2, 0, width/2, height)
+ x_coords = [0, width/2, width]
+ y_coords = [0, height/2, height]
+
+ for x in x_coords:
+ for y in y_coords:
+ show_coord(x, y)
+
+ popMatrix()
+
+def show_coord(x, y):
+ if x == width:
+ x_align = RIGHT
+ elif x == 0:
+ x_align = LEFT
+ else:
+ x_align = CENTER
+
+ if y == height:
+ y_align = BASELINE
+ elif y == 0:
+ y_align = TOP
+ else:
+ y_align = CENTER
+
+ pushStyle()
+ fill(100)
+ text_align(x_align, y_align)
+ text('(' + str(int(x)) + ', ' + str(int(y)) + ')', x, y)
+ popStyle()
+
diff --git a/pt-BR/step_1.md b/pt-BR/step_1.md
new file mode 100644
index 000000000..ec8c44176
--- /dev/null
+++ b/pt-BR/step_1.md
@@ -0,0 +1,29 @@
+## O que você vai fazer
+
+Use Python, com a biblioteca de gráficos `p5`, para desenhar um alvo e marcar pontos acertando-o com flechas.
+
+--- print-only ---
+
+{:width="640px"}
+
+--- /print-only ---
+
+--- no-print ---
+
+
+
+Clique no botão **Executar** abaixo para iniciar o jogo. Quando o ponto aparecer no alvo 🎯, clique com o mouse (ou toque no tablet) para disparar sua flecha.
+
+
+
+
+
+--- /no-print ---
+
+
+
+
+
diff --git a/pt-BR/step_2.md b/pt-BR/step_2.md
new file mode 100644
index 000000000..0c21ca82c
--- /dev/null
+++ b/pt-BR/step_2.md
@@ -0,0 +1,37 @@
+## Desenhe a grama
+
+--- task ---
+
+Abra o projeto [Tiro ao alvo inicial](https://editor.raspberrypi.org/en/projects/target-practice-starter){:target="_blank"}.
+
+--- /task ---
+
+--- task ---
+
+**Adicione** código para desenhar um retângulo verde na parte inferior da tela.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 14
+line_highlights: 12
+---
+def draw(): # Things to do in every frame fill('cyan')
+rect(0, 0, 400, 250)
+fill('lightgreen')
+rect(0, 250, 400, 150)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Teste:** 🔄 Execute seu projeto novamente para visualizar o plano de fundo finalizado.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/pt-BR/step_3.md b/pt-BR/step_3.md
new file mode 100644
index 000000000..4f5a0fd2a
--- /dev/null
+++ b/pt-BR/step_3.md
@@ -0,0 +1,117 @@
+## Desenhe o seu alvo
+
+
+
+Seu jogo precisa de um alvo para atirarmos as flechas.
+
+
+
+{:width="300px"}
+
+
+
+
+### Desenhe um suporte triangular
+
+--- task ---
+
+Defina a cor de preenchimento como `sienna` (marrom).
+
+Desenhe um triângulo usando as coordenadas x e y para cada um dos cantos.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 18
+line_highlights: 20, 21
+---
+
+ fill('lightgreen') # Define a cor de preenchimento da grama para verde claro
+ rect(0, 250, 400, 150) # Desenha um retângulo para a grama com estes valores para x, y, largura, altura
+ fill(' sienna') # Cor marrom
+ triangle(150, 350, 200, 150, 250, 350) # Desenha um triângulo para o suporte do alvo
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Teste:** 🔄 Execute seu código para ver o suporte para o seu alvo:
+
+{:width="400px"}
+
+--- /task ---
+
+### Desenhe os círculos do alvo
+
+--- task ---
+
+A maior parte do alvo é um **círculo** azul.
+
+Defina a cor de preenchimento como `azul`.
+
+Desenhe um círculo com coordenadas x e y para seu centro e largura.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 20
+line_highlights: 22, 23
+---
+
+ fill('sienna') # Cor marrom
+ triangle(150, 350, 200, 150, 250, 350) # Desenha um triângulo para o suporte do alvo
+ fill('blue') # Define a cor de preenchimento do círculo para azul
+ circle(200, 200, 170) # Desenha o círculo externo
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Teste:** Execute seu código para ver o primeiro grande círculo azul.
+
+O círculo azul foi desenhado depois do suporte, então fica na frente.
+
+{:width="400px"}
+
+--- /task ---
+
+O alvo é feito de círculos de tamanhos diferentes com as mesmas coordenadas centrais (200, 200).
+
+--- task ---
+
+**Adicione** círculos coloridos para as partes interna e medianas do alvo.
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 20
+line_highlights: 24, 25, 26, 27
+---
+
+ fill('sienna') # Cor marrom
+ triangle(150, 350, 200, 150, 250, 350) # Desenha um triângulo para o suporte do alvo
+ fill('blue') # Define a cor de preenchimento do círculo para azul
+ circle(200, 200, 170) # Desenha o círculo externo
+ fill('red') # Define a cor do preenchimento do círculo para vermelho
+ circle(200, 200, 110) # Desenha o círculo interno usando x, y, width
+ fill('yellow') # Define a cor de preenchimento do círculo para amarelo
+ circle(200, 200, 30) # Desenha o círculo do meio usando x, y, largura
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Teste:** 🔄 Execute seu projeto para ver o alvo com três círculos coloridos.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/pt-BR/step_4.md b/pt-BR/step_4.md
new file mode 100644
index 000000000..c691b2d37
--- /dev/null
+++ b/pt-BR/step_4.md
@@ -0,0 +1,95 @@
+## Atire a sua flecha
+
+
+
+Add an even smaller circle to represent an arrow.
+
+
+
+{:width="300px"}
+
+
+
+
+### Where will you shoot?
+
+--- task ---
+
+Adicione código para desenhar aleatoriamente um círculo marrom dentro de uma área de destino:
+
+--- code ---
+---
+language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 7
+line_highlights: 8-12
+---
+# A função atirar_flecha vai aqui
+def atirar_flecha():
+flecha_x = randint(100, 300) # Armazena um número aleatório entre 100 e 300
+flecha_y = randint(100, 300) # Armazena um número aleatório entre 100 e 300
+fill('sienna') # Define a cor de preenchimento da flecha como marrom
+circle(flecha_x, flecha_y, 15) # Desenha um pequeno círculo em coordenadas aleatórias
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Vá para a função `draw` e invoque a sua nova função `atirar_flecha`.
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 31
+line_highlights: 33
+---
+
+ fill('yellow') # Define a cor de preenchimento do círculo para amarelo
+ circle(200, 200, 30) # Desenha o círculo do meio usando x, y, width
+ atirar_flecha()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Teste:** 🔄 Execute seu projeto. You should see the arrow in the centre.
+
+
+
+
+--- /task ---
+
+The arrow needs to move randomly.
+
+
+--- task ---
+
+Change the `arrow_x`{:.language-python} and `arrow_y`{:.language-python} variables to choose a random number between 100 and 300.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 5
+line_highlights: 9, 12
+---
+def atirar_flecha(): global cor_acerto # Pode ser usado em outras funções
+flecha_x = randint(100, 300) # Armazena um número aleatório entre 100 e 300
+flecha_y = randint(100, 300) # Armazena um número aleatório entre 100 e 300 cor_acerto = get(flecha_x, flecha_y).hex # Obtêm a cor do acerto
+fill('sienna') # Define a cor de preenchimento da flecha como marrom
+circle(flecha_x, flecha_y, 15) # Desenha um pequeno círculo em coordenadas aleatórias
+
+--- /code ---
+
+--- /task ---
+
+
+--- task ---
+
+
+**Teste:** 🔄 Execute seu projeto. You should see the arrow jump around the target.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/pt-BR/step_5.md b/pt-BR/step_5.md
new file mode 100644
index 000000000..412080f43
--- /dev/null
+++ b/pt-BR/step_5.md
@@ -0,0 +1,79 @@
+## What colour did you hit?
+
+Next, you will add some code to get the colour at the location of the arrow.
+
+### Get the colour hit by the arrow
+
+--- task ---
+
+Exiba uma mensagem **if** a `cor_acerto` for igual à cor dos `círculos` externos (azul) 🎯.
+
+Add code to `get` the colour at the centre of the arrow ,and store it in the `hit_colour` variable.
+
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 6
+line_highlights: 7
+---
+def mouse_pressed(): if cor_acerto == Color('blue').hex:
+print('Você acertou o círculo externo, 50 pontos!') elif cor_acerto == Color('red').hex: print('Você acertou o círculo interno, 200 pontos!') elif cor_acerto == Color('yellow').hex: print('Você acertou o meio, 500 pontos!')
+
+--- /code ---
+
+**Depurar:** 🐞 Certifique-se de ter usado `.hex` para as cores dos **seus** círculos.
+
+--- /task ---
+
+--- task ---
+
+**Teste:** 🔄 Execute seu projeto. **Depurar:** 🐞 Verifique se você usou a grafia americana de 'Color' (sem 'u') e se 'Color' está em maiúscula.
+
+--- /task ---
+
+### Run code when the mouse is pressed
+
+--- task ---
+
+Comment out the line that prints the colour. This means it will not run.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 6
+line_highlights: 7, 8
+---
+
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Add code to print the target emoji 🎯 **when the mouse is clicked**.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 5
+line_highlights: 9-12
+---
+# A função mouse_pressed vai aqui
+def mouse_pressed():
+print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Teste:** 🔄 Execute seu projeto. Tente disparar a flecha nos círculos interno e do meio para ver suas mensagens.
+
+
+
+--- /task ---
+
+--- save ---
\ No newline at end of file
diff --git a/pt-BR/step_6.md b/pt-BR/step_6.md
new file mode 100644
index 000000000..9449522ab
--- /dev/null
+++ b/pt-BR/step_6.md
@@ -0,0 +1,112 @@
+## Score points
+
+
+
+Add a score based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Comment out the line to print the 🎯 character so that it no longer runs.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 7
+---
+def mouse_pressed(): # print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Display a message **if** the `hit_colour`{:.language-python} is equal to the `outer` circle colour (blue).
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 8-9
+---
+def mouse_pressed():
+# print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!')
+
+--- /code ---
+
+**Tip:** If you changed the colour of your outer circle then you will need to replace `blue` with the colour name that you have chosen.
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Wait for the arrow to land on the blue circle, then click your left mouse button. 
+
+--- /task ---
+
+`elif`{:.language-python} can be used to add more conditions to your `if`{:.language-python} statement.
+
+--- task ---
+
+Add some more code to score points if the arrow lands on the **inner** or **middle** circles.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 10-14
+---
+
+def mouse_pressed(): # print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!') elif hit_colour == Color('red').hex: print('You hit the inner circle, 200 points!') elif hit_colour == Color('yellow').hex: print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button.You should score points whenever you hit the target.
+
+
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles?
+
+To do this last check, you use `else`{:.language-python}.
+
+--- task ---
+
+Add code to `print` a message when none of the `if` and `elif` statements are true.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 12
+line_highlights: 14-15
+---
+
+ elif hit_colour == Color('yellow').hex:
+ print('You hit the middle, 500 points!')
+ else:
+ print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Fire the arrow in the grass or sky to see the miss message.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/pt-BR/step_7.md b/pt-BR/step_7.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/pt-BR/step_7.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/pt-BR/step_8.md b/pt-BR/step_8.md
new file mode 100644
index 000000000..28ae6e382
--- /dev/null
+++ b/pt-BR/step_8.md
@@ -0,0 +1,36 @@
+## Challenge
+
+--- challenge ---
+
+
+You could:
+
+
+--- task ---
+
+Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position
+
+--- /task ---
+
+--- task ---
+
+Put emojis in your print messages ([here's a list of emojis](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from)
+
+--- /task ---
+
+--- task ---
+
+Make the game easier or harder by changing the `frame_rate=2` value
+
+
+--- /task ---
+
+--- task ---
+
+Add a variable to keep track of the total score, adding the correct number of points to it each time.
+
+--- /task ---
+
+
+
+--- /no-print ---
diff --git a/pt-BR/step_9.md b/pt-BR/step_9.md
new file mode 100644
index 000000000..86edf4a89
--- /dev/null
+++ b/pt-BR/step_9.md
@@ -0,0 +1,21 @@
+## What can you do now?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+\--- print-only ---
+
+{:width="600px"}
+
+\--- /print-only ---
+
+\--- no-print ---
+
+Click the **Run** button to view an example of this project.
+
+
+
+\--- /no-print ---
+
+Or, why not try out another [Python](https://projects.raspberrypi.org/en/projects?software%5B%5D=python) project.
+
diff --git a/ru-RU/code/target-practice-solution/main.py b/ru-RU/code/target-practice-solution/main.py
new file mode 100644
index 000000000..9b71b07d4
--- /dev/null
+++ b/ru-RU/code/target-practice-solution/main.py
@@ -0,0 +1,55 @@
+## Import library code
+
+from p5 import *
+from random import randint
+
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+ # print('🎯')
+ if hit_colour == Color("blue").hex:
+ print("You hit the outer circle, 50 points!")
+ elif hit_colour == Color("red").hex:
+ print("You hit the inner circle, 200 points!")
+ elif hit_colour == Color("yellow").hex:
+ print("You hit the middle, 500 points!")
+ else:
+ print("You missed! No points!")
+
+
+# The shoot_arrow function goes here
+def shoot_arrow():
+ global hit_colour
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ fill("brown")
+ circle(arrow_x, arrow_y, 15)
+
+
+def setup():
+ # Set up your game here
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Things to do in every frame
+ fill("cyan")
+ rect(0, 0, 400, 250)
+ fill("lightgreen")
+ rect(0, 250, 400, 150)
+ fill("brown")
+ triangle(150, 350, 200, 150, 250, 350)
+ fill("blue")
+ circle(200, 200, 170)
+ fill("red")
+ circle(200, 200, 110) # Draw the inner circle
+ fill("yellow")
+ circle(200, 200, 30) # Draw the middle circle
+ shoot_arrow()
+
+
+# Keep this to run your code
+run(frame_rate=2)
diff --git a/ru-RU/code/target-practice-solution/project_config.yml b/ru-RU/code/target-practice-solution/project_config.yml
new file mode 100644
index 000000000..2c45eb56c
--- /dev/null
+++ b/ru-RU/code/target-practice-solution/project_config.yml
@@ -0,0 +1,3 @@
+name: 'Target Practice Example'
+identifier: 'target-practice-solution'
+type: 'python'
diff --git a/ru-RU/code/target-practice-starter/main.py b/ru-RU/code/target-practice-starter/main.py
new file mode 100644
index 000000000..03f477ff0
--- /dev/null
+++ b/ru-RU/code/target-practice-starter/main.py
@@ -0,0 +1,24 @@
+## Import library code
+from p5 import *
+from random import randint
+
+# The mouse_pressed function goes here
+
+
+# The shoot_arrow function goes here
+
+
+def setup():
+ # Set up your game here
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Things to do in every frame
+ fill("cyan")
+ rect(0, 0, 400, 250)
+
+
+# Keep this to run your code
+run(frame_rate=2)
diff --git a/ru-RU/code/target-practice-starter/project_config.yml b/ru-RU/code/target-practice-starter/project_config.yml
new file mode 100644
index 000000000..1f6832901
--- /dev/null
+++ b/ru-RU/code/target-practice-starter/project_config.yml
@@ -0,0 +1,3 @@
+name: "Target Practice"
+identifier: 'target-practice-starter'
+type: 'python'
diff --git a/ru-RU/images/alternative-colours.png b/ru-RU/images/alternative-colours.png
new file mode 100644
index 000000000..e630dd54b
Binary files /dev/null and b/ru-RU/images/alternative-colours.png differ
diff --git a/ru-RU/images/animation_bg_erase.gif b/ru-RU/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/ru-RU/images/animation_bg_erase.gif differ
diff --git a/ru-RU/images/animation_no_bg_erase.gif b/ru-RU/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/ru-RU/images/animation_no_bg_erase.gif differ
diff --git a/ru-RU/images/arrow-centre.png b/ru-RU/images/arrow-centre.png
new file mode 100644
index 000000000..14dba17ee
Binary files /dev/null and b/ru-RU/images/arrow-centre.png differ
diff --git a/ru-RU/images/arrow-middle.png b/ru-RU/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/ru-RU/images/arrow-middle.png differ
diff --git a/ru-RU/images/arrow-target.png b/ru-RU/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/ru-RU/images/arrow-target.png differ
diff --git a/ru-RU/images/background.png b/ru-RU/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/ru-RU/images/background.png differ
diff --git a/ru-RU/images/banner.png b/ru-RU/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/ru-RU/images/banner.png differ
diff --git a/ru-RU/images/blue-circle.png b/ru-RU/images/blue-circle.png
new file mode 100644
index 000000000..054b612e8
Binary files /dev/null and b/ru-RU/images/blue-circle.png differ
diff --git a/ru-RU/images/blue-points.png b/ru-RU/images/blue-points.png
new file mode 100644
index 000000000..921b62ff2
Binary files /dev/null and b/ru-RU/images/blue-points.png differ
diff --git a/ru-RU/images/blue_circle_points.gif b/ru-RU/images/blue_circle_points.gif
new file mode 100644
index 000000000..e6308eb07
Binary files /dev/null and b/ru-RU/images/blue_circle_points.gif differ
diff --git a/ru-RU/images/bottom-right.png b/ru-RU/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/ru-RU/images/bottom-right.png differ
diff --git a/ru-RU/images/centre.png b/ru-RU/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/ru-RU/images/centre.png differ
diff --git a/ru-RU/images/circle-coords.png b/ru-RU/images/circle-coords.png
new file mode 100644
index 000000000..a888286e1
Binary files /dev/null and b/ru-RU/images/circle-coords.png differ
diff --git a/ru-RU/images/coords_animation.gif b/ru-RU/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/ru-RU/images/coords_animation.gif differ
diff --git a/ru-RU/images/difficulty-setting.png b/ru-RU/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/ru-RU/images/difficulty-setting.png differ
diff --git a/ru-RU/images/fire_arrow.gif b/ru-RU/images/fire_arrow.gif
new file mode 100644
index 000000000..924ba34af
Binary files /dev/null and b/ru-RU/images/fire_arrow.gif differ
diff --git a/ru-RU/images/five_circles.png b/ru-RU/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/ru-RU/images/five_circles.png differ
diff --git a/ru-RU/images/green-grass.png b/ru-RU/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/ru-RU/images/green-grass.png differ
diff --git a/ru-RU/images/grey-circle.png b/ru-RU/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/ru-RU/images/grey-circle.png differ
diff --git a/ru-RU/images/grey-points.png b/ru-RU/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/ru-RU/images/grey-points.png differ
diff --git a/ru-RU/images/initial_target.png b/ru-RU/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/ru-RU/images/initial_target.png differ
diff --git a/ru-RU/images/missed-points.png b/ru-RU/images/missed-points.png
new file mode 100644
index 000000000..0cd14626c
Binary files /dev/null and b/ru-RU/images/missed-points.png differ
diff --git a/ru-RU/images/missed_no_points.gif b/ru-RU/images/missed_no_points.gif
new file mode 100644
index 000000000..212ca30e4
Binary files /dev/null and b/ru-RU/images/missed_no_points.gif differ
diff --git a/ru-RU/images/outline-circles.png b/ru-RU/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/ru-RU/images/outline-circles.png differ
diff --git a/ru-RU/images/points-scored.gif b/ru-RU/images/points-scored.gif
new file mode 100644
index 000000000..3fbe161a8
Binary files /dev/null and b/ru-RU/images/points-scored.gif differ
diff --git a/ru-RU/images/quiz-colour.png b/ru-RU/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/ru-RU/images/quiz-colour.png differ
diff --git a/ru-RU/images/random-side.png b/ru-RU/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/ru-RU/images/random-side.png differ
diff --git a/ru-RU/images/rectangle-diagram.png b/ru-RU/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/ru-RU/images/rectangle-diagram.png differ
diff --git a/ru-RU/images/showcase_rocket.png b/ru-RU/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/ru-RU/images/showcase_rocket.png differ
diff --git a/ru-RU/images/showcase_static.png b/ru-RU/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/ru-RU/images/showcase_static.png differ
diff --git a/ru-RU/images/sky_coords.png b/ru-RU/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/ru-RU/images/sky_coords.png differ
diff --git a/ru-RU/images/sky_stroke.png b/ru-RU/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/ru-RU/images/sky_stroke.png differ
diff --git a/ru-RU/images/stand_coords.png b/ru-RU/images/stand_coords.png
new file mode 100644
index 000000000..2002bae5f
Binary files /dev/null and b/ru-RU/images/stand_coords.png differ
diff --git a/ru-RU/images/step_4_preview.gif b/ru-RU/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/ru-RU/images/step_4_preview.gif differ
diff --git a/ru-RU/images/step_5_preview.gif b/ru-RU/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/ru-RU/images/step_5_preview.gif differ
diff --git a/ru-RU/images/target-stand.png b/ru-RU/images/target-stand.png
new file mode 100644
index 000000000..c65d89363
Binary files /dev/null and b/ru-RU/images/target-stand.png differ
diff --git a/ru-RU/images/target_area.png b/ru-RU/images/target_area.png
new file mode 100644
index 000000000..1e5c72120
Binary files /dev/null and b/ru-RU/images/target_area.png differ
diff --git a/ru-RU/images/target_printed.gif b/ru-RU/images/target_printed.gif
new file mode 100644
index 000000000..b29a244fe
Binary files /dev/null and b/ru-RU/images/target_printed.gif differ
diff --git a/ru-RU/images/three-circles.png b/ru-RU/images/three-circles.png
new file mode 100644
index 000000000..13a8dd8ed
Binary files /dev/null and b/ru-RU/images/three-circles.png differ
diff --git a/ru-RU/images/top-left.png b/ru-RU/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/ru-RU/images/top-left.png differ
diff --git a/ru-RU/images/triangles-coords.png b/ru-RU/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/ru-RU/images/triangles-coords.png differ
diff --git a/ru-RU/images/upgrade-ideas.png b/ru-RU/images/upgrade-ideas.png
new file mode 100644
index 000000000..083f82320
Binary files /dev/null and b/ru-RU/images/upgrade-ideas.png differ
diff --git a/ru-RU/images/yellow-points.png b/ru-RU/images/yellow-points.png
new file mode 100644
index 000000000..0c461812c
Binary files /dev/null and b/ru-RU/images/yellow-points.png differ
diff --git a/ru-RU/meta.yml b/ru-RU/meta.yml
new file mode 100644
index 000000000..e56ce34a6
--- /dev/null
+++ b/ru-RU/meta.yml
@@ -0,0 +1,41 @@
+---
+title: Target practice
+hero_image: images/banner.png
+description: Use Python to draw a target and score points by hitting it with arrows
+meta_title: Python coding projects for kids and teens | Target practice
+meta_description: Learn Python with the Raspberry Pi Foundation's coding projects for kids and teens. Use Python to draw a target and score points by hitting it with arrows.
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: What you will make
+ -
+ title: Draw the grass
+ -
+ title: Draw your target
+ completion:
+ - engaged
+ -
+ title: Add an arrow
+ -
+ title: What colour did you hit?
+ -
+ title: Score points
+ completion:
+ - internal
+ -
+ title: Quick quiz
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: Challenge
+ challenge: true
+ -
+ title: What can you do now?
diff --git a/ru-RU/python-comments-demo.txt b/ru-RU/python-comments-demo.txt
new file mode 100644
index 000000000..86261a0a7
--- /dev/null
+++ b/ru-RU/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Setup your game here
+
+width and height of screen
+
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Set the fill colour to grass
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the circle fill colour to outer
+
+x, y, width of the circle
+
+Blue
+
+Red
+
+Yellow
+
+Set the circle fill colour to inner
+
+Inner circle - x, y, width of the circle
+
+Set the circle fill colour to middle
+
+Middle circle - x, y, width of the circle
+
+The shoot_arrow function goes here
+
+Store a random number between 100 and 300
+
+Set the arrow to fill colour to wood
+
+Draw a small circle at random coordinates
+
+Get the hit colour
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Save the colour before drawing the arrow
+
+Like functions, 'if' statements are indented
+
+Import library code
+
+Keep this to run your code
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Set the fill colour to grass
diff --git a/ru-RU/python-comments.txt b/ru-RU/python-comments.txt
new file mode 100644
index 000000000..35750f346
--- /dev/null
+++ b/ru-RU/python-comments.txt
@@ -0,0 +1,27 @@
+Things to do in every frame
+
+Draw the inner circle
+
+Draw the middle circle
+
+The shoot_arrow function goes here
+
+The mouse_pressed function goes here
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
\ No newline at end of file
diff --git a/ru-RU/python-translatable-demo.txt b/ru-RU/python-translatable-demo.txt
new file mode 100644
index 000000000..71707d059
--- /dev/null
+++ b/ru-RU/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+wood
+
+sky
+
+grass
+
+outer
+
+inner
+
+middle
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
+
+speed
diff --git a/ru-RU/python-translatable.txt b/ru-RU/python-translatable.txt
new file mode 100644
index 000000000..1e4f01f6b
--- /dev/null
+++ b/ru-RU/python-translatable.txt
@@ -0,0 +1,9 @@
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_colour
+
+speed
\ No newline at end of file
diff --git a/ru-RU/quiz1/question_1.md b/ru-RU/quiz1/question_1.md
new file mode 100644
index 000000000..3be0de9d4
--- /dev/null
+++ b/ru-RU/quiz1/question_1.md
@@ -0,0 +1,60 @@
+## Quick quiz
+
+Answer the three questions. There are hints to guide you to the correct answer.
+
+When you have answered each question, click on **Check my answer**.
+
+Have fun!
+
+--- question ---
+---
+legend: Вопрос 1 из 3
+---
+In your project you added `randint(100, 300)` to your `shoot_arrow()` function. What does `randint(100, 300)` do?
+
+--- code ---
+---
+language: python
+---
+
+def shoot_arrow(): global hit_colour arrow_x = randint(100, 300) arrow_y = randint(100, 300)
+
+--- /code ---
+
+--- choices ---
+
+- (x) It chooses a random whole number between 100 and 300.
+
+ --- feedback ---
+
+That's correct. This chooses a random x coordinate for your arrow.
+
+ --- /feedback ---
+
+- ( ) It makes the arrow move randomly around the screen.
+
+ --- feedback ---
+
+Not quite. This code part of how the arrow moves randomly but you need other code too to achieve that goal.
+
+ --- /feedback ---
+
+- () It gets the colour that was hit by the arrow.
+
+ --- feedback ---
+
+ Not quite. The get() function would be used to get the colour.
+
+ --- /feedback ---
+
+- ( ) It draws a circle of a random size.
+
+ --- feedback ---
+
+ Not quite. The circle() function would be used to draw a circle.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/ru-RU/quiz1/question_2.md b/ru-RU/quiz1/question_2.md
new file mode 100644
index 000000000..6f879699f
--- /dev/null
+++ b/ru-RU/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legend: Вопрос 2 из 3
+---
+
+In your project, you used `if` , `elif`, and `else` conditions to check which colour the arrow landed on.
+
+In the example below, a variable called `speed` has the number `6` stored in it. When this `if` statement is run, what would be printed in the output area?
+
+--- code ---
+---
+language: python
+---
+speed = 6
+
+if speed == 7: print('Super fast') elif speed == 5: print('Pretty quick') elif speed == 6: print('Very fast') else: print('Speed not recognised!')
+
+--- /code ---
+
+--- choices ---
+
+- (x) `Very fast`
+
+ --- feedback ---
+
+ That's correct! The **speed** variable has been assigned the value `6`, which makes the `speed == 6` condition **True** and prints `Very fast`.
+
+ --- /feedback ---
+
+- ( ) `Speed not recognised!`
+
+ --- feedback ---
+
+ Not quite, look at the value assigned to the **speed** variable.
+
+ --- /feedback ---
+
+- ( ) Nothing gets printed
+
+ --- feedback ---
+
+ Try again, `else` is used as a final option for when all the above conditions are false. Look through the conditions again, are any of the conditions true?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/ru-RU/quiz1/question_3.md b/ru-RU/quiz1/question_3.md
new file mode 100644
index 000000000..b59583f00
--- /dev/null
+++ b/ru-RU/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legend: Вопрос 3 из 3
+---
+
+A circle is drawn using the following code:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+Which of the images below show the correct position of this circle in the output area?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the bottom-right corner, the coordinates would need to be the same as the screen size. In this example, the ellipse would be `circle(400, 400, 300)`.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the middle, the coordinates would need to be half of the screen size. In this example, `circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ That's correct! This circle is centred at coordinates (0,0), the top-left corner of the screen.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ No, this circle would have code of `circle(350, 150, 300)` to centre it towards the top-right of the screen. The `x` coordinate is how far across the screen the ellipse is, and the `y` coordinate is how far down the screen it is.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/ru-RU/resources/main.py b/ru-RU/resources/main.py
new file mode 100644
index 000000000..8d0da5672
--- /dev/null
+++ b/ru-RU/resources/main.py
@@ -0,0 +1,61 @@
+#!/bin/python3
+
+# Import library code
+from p5 import *
+from math import *
+from random import randint
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+ if hit_color == outer:
+ print('You hit the outer circle, 50 points!') #Like functions, 'if' statements are indented
+ elif hit_color == inner:
+ print('You hit the inner circle, 200 points!')
+ elif hit_color == bullseye:
+ print('You hit the bullseye, 500 points!')
+ else:
+ print('You missed! No points!')
+
+# The shoot_arrow function goes here
+def shoot_arrow():
+ global hit_color
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_color = get(arrow_x, arrow_y)
+ ellipse(arrow_x, arrow_y, 15, 15)
+
+def setup():
+# Setup your game here
+ size(400, 400) # width and height
+ frame_rate(2)
+
+
+def draw():
+# Things to do in every frame
+ global outer, inner, bullseye
+ sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+ grass = color(149, 212, 122)
+ wood = color(145, 96, 51)
+ outer = color(0, 120, 180)
+ inner = color(210, 60, 60)
+ bullseye = color(220, 200, 0)
+
+ no_stroke()
+ fill(sky)
+ rect(0, 0, 400, 250)
+ fill(grass)
+ rect(0, 250, 400, 150)
+
+ fill(wood)
+ triangle(150, 350, 200, 150, 250, 350)
+ fill(outer)
+ ellipse(200, 200, 170, 170)
+ fill(inner)
+ ellipse(200, 200, 110, 110) #Inner circle
+ fill(bullseye)
+ ellipse(200, 200, 30, 30) #Bullseye
+
+ fill(wood)
+ shoot_arrow()
+# Keep this to run your code
+run()
diff --git a/ru-RU/resources/p5.py b/ru-RU/resources/p5.py
new file mode 100644
index 000000000..fc023ee64
--- /dev/null
+++ b/ru-RU/resources/p5.py
@@ -0,0 +1,135 @@
+# Definitions for compatibility with the p5py processing library
+from processing import *
+import __main__
+
+# Shape
+from processing import rectMode as rect_mode
+from processing import ellipseMode as ellipse_mode
+from processing import strokeWeight as stroke_weight
+from processing import strokeCap as stroke_cap
+from processing import strokeJoin as stroke_join
+from processing import noStroke as no_stroke
+from processing import noFill as no_fill
+
+# Fonts
+from processing import createFont as create_font
+from processing import loadFont as load_font
+from processing import textFont as text_font
+
+# Text
+from processing import textAlign as text_align
+from processing import textLeading as text_leading
+from processing import textMode as text_mode
+from processing import textSize as text_size
+from processing import textWidth as text_width
+
+# Colour
+from processing import blendColor as blend_color
+from processing import lerpColor as lerp_color
+from processing import color as Color
+
+# Images
+from processing import createImage as create_image
+from processing import imageMode as image_mode
+from processing import loadImage as load_image
+from processing import noTint as no_tint
+from processing import requestImage as request_image
+
+# Environment
+from processing import frameRate as frame_rate
+from processing import noCursor as no_cursor
+from processing import noLoop as no_loop
+
+# Transform
+from processing import applyMatrix as apply_matrix
+from processing import popMatrix as pop_matrix
+from processing import printMatrix as print_matrix
+from processing import pushMatrix as push_matrix
+from processing import resetMatrix as reset_matrix
+from processing import rotateX as rotate_x
+from processing import rotateY as rotate_y
+from processing import pushStyle as push_style
+from processing import popStyle as pop_style
+
+from processing import run as main_run
+
+# Keyboard
+
+def mousePressed():
+ if hasattr(__main__, "mouse_pressed"):
+ mouse_pressed = getattr(__main__, "mouse_pressed")
+ mouse_pressed()
+
+def mouseReleased():
+ if hasattr(__main__, "mouse_released"):
+ mouse_released = getattr(__main__, "mouse_released")
+ mouse_released()
+
+__main__.mouse_x = 0
+__main__.mouse_y = 0
+__main__.mouse_px = 0
+__main__.mouse_py = 0
+__main__.frame_count = 0
+__main__.frame_rate = 60
+
+def mouseMoved():
+ __main__.mouse_x = mouse.x
+ __main__.mouse_y = mouse.y
+ __main__.mouse_px = mouse.px
+ __main__.mouse_py = mouse.py
+ if hasattr(__main__, "mouse_moved"):
+ mouse_moved = getattr(__main__, "mouse_moved")
+ mouse_moved()
+
+def mouseDragged():
+ if hasattr(__main__, "mouse_dragged"):
+ mouse_dragged = getattr(__main__, "mouse_dragged")
+ mouse_dragged()
+
+def new_draw():
+ __main__.frame_count = frameCount
+ frameRate = __main__.frame_rate
+ old_draw()
+
+def run():
+ global old_draw
+ old_draw = __main__.draw
+ __main__.draw = new_draw
+ main_run()
+
+def grid():
+ pushMatrix()
+ stroke(200)
+ fill(0)
+ line(0, height/2, width, height/2)
+ line(width/2, 0, width/2, height)
+ x_coords = [0, width/2, width]
+ y_coords = [0, height/2, height]
+
+ for x in x_coords:
+ for y in y_coords:
+ show_coord(x, y)
+
+ popMatrix()
+
+def show_coord(x, y):
+ if x == width:
+ x_align = RIGHT
+ elif x == 0:
+ x_align = LEFT
+ else:
+ x_align = CENTER
+
+ if y == height:
+ y_align = BASELINE
+ elif y == 0:
+ y_align = TOP
+ else:
+ y_align = CENTER
+
+ pushStyle()
+ fill(100)
+ text_align(x_align, y_align)
+ text('(' + str(int(x)) + ', ' + str(int(y)) + ')', x, y)
+ popStyle()
+
diff --git a/ru-RU/step_1.md b/ru-RU/step_1.md
new file mode 100644
index 000000000..e3a8012cf
--- /dev/null
+++ b/ru-RU/step_1.md
@@ -0,0 +1,29 @@
+## What you will make
+
+Use Python to draw a target and score points by hitting it with arrows.
+
+--- print-only ---
+
+{:width="640px"}
+
+--- /print-only ---
+
+--- no-print ---
+
+
+
+Click the **Run** button below to start the game. When the dot appears on the target 🎯, click the mouse (or tap on your tablet) to fire your arrow.
+
+
+
+
+
+--- /no-print ---
+
+
+
+
+
diff --git a/ru-RU/step_2.md b/ru-RU/step_2.md
new file mode 100644
index 000000000..919a62214
--- /dev/null
+++ b/ru-RU/step_2.md
@@ -0,0 +1,37 @@
+## Draw the grass
+
+--- task ---
+
+Open the [Target practice starter](https://editor.raspberrypi.org/en/projects/target-practice-starter){:target="_blank"} project.
+
+--- /task ---
+
+--- task ---
+
+**Add** code to draw a green rectangle at the bottom of the screen to represent the grass.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 17
+line_highlights: 21-22
+---
+def draw(): # Things to do in every frame fill('cyan')
+rect(0, 0, 400, 250)
+fill('lightgreen')
+rect(0, 250, 400, 150)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your project to view the background.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/ru-RU/step_3.md b/ru-RU/step_3.md
new file mode 100644
index 000000000..c0895baaf
--- /dev/null
+++ b/ru-RU/step_3.md
@@ -0,0 +1,115 @@
+## Draw your target
+
+
+
+Your game needs a target to shoot arrows at.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a triangular stand
+
+--- task ---
+
+Set the fill colour to `brown`.
+
+Draw a triangle using the x and y coordinates for each of the corners.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 21
+line_highlights: 23-24
+---
+
+ fill('lightgreen')
+ rect(0, 250, 400, 150)
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the stand for your target:
+
+{:width="400px"}
+
+--- /task ---
+
+### Draw the target circles
+
+--- task ---
+
+The largest part of the target is a blue **circle**.
+
+Set the fill colour to `blue`.
+
+Draw a circle with x and y coordinates for its centre and a width.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 23
+line_highlights: 25-26
+---
+
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+ fill('blue')
+ circle(200, 200, 170)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the first large blue circle.
+
+The blue circle was drawn after the stand so it is in front.
+
+{:width="400px"}
+
+--- /task ---
+
+The target is made of different-sized circles with the same centre coordinates (200, 200).
+
+--- task ---
+
+**Add** coloured circles for the inner and middle parts of the target.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 25
+line_highlights: 27-30
+---
+
+ fill('blue')
+ circle(200, 200, 170)
+ fill('red')
+ circle(200, 200, 110) # Draw the inner circle
+ fill('yellow')
+ circle(200, 200, 30) # Draw the middle circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your project to see the target with three coloured circles.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/ru-RU/step_4.md b/ru-RU/step_4.md
new file mode 100644
index 000000000..0e4f7b007
--- /dev/null
+++ b/ru-RU/step_4.md
@@ -0,0 +1,88 @@
+## Add an arrow
+
+
+
+Add an even smaller circle to represent an arrow.
+
+
+
+{:width="300px"}
+
+
+
+
+### Where will you shoot?
+
+--- task ---
+
+Add a function to draw a brown circle at coordinates `200`, `200`.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 8
+line_highlights: 9-13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = 200 arrow_y = 200 fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Call your new `shoot_arrow()`{:.language-python} function at the end of your `draw()`{:.language-python} function.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 33
+line_highlights: 35
+---
+
+ fill('yellow')
+ circle(200, 200, 30)
+ shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see the arrow in the centre.
+
+
+
+
+--- /task ---
+
+The arrow needs to move randomly.
+
+
+--- task ---
+
+Change the `arrow_x`{:.language-python} and `arrow_y`{:.language-python} variables to choose a random number between 100 and 300.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10-11
+---
+def shoot_arrow(): arrow_x = randint(100, 300) arrow_y = randint(100, 300) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+
+--- task ---
+
+
+**Test:** Click the **Run** button. You should see the arrow jump around the target.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/ru-RU/step_5.md b/ru-RU/step_5.md
new file mode 100644
index 000000000..2933b68ca
--- /dev/null
+++ b/ru-RU/step_5.md
@@ -0,0 +1,80 @@
+## What colour did you hit?
+
+Next, you will add some code to get the colour at the location of the arrow.
+
+### Get the colour hit by the arrow
+
+--- task ---
+
+Add a new **global variable** called `hit_colour`.
+
+Add code to `get` the colour at the centre of the arrow ,and store it in the `hit_colour` variable.
+
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10, 13, 14
+---
+def shoot_arrow(): global hit_colour
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300) hit_colour = get(arrow_x, arrow_y).hex print(hit_colour) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+**Tip:** The code to `get` the colour needs to be **before** the code to draw the `circle` otherwise you will always save the brown colour of the arrow!
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see colours being printed in the **Text output**, in hexadecimal format.
+
+--- /task ---
+
+### Run code when the mouse is pressed
+
+--- task ---
+
+Comment out the line that prints the colour. This means it will not run.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 13
+line_highlights: 14
+---
+
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Add code to print the target emoji 🎯 **when the mouse is clicked**.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 5
+line_highlights: 6-7
+---
+# The mouse_pressed function goes here
+def mouse_pressed():
+print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. You should see the 🎯 character printed when you click the mouse on the target.
+
+
+
+--- /task ---
+
+--- save ---
\ No newline at end of file
diff --git a/ru-RU/step_6.md b/ru-RU/step_6.md
new file mode 100644
index 000000000..9449522ab
--- /dev/null
+++ b/ru-RU/step_6.md
@@ -0,0 +1,112 @@
+## Score points
+
+
+
+Add a score based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Comment out the line to print the 🎯 character so that it no longer runs.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 7
+---
+def mouse_pressed(): # print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Display a message **if** the `hit_colour`{:.language-python} is equal to the `outer` circle colour (blue).
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 8-9
+---
+def mouse_pressed():
+# print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!')
+
+--- /code ---
+
+**Tip:** If you changed the colour of your outer circle then you will need to replace `blue` with the colour name that you have chosen.
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Wait for the arrow to land on the blue circle, then click your left mouse button. 
+
+--- /task ---
+
+`elif`{:.language-python} can be used to add more conditions to your `if`{:.language-python} statement.
+
+--- task ---
+
+Add some more code to score points if the arrow lands on the **inner** or **middle** circles.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 10-14
+---
+
+def mouse_pressed(): # print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!') elif hit_colour == Color('red').hex: print('You hit the inner circle, 200 points!') elif hit_colour == Color('yellow').hex: print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button.You should score points whenever you hit the target.
+
+
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles?
+
+To do this last check, you use `else`{:.language-python}.
+
+--- task ---
+
+Add code to `print` a message when none of the `if` and `elif` statements are true.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 12
+line_highlights: 14-15
+---
+
+ elif hit_colour == Color('yellow').hex:
+ print('You hit the middle, 500 points!')
+ else:
+ print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Click the **Run** button. Fire the arrow in the grass or sky to see the miss message.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/ru-RU/step_7.md b/ru-RU/step_7.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/ru-RU/step_7.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/ru-RU/step_8.md b/ru-RU/step_8.md
new file mode 100644
index 000000000..910635d28
--- /dev/null
+++ b/ru-RU/step_8.md
@@ -0,0 +1,36 @@
+## Challenge
+
+--- challenge ---
+
+
+You could:
+
+
+--- task ---
+
+Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position
+
+--- /task ---
+
+--- task ---
+
+Put emojis in your print messages ([here's a list of emojis](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from)
+
+--- /task ---
+
+--- task ---
+
+Make the game easier or harder by changing the `frame_rate=2` value
+
+
+--- /task ---
+
+--- task ---
+
+Add a variable to keep track of the total score, adding the correct number of points to it each time.
+
+--- /task ---
+
+
+
+--- /challenge ---
diff --git a/ru-RU/step_9.md b/ru-RU/step_9.md
new file mode 100644
index 000000000..86edf4a89
--- /dev/null
+++ b/ru-RU/step_9.md
@@ -0,0 +1,21 @@
+## What can you do now?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+\--- print-only ---
+
+{:width="600px"}
+
+\--- /print-only ---
+
+\--- no-print ---
+
+Click the **Run** button to view an example of this project.
+
+
+
+\--- /no-print ---
+
+Or, why not try out another [Python](https://projects.raspberrypi.org/en/projects?software%5B%5D=python) project.
+
diff --git a/sw-KE/images/alternative-colours.png b/sw-KE/images/alternative-colours.png
new file mode 100644
index 000000000..a688ac942
Binary files /dev/null and b/sw-KE/images/alternative-colours.png differ
diff --git a/sw-KE/images/animation_bg_erase.gif b/sw-KE/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/sw-KE/images/animation_bg_erase.gif differ
diff --git a/sw-KE/images/animation_no_bg_erase.gif b/sw-KE/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/sw-KE/images/animation_no_bg_erase.gif differ
diff --git a/sw-KE/images/arrow-middle.png b/sw-KE/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/sw-KE/images/arrow-middle.png differ
diff --git a/sw-KE/images/arrow-target.png b/sw-KE/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/sw-KE/images/arrow-target.png differ
diff --git a/sw-KE/images/background.png b/sw-KE/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/sw-KE/images/background.png differ
diff --git a/sw-KE/images/banner.png b/sw-KE/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/sw-KE/images/banner.png differ
diff --git a/sw-KE/images/blue-circle.png b/sw-KE/images/blue-circle.png
new file mode 100644
index 000000000..65c8564cc
Binary files /dev/null and b/sw-KE/images/blue-circle.png differ
diff --git a/sw-KE/images/blue-points.png b/sw-KE/images/blue-points.png
new file mode 100644
index 000000000..7c1a8049a
Binary files /dev/null and b/sw-KE/images/blue-points.png differ
diff --git a/sw-KE/images/bottom-right.png b/sw-KE/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/sw-KE/images/bottom-right.png differ
diff --git a/sw-KE/images/centre.png b/sw-KE/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/sw-KE/images/centre.png differ
diff --git a/sw-KE/images/circle-coords.png b/sw-KE/images/circle-coords.png
new file mode 100644
index 000000000..6c0d2c78b
Binary files /dev/null and b/sw-KE/images/circle-coords.png differ
diff --git a/sw-KE/images/coords_animation.gif b/sw-KE/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/sw-KE/images/coords_animation.gif differ
diff --git a/sw-KE/images/difficulty-setting.png b/sw-KE/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/sw-KE/images/difficulty-setting.png differ
diff --git a/sw-KE/images/fire_arrow.gif b/sw-KE/images/fire_arrow.gif
new file mode 100644
index 000000000..c084db578
Binary files /dev/null and b/sw-KE/images/fire_arrow.gif differ
diff --git a/sw-KE/images/five_circles.png b/sw-KE/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/sw-KE/images/five_circles.png differ
diff --git a/sw-KE/images/green-grass.png b/sw-KE/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/sw-KE/images/green-grass.png differ
diff --git a/sw-KE/images/grey-circle.png b/sw-KE/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/sw-KE/images/grey-circle.png differ
diff --git a/sw-KE/images/grey-points.png b/sw-KE/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/sw-KE/images/grey-points.png differ
diff --git a/sw-KE/images/initial_target.png b/sw-KE/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/sw-KE/images/initial_target.png differ
diff --git a/sw-KE/images/missed-points.png b/sw-KE/images/missed-points.png
new file mode 100644
index 000000000..0cd14626c
Binary files /dev/null and b/sw-KE/images/missed-points.png differ
diff --git a/sw-KE/images/outline-circles.png b/sw-KE/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/sw-KE/images/outline-circles.png differ
diff --git a/sw-KE/images/points-scored.gif b/sw-KE/images/points-scored.gif
new file mode 100644
index 000000000..e6ddac2a3
Binary files /dev/null and b/sw-KE/images/points-scored.gif differ
diff --git a/sw-KE/images/quiz-colour.png b/sw-KE/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/sw-KE/images/quiz-colour.png differ
diff --git a/sw-KE/images/random-side.png b/sw-KE/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/sw-KE/images/random-side.png differ
diff --git a/sw-KE/images/rectangle-diagram.png b/sw-KE/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/sw-KE/images/rectangle-diagram.png differ
diff --git a/sw-KE/images/showcase_rocket.png b/sw-KE/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/sw-KE/images/showcase_rocket.png differ
diff --git a/sw-KE/images/showcase_static.png b/sw-KE/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/sw-KE/images/showcase_static.png differ
diff --git a/sw-KE/images/sky_coords.png b/sw-KE/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/sw-KE/images/sky_coords.png differ
diff --git a/sw-KE/images/sky_stroke.png b/sw-KE/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/sw-KE/images/sky_stroke.png differ
diff --git a/sw-KE/images/stand_coords.png b/sw-KE/images/stand_coords.png
new file mode 100644
index 000000000..28e151045
Binary files /dev/null and b/sw-KE/images/stand_coords.png differ
diff --git a/sw-KE/images/step_4_preview.gif b/sw-KE/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/sw-KE/images/step_4_preview.gif differ
diff --git a/sw-KE/images/step_5_preview.gif b/sw-KE/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/sw-KE/images/step_5_preview.gif differ
diff --git a/sw-KE/images/target-stand.png b/sw-KE/images/target-stand.png
new file mode 100644
index 000000000..c64259beb
Binary files /dev/null and b/sw-KE/images/target-stand.png differ
diff --git a/sw-KE/images/target_area.png b/sw-KE/images/target_area.png
new file mode 100644
index 000000000..72d80ba1d
Binary files /dev/null and b/sw-KE/images/target_area.png differ
diff --git a/sw-KE/images/three-circles.png b/sw-KE/images/three-circles.png
new file mode 100644
index 000000000..90a5e243a
Binary files /dev/null and b/sw-KE/images/three-circles.png differ
diff --git a/sw-KE/images/top-left.png b/sw-KE/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/sw-KE/images/top-left.png differ
diff --git a/sw-KE/images/triangles-coords.png b/sw-KE/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/sw-KE/images/triangles-coords.png differ
diff --git a/sw-KE/images/upgrade-ideas.png b/sw-KE/images/upgrade-ideas.png
new file mode 100644
index 000000000..bfda023ae
Binary files /dev/null and b/sw-KE/images/upgrade-ideas.png differ
diff --git a/sw-KE/images/yellow-points.png b/sw-KE/images/yellow-points.png
new file mode 100644
index 000000000..5e702c248
Binary files /dev/null and b/sw-KE/images/yellow-points.png differ
diff --git a/sw-KE/meta.yml b/sw-KE/meta.yml
new file mode 100644
index 000000000..d4420e902
--- /dev/null
+++ b/sw-KE/meta.yml
@@ -0,0 +1,36 @@
+---
+title: Target practice
+hero_image: images/banner.png
+description: Use Python to draw a target and score points by hitting it with arrows
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: You will make
+ -
+ title: Create a background
+ -
+ title: Draw your target
+ completion:
+ - engaged
+ -
+ title: Fire your arrow
+ -
+ title: Score points
+ completion:
+ - internal
+ -
+ title: Quick quiz
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: Upgrade your project
+ -
+ title: What next?
diff --git a/sw-KE/python-comments-demo.txt b/sw-KE/python-comments-demo.txt
new file mode 100644
index 000000000..cb2eb5621
--- /dev/null
+++ b/sw-KE/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Setup your game here
+
+width and height of screen
+
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Set the fill color to grass
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the circle fill colour to outer
+
+x, y, width of the circle
+
+Blue
+
+Red
+
+Yellow
+
+Set the circle fill colour to inner
+
+Inner circle - x, y, width of the circle
+
+Set the circle fill colour to middle
+
+Middle circle - x, y, width of the circle
+
+The shoot_arrow function goes here
+
+Store a random number between 100 and 300
+
+Set the arrow to fill colour to wood
+
+Draw a small circle at random coordinates
+
+Get the hit colour
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Save the colour before drawing the arrow
+
+Like functions, 'if' statements are indented
+
+Import library code
+
+Keep this to run your code
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Set the fill color to grass
diff --git a/sw-KE/python-comments.txt b/sw-KE/python-comments.txt
new file mode 100644
index 000000000..160666a85
--- /dev/null
+++ b/sw-KE/python-comments.txt
@@ -0,0 +1,87 @@
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Start x, start y, width, height
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the arrow to fill colour to wood
+
+Set the stand fill colour to grass
+
+Set the circle fill colour to outer
+
+Set the circle fill colour to inner
+
+Set the circle fill colour to middle
+
+x, y, width of the circle
+
+Inner circle - x, y, width of the circle
+
+Middle circle - x, y, width of the circle
+
+Outer circle.200, 200 is the middle of the screen
+
+Blue
+
+Red
+
+Yellow
+
+Stand
+
+Outer circle
+
+Inner circle
+
+Bullseye
+
+The shoot_arrow function goes here
+
+Import library code
+
+Update to random coordinates
+
+Save the colour before drawing the arrow
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Like functions, 'if' statements are indented
+
+Setup your game here
+
+width and height
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Keep this to run your code
+
+Store a random number between 100 and 300
+
+Get the hit colour
+
+Draw a small circle at random coordinates
+
+width and height of screen
diff --git a/sw-KE/python-translatable-demo.txt b/sw-KE/python-translatable-demo.txt
new file mode 100644
index 000000000..71707d059
--- /dev/null
+++ b/sw-KE/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+wood
+
+sky
+
+grass
+
+outer
+
+inner
+
+middle
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
+
+speed
diff --git a/sw-KE/python-translatable.txt b/sw-KE/python-translatable.txt
new file mode 100644
index 000000000..75c0058cc
--- /dev/null
+++ b/sw-KE/python-translatable.txt
@@ -0,0 +1,43 @@
+sky
+
+grass
+
+wood
+
+outer
+
+inner
+
+bullseye
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You hit the bullseye, 500 points!
+
+You missed! No points!
+
+How fast do you want the arrow? slow, medium, fast
+
+You hit red, 200 points!
+
+speed
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
diff --git a/sw-KE/quiz1/question_1.md b/sw-KE/quiz1/question_1.md
new file mode 100644
index 000000000..7413e69a7
--- /dev/null
+++ b/sw-KE/quiz1/question_1.md
@@ -0,0 +1,53 @@
+## Quick quiz
+
+Answer the three questions. There are hints to guide you to the correct answer.
+
+When you have answered each question, click on **Check my answer**.
+
+Have fun!
+
+--- question ---
+---
+legend: Question 1 of 3
+---
+Here is a blue square, what are the RGB values that will create it?
+
+
+
+--- choices ---
+
+- ( ) (0, 0, 0)
+
+ --- feedback ---
+
+Not quite, when all the colour values are set to `0`, the color is **black**.
+
+ --- /feedback ---
+
+- ( ) (255, 0, 0)
+
+ --- feedback ---
+
+Not quite, colours follow the RGB model. This colour has maximum R value and no G or B, so will be **red**.
+
+ --- /feedback ---
+
+- (x) (0, 0, 255)
+
+ --- feedback ---
+
+ That's correct! Colours follow the RGB model. This colour has no R or G, but maximum B, so will be **blue**.
+
+ --- /feedback ---
+
+- ( ) (255, 255, 255)
+
+ --- feedback ---
+
+ Not quite, when all the colour values are set to the `255` maximum, the color is **white**.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/sw-KE/quiz1/question_2.md b/sw-KE/quiz1/question_2.md
new file mode 100644
index 000000000..cb8b743b2
--- /dev/null
+++ b/sw-KE/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legend: Question 2 of 3
+---
+
+In your project, you used `if` , `elif`, and `else` conditions to check which colour the arrow landed on.
+
+In the example below, a variable called `speed` has the number `6` stored in it. When this `if` statement is run, what would be printed in the output area?
+
+--- code ---
+---
+language: python
+---
+speed = 6
+
+if speed == 7: print('Super fast') elif speed == 5: print('Pretty quick') elif speed == 6: print('Very fast') else: print('Speed not recognised!')
+
+--- /code ---
+
+--- choices ---
+
+- (x) `Very fast`
+
+ --- feedback ---
+
+ That's correct! The **speed** variable has been assigned the value `6`, which makes the `speed == 6` condition **True** and prints `Very fast`.
+
+ --- /feedback ---
+
+- ( ) `Speed not recognised!`
+
+ --- feedback ---
+
+ Not quite, look at the value assigned to the **speed** variable.
+
+ --- /feedback ---
+
+- ( ) Nothing gets printed
+
+ --- feedback ---
+
+ Try again, `else` is used as a final option for when all the above conditions are false. Look through the conditions again, are any of the conditions true?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/sw-KE/quiz1/question_3.md b/sw-KE/quiz1/question_3.md
new file mode 100644
index 000000000..de44b3b7f
--- /dev/null
+++ b/sw-KE/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legend: Question 3 of 3
+---
+
+A circle is drawn using the following code:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+Which of the images below show the correct position of this circle in the output area?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the bottom-right corner, the coordinates would need to be the same as the screen size. In this example, the ellipse would be `circle(400, 400, 300)`.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the middle, the coordinates would need to be half of the screen size. In this example, `circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ That's correct! This circle is centred at coordinates (0,0), the top-left corner of the screen.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ No, this circle would have code of `circle(350, 150, 300)` to centre it towards the top-right of the screen. The `x` coordinate is how far across the screen the ellipse is, and the `y` coordinate is how far down the screen it is.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/sw-KE/step_1.md b/sw-KE/step_1.md
new file mode 100644
index 000000000..21a69d6b9
--- /dev/null
+++ b/sw-KE/step_1.md
@@ -0,0 +1,40 @@
+## You will make
+
+Use Python, with the `p5` graphics library, to draw a target and score points by hitting it with arrows.
+
+You will:
+ + Personalise your game with **RGB colours**
+ + Use **conditional statements** (`if`, `elif`, `else`) to make decisions
+ + Position shapes with **x, y coordinates**
+
+--- no-print ---
+
+### Play ▶️
+
+--- task ---
+
+
+
+Click the **Run** button below to start the game. When the dot appears on the target 🎯, click the mouse (or tap on your tablet) to fire your arrow.
+
+Have a few goes. Your score appears in the output area below the target. How does your score change when the arrow lands on the different colours?
+
+
+
+
+--- /task ---
+
+--- /no-print ---
+
+--- print-only ---
+
+
+
+--- /print-only ---
+
+
+The oldest evidence of archery comes from the Sibudu Cave in KwaZulu-Natal, South Africa. Remains of stone and bone arrowheads have been found, which date to between 60,000 and 70,000 years ago.
+
+
+
diff --git a/sw-KE/step_2.md b/sw-KE/step_2.md
new file mode 100644
index 000000000..b03ac80cf
--- /dev/null
+++ b/sw-KE/step_2.md
@@ -0,0 +1,97 @@
+## Create a background
+
+
+
+Your game needs a colourful background.
+
+
+
+{:width="300px"}
+
+
+
+
+### Open the starter project
+
+--- task ---
+
+Open the [Target practice starter](https://trinket.io/python/9973649e5c){:target="_blank"} project.
+
+If you have a Trinket account, you can click on the **Remix** button to save a copy to your **My Trinkets** library.
+
+--- /task ---
+
+### Edit the sky
+
+--- task ---
+
+The starter project has some code already written for you.
+
+Click **'Run'** to see a blue filled rectangle drawn from x=`0`, y=`0` (the top of the screen). This `400` x `250` pixels rectangle is the sky.
+
+{:width="400px"}
+
+**Tip:** 💡 Coordinates start from (x=0, y=0) in the top left corner. This might be different to other coordinate systems you have used.
+
+--- /task ---
+
+--- task ---
+
+The sky has been drawn with a black border (stroke).
+
+To turn the stroke off for all shapes add `no_stroke()` to the `setup` function:
+
+--- code ---
+---
+language: python filename: main.py — setup() line_numbers: true line_number_start: 11
+line_highlights: 15
+---
+def setup():
+# Setup your game here
+ size(400, 400) # width and height of screen frame_rate(2) no_stroke()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Run** your code again and notice 👀 that the border (stroke) has now disappeared.
+
+--- /task ---
+
+### Draw the grass
+
+--- task ---
+
+**Add** code to draw a green rectangle at the bottom of the screen.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 17
+line_highlights: 27, 28
+---
+def draw():
+# Things to do in every frame
+ global wood sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206 grass = color(149, 212, 122) wood = color(145, 96, 51) outer = color(0, 120, 180)
+
+ fill(sky)
+rect(0, 0, 400, 250)
+fill(grass) # Set the fill color to grass rect(0, 250, 400, 150) # x, y, width, height
+
+--- /code ---
+
+**Tip:** 💡 We have added comments to our code, like `# Set the fill color to grass`, to tell you what it does. You don't need to add these comments to your code, but they can be helpful to remind you what lines of code do.
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project again to view the finished background.
+
+{:width="400px"}
+
+--- /task ---
+
diff --git a/sw-KE/step_3.md b/sw-KE/step_3.md
new file mode 100644
index 000000000..39986aa1f
--- /dev/null
+++ b/sw-KE/step_3.md
@@ -0,0 +1,152 @@
+## Draw your target
+
+
+
+Your game needs a target to shoot arrows at.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a triangular stand
+
+--- task ---
+
+Set the fill colour to `wood` (brown).
+
+Draw a triangle using the x and y coordinates for each of the corners.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 27
+line_highlights: 29, 30
+---
+ fill(grass)
+rect(0, 250, 400, 150) fill(wood) # Set the stand fill colour to wood
+triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your code to see the stand for your target:
+
+{:width="400px"}
+
+--- /task ---
+
+### Draw the target circles
+
+--- task ---
+
+The largest part of the target is a blue **circle**.
+
+Set the fill colour to `outer` (blue).
+
+Draw a circle with x and y coordinates for its centre and a width.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 29
+line_highlights: 31, 32
+---
+
+ fill(wood)
+triangle(150, 350, 200, 150, 250, 350)
+fill(outer) # Set the circle fill colour to outer
+circle(200, 200, 170) # x, y, width of the circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the first large blue circle.
+
+The blue circle was drawn after the stand so it is in front:
+
+{:width="400px"}
+
+--- /task ---
+
+--- task ---
+
+👀 Find your colour variables in the `draw` function.
+
+Create two variables called `inner` and `middle` to store colours for the other circles.
+
+The `color` function expects three numbers: one each for red, green, and blue.
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 17
+line_highlights: 24, 25
+---
+def draw():
+# Things to do in every frame global wood sky = color(92, 204, 206)
+grass = color(149, 212, 122)
+wood = color(145, 96, 51)
+outer = color(0, 120, 180) # Blue
+inner = color(210, 60, 60) # Red
+middle = color(220, 200, 0) # Yellow
+
+--- /code ---
+
+--- /task ---
+
+The target is made of different-sized circles with the same centre coordinates (200, 200).
+
+--- task ---
+
+**Add** coloured circles for the inner and middle parts of the target.
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 31
+line_highlights: 35, 36, 37, 38
+---
+ fill(wood)
+triangle(150, 350, 200, 150, 250, 350)
+fill(outer)
+circle(200, 200, 170) fill(inner) # Set the circle fill colour to inner
+circle(200, 200, 110) # Inner circle - x, y, width of the circle
+fill(middle) # Set the circle fill colour to middle
+circle(200, 200, 30) # Middle circle - x, y, width of the circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project to see the target with three coloured circles.
+
+{:width="400px"}
+
+**Debug:** 🐞 Check that you have used the American spelling of 'color' (without a 'u').
+
+--- /task ---
+
+--- task ---
+
+**Choose:** 💭 Change any of the colours.
+
+[[[generic-theory-simple-colours]]]
+
+{:width="400px"}
+
+
+--- /task ---
+
+
+
diff --git a/sw-KE/step_4.md b/sw-KE/step_4.md
new file mode 100644
index 000000000..995a078e0
--- /dev/null
+++ b/sw-KE/step_4.md
@@ -0,0 +1,159 @@
+## Fire your arrow
+
+
+
+When you click or tap, an arrow will fire at the position of a moving target circle.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a target circle every frame
+
+ Computers create the effect of movement by showing lots of images one after another. Each image is called a frame .
+
+
+--- task ---
+
+Define your `shoot_arrow()` function under the comment **# The shoot_arrow function goes here**.
+
+Add code to randomly draw a brown circle within a target area:
+
+
+
+--- code ---
+---
+language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 9
+line_highlights: 10, 11, 12, 13, 14
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = randint(100, 300) # Store a random number between 100 and 300
+arrow_y = randint(100, 300) # Store a random number between 100 and 300
+fill(wood) # Set the arrow to fill colour to wood
+circle(arrow_x, arrow_y, 15) # Draw a small circle at random coordinates
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Go to the `draw` function and call your new `shoot_arrow` function.
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 42
+line_highlights: 44
+---
+ fill(middle)
+circle(200, 200, 30)
+shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run you code and see the arrow appear in a random position each frame.
+
+
+
+The background and target will be drawn over the old arrow. This means you only see one arrow at a time.
+
+--- /task ---
+
+### Get the colour hit by the arrow
+
+The `get()` function returns the colour of a pixel.
+
+
+A pixel, short for picture element, is a single coloured dot within an image. Images are made up of lots of coloured pixels.
+
+
+--- task ---
+
+Add code to `get` the colour of the pixel at the centre of the arrow and store it in the `hit_color` variable.
+
+--- code ---
+---
+language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 9
+line_highlights: 13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300)
+hit_color = get(arrow_x, arrow_y) # Get the hit colour fill(wood)
+circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+**Tip:** 💡 The code to `get` the colour needs to be **before** the code to draw the `circle` otherwise you will always save the wood colour of the arrow!
+
+--- /task ---
+
+### Print the colour when the mouse is pressed
+
+The `p5` library 'listens' for certain events, one of these is the press of the mouse button. When it detects that the button has been pressed, it will run whatever code it has been given in the `mouse_pressed` function.
+
+--- task ---
+
+Define your `mouse_pressed()` function under the comment **# The mouse_pressed function goes here**.
+
+Add code to print the amounts of red, green, and blue in the pixel the arrow lands on.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 8, 9
+---
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+print( red(hit_color), green(hit_color), blue(hit_color) )
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Make `hit_color` a **global variable** so that it can be used throughout your code:
+
+--- code ---
+---
+language: python filename: main.py - shoot_arrow() line_numbers: true line_number_start: 11
+line_highlights: 13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+global hit_color # Can be used in other functions
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300)
+hit_color = get(arrow_x, arrow_y) # Save the colour before drawing the arrow fill(wood)
+circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project.
+
+The project prints the `hit_color` each time the arrow is redrawn.
+
+
+
+**Debug:** 🐞 If you are seeing a message about `hit_color` being 'not defined', then go back to `shoot_arrow()` and check that you have the `global hit_color` line.
+
+**Debug:** 🐞 Check the `print` line really carefully for commas and brackets.
+
+--- /task ---
+
+
diff --git a/sw-KE/step_5.md b/sw-KE/step_5.md
new file mode 100644
index 000000000..e0660f134
--- /dev/null
+++ b/sw-KE/step_5.md
@@ -0,0 +1,169 @@
+## Score points
+
+
+
+Your game will add scores based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Go to the `draw()` function and add `, outer, inner, middle` to the list of global variables.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 26
+line_highlights: 28
+---
+
+def draw():
+# Things to do in every frame
+ global wood, outer, inner, middle
+sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+grass = color(149, 212, 122)
+wood = color(145, 96, 51)
+outer = color(0, 120, 180)
+inner = color(210, 60, 60)
+middle = color(220, 200, 0)
+
+--- /code ---
+
+--- /task ---
+
+
+We use conditions all the time to make decisions. We could say 'if the pencil is blunt, then sharpen it'. Similarly, `if` conditions let us write code that do something different depending on whether a condition is true or false.
+
+
+### Display the scores
+
+--- task ---
+
+Delete ❌ the `print( red(hit_color), green(hit_color), blue(hit_color) )` line of code.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 9
+---
+# The mouse_pressed function goes here
+def mouse_pressed():
+
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+`print` a message `if` the `hit_color` is equal to `outer` 🎯.
+
+Notice 👀 that the code uses two equals signs `==` to mean **equal to**.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 9, 10
+---
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!') # Like functions, 'if' statements are indented
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow on the blue outer circle to see your message.
+
+**Tip:** 💡 `frame_rate()`, in `setup`, controls how fast your game draws. If it's going too fast, set it to a lower number.
+
+
+
+**Debug:** 🐞 Make sure your code matches exactly and you indented the code inside your `if` statement.
+
+--- /task ---
+
+`elif` (else - if) can be used to add more conditions to your `if` statement. These will be read from top to bottom. As soon as a **True** condition is found, it will be actioned. The remaining conditions will be ignored.
+
+--- task ---
+
+Score points if the arrow lands on the `inner` or `middle` circles 🎯:
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 8
+line_highlights: 11, 12, 13, 14
+---
+
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!')
+elif hit_color == inner:
+print('You hit the inner circle, 200 points!')
+elif hit_color == middle:
+print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow on the inner and middle circles to see their messages.
+
+
+
+**Debug:** 🐞 Check your indentation matches the example.
+
+**Debug:** 🐞 If you see a message about `inner` or `middle` being 'not defined', then go back to `draw()` and check that they are on the line that declares variables global.
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles? ❌
+
+To do this last check, you use `else`.
+
+--- task ---
+
+Add code to `print` a message `else` none of the `if` and `elif` statements have been met.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 8
+line_highlights: 15, 16
+---
+
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!')
+elif hit_color == inner:
+print('You hit the inner circle, 200 points!')
+elif hit_color == middle:
+print('You hit the middle, 500 points!')
+else:
+print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow in the grass or sky to see the miss message.
+
+**Choose:** 💭 Change the number of points scored for the different colours if you like.
+
+
+
+--- /task ---
+
diff --git a/sw-KE/step_6.md b/sw-KE/step_6.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/sw-KE/step_6.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/sw-KE/step_7.md b/sw-KE/step_7.md
new file mode 100644
index 000000000..e479b9649
--- /dev/null
+++ b/sw-KE/step_7.md
@@ -0,0 +1,35 @@
+## Upgrade your project
+
+
+
+Personalise and add more to your project. Perhaps you could change the difficulty level or add more circles to your target.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+You could:
+
++ Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position 🟠🟣
++ Put emoji in your print messages ([here's a list of emoji](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from) 🎯
++ Make the game easier or harder by changing the `frame_rate(2)` value 💨
++ Use `input()` to ask the user which difficulty level they want to play at 🗣️
+
+--- /task ---
+
+
+
+--- collapse ---
+---
+title: Completed project
+---
+
+You can view the [completed project here](https://trinket.io/python/f686c82d8a){:target="_blank"}.
+
+--- /collapse ---
+
diff --git a/sw-KE/step_8.md b/sw-KE/step_8.md
new file mode 100644
index 000000000..867ede7b9
--- /dev/null
+++ b/sw-KE/step_8.md
@@ -0,0 +1,31 @@
+## What next?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+--- print-only ---
+
+
+
+--- /print-only ---
+
+--- no-print ---
+
+--- task ---
+
+**Try it:** Your program will adjust the animation based on how much fuel you give it and will succeed or fail in reaching orbit. How much fuel do you want to use to reach orbit but not waste too much extra fuel?
+
+**Tip:** Around 25,000kg should be enough, but experiment with the numbers to see what happens.
+
+
+
+
+
+--- /task ---
+
+--- /no-print ---
+
+If you want to have more fun exploring Python, then you could try out any of [these projects](https://projects.raspberrypi.org/en/projects?software%5B%5D=python).
+
+
+
diff --git a/uk-UA/code/target-practice-solution/main.py b/uk-UA/code/target-practice-solution/main.py
new file mode 100644
index 000000000..923eaeb0e
--- /dev/null
+++ b/uk-UA/code/target-practice-solution/main.py
@@ -0,0 +1,55 @@
+## Імпортуй код бібліотеки
+
+from p5 import *
+from random import randint
+
+
+# Тут буде функція mouse_pressed
+def mouse_pressed():
+ # print('🎯')
+ if hit_colour == Color("blue").hex:
+ print("Стріла в зовнішньому колі — 50 балів!")
+ elif hit_colour == Color("red").hex:
+ print("Стріла у внутрішньому колі — 200 балів!")
+ elif hit_colour == Color("yellow").hex:
+ print("Стріла у центрі — 500 балів!")
+ else:
+ print("Стріла не влучила! Нуль балів!")
+
+
+# Тут буде функція shoot_arrow
+def shoot_arrow():
+ global hit_colour
+ arrow_x = randint(100, 300)
+ arrow_y = randint(100, 300)
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ fill("brown")
+ circle(arrow_x, arrow_y, 15)
+
+
+def setup():
+ # Налаштуй свою гру тут
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Що відбувається на кожному кадрі
+ fill("cyan")
+ rect(0, 0, 400, 250)
+ fill("lightgreen")
+ rect(0, 250, 400, 150)
+ fill("brown")
+ triangle(150, 350, 200, 150, 250, 350)
+ fill("blue")
+ circle(200, 200, 170)
+ fill("red")
+ circle(200, 200, 110) # Намалюй внутрішнє коло
+ fill("yellow")
+ circle(200, 200, 30) # Намалюй середнє коло
+ shoot_arrow()
+
+
+# Цей рядок запускає код
+run(frame_rate=2)
diff --git a/uk-UA/code/target-practice-solution/project_config.yml b/uk-UA/code/target-practice-solution/project_config.yml
new file mode 100644
index 000000000..013fa87cd
--- /dev/null
+++ b/uk-UA/code/target-practice-solution/project_config.yml
@@ -0,0 +1,3 @@
+name: 'Влучний постріл — приклад'
+identifier: 'target-practice-solution'
+type: 'python'
diff --git a/uk-UA/code/target-practice-starter/main.py b/uk-UA/code/target-practice-starter/main.py
new file mode 100644
index 000000000..77614c2df
--- /dev/null
+++ b/uk-UA/code/target-practice-starter/main.py
@@ -0,0 +1,24 @@
+## Імпортуй код бібліотеки
+from p5 import *
+from random import randint
+
+# Тут буде функція mouse_pressed
+
+
+# Тут буде функція shoot_arrow
+
+
+def setup():
+ # Налаштуй свою гру тут
+ size(400, 400)
+ no_stroke()
+
+
+def draw():
+ # Що відбувається на кожному кадрі
+ fill("cyan")
+ rect(0, 0, 400, 250)
+
+
+# Цей рядок запускає код
+run(frame_rate=2)
diff --git a/uk-UA/code/target-practice-starter/project_config.yml b/uk-UA/code/target-practice-starter/project_config.yml
new file mode 100644
index 000000000..4b0746586
--- /dev/null
+++ b/uk-UA/code/target-practice-starter/project_config.yml
@@ -0,0 +1,3 @@
+name: "Влучний постріл"
+identifier: 'target-practice-starter'
+type: 'python'
diff --git a/uk-UA/images/alternative-colours.png b/uk-UA/images/alternative-colours.png
new file mode 100644
index 000000000..e630dd54b
Binary files /dev/null and b/uk-UA/images/alternative-colours.png differ
diff --git a/uk-UA/images/animation_bg_erase.gif b/uk-UA/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/uk-UA/images/animation_bg_erase.gif differ
diff --git a/uk-UA/images/animation_no_bg_erase.gif b/uk-UA/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/uk-UA/images/animation_no_bg_erase.gif differ
diff --git a/uk-UA/images/arrow-centre.png b/uk-UA/images/arrow-centre.png
new file mode 100644
index 000000000..14dba17ee
Binary files /dev/null and b/uk-UA/images/arrow-centre.png differ
diff --git a/uk-UA/images/arrow-middle.png b/uk-UA/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/uk-UA/images/arrow-middle.png differ
diff --git a/uk-UA/images/arrow-target.png b/uk-UA/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/uk-UA/images/arrow-target.png differ
diff --git a/uk-UA/images/background.png b/uk-UA/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/uk-UA/images/background.png differ
diff --git a/uk-UA/images/banner.png b/uk-UA/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/uk-UA/images/banner.png differ
diff --git a/uk-UA/images/blue-circle.png b/uk-UA/images/blue-circle.png
new file mode 100644
index 000000000..054b612e8
Binary files /dev/null and b/uk-UA/images/blue-circle.png differ
diff --git a/uk-UA/images/blue-points.png b/uk-UA/images/blue-points.png
new file mode 100644
index 000000000..070075759
Binary files /dev/null and b/uk-UA/images/blue-points.png differ
diff --git a/uk-UA/images/blue_circle_points.gif b/uk-UA/images/blue_circle_points.gif
new file mode 100644
index 000000000..8458c2b8f
Binary files /dev/null and b/uk-UA/images/blue_circle_points.gif differ
diff --git a/uk-UA/images/bottom-right.png b/uk-UA/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/uk-UA/images/bottom-right.png differ
diff --git a/uk-UA/images/centre.png b/uk-UA/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/uk-UA/images/centre.png differ
diff --git a/uk-UA/images/circle-coords.png b/uk-UA/images/circle-coords.png
new file mode 100644
index 000000000..a888286e1
Binary files /dev/null and b/uk-UA/images/circle-coords.png differ
diff --git a/uk-UA/images/coords_animation.gif b/uk-UA/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/uk-UA/images/coords_animation.gif differ
diff --git a/uk-UA/images/difficulty-setting.png b/uk-UA/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/uk-UA/images/difficulty-setting.png differ
diff --git a/uk-UA/images/fire_arrow.gif b/uk-UA/images/fire_arrow.gif
new file mode 100644
index 000000000..924ba34af
Binary files /dev/null and b/uk-UA/images/fire_arrow.gif differ
diff --git a/uk-UA/images/five_circles.png b/uk-UA/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/uk-UA/images/five_circles.png differ
diff --git a/uk-UA/images/green-grass.png b/uk-UA/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/uk-UA/images/green-grass.png differ
diff --git a/uk-UA/images/grey-circle.png b/uk-UA/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/uk-UA/images/grey-circle.png differ
diff --git a/uk-UA/images/grey-points.png b/uk-UA/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/uk-UA/images/grey-points.png differ
diff --git a/uk-UA/images/initial_target.png b/uk-UA/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/uk-UA/images/initial_target.png differ
diff --git a/uk-UA/images/missed-points.png b/uk-UA/images/missed-points.png
new file mode 100644
index 000000000..74162ddd2
Binary files /dev/null and b/uk-UA/images/missed-points.png differ
diff --git a/uk-UA/images/missed_no_points.gif b/uk-UA/images/missed_no_points.gif
new file mode 100644
index 000000000..7f3e3a66d
Binary files /dev/null and b/uk-UA/images/missed_no_points.gif differ
diff --git a/uk-UA/images/outline-circles.png b/uk-UA/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/uk-UA/images/outline-circles.png differ
diff --git a/uk-UA/images/points-scored.gif b/uk-UA/images/points-scored.gif
new file mode 100644
index 000000000..7f3e3a66d
Binary files /dev/null and b/uk-UA/images/points-scored.gif differ
diff --git a/uk-UA/images/quiz-colour.png b/uk-UA/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/uk-UA/images/quiz-colour.png differ
diff --git a/uk-UA/images/random-side.png b/uk-UA/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/uk-UA/images/random-side.png differ
diff --git a/uk-UA/images/rectangle-diagram.png b/uk-UA/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/uk-UA/images/rectangle-diagram.png differ
diff --git a/uk-UA/images/showcase_rocket.png b/uk-UA/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/uk-UA/images/showcase_rocket.png differ
diff --git a/uk-UA/images/showcase_static.png b/uk-UA/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/uk-UA/images/showcase_static.png differ
diff --git a/uk-UA/images/sky_coords.png b/uk-UA/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/uk-UA/images/sky_coords.png differ
diff --git a/uk-UA/images/sky_stroke.png b/uk-UA/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/uk-UA/images/sky_stroke.png differ
diff --git a/uk-UA/images/stand_coords.png b/uk-UA/images/stand_coords.png
new file mode 100644
index 000000000..2002bae5f
Binary files /dev/null and b/uk-UA/images/stand_coords.png differ
diff --git a/uk-UA/images/step_4_preview.gif b/uk-UA/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/uk-UA/images/step_4_preview.gif differ
diff --git a/uk-UA/images/step_5_preview.gif b/uk-UA/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/uk-UA/images/step_5_preview.gif differ
diff --git a/uk-UA/images/target-stand.png b/uk-UA/images/target-stand.png
new file mode 100644
index 000000000..c65d89363
Binary files /dev/null and b/uk-UA/images/target-stand.png differ
diff --git a/uk-UA/images/target_area.png b/uk-UA/images/target_area.png
new file mode 100644
index 000000000..1e5c72120
Binary files /dev/null and b/uk-UA/images/target_area.png differ
diff --git a/uk-UA/images/target_printed.gif b/uk-UA/images/target_printed.gif
new file mode 100644
index 000000000..b29a244fe
Binary files /dev/null and b/uk-UA/images/target_printed.gif differ
diff --git a/uk-UA/images/three-circles.png b/uk-UA/images/three-circles.png
new file mode 100644
index 000000000..13a8dd8ed
Binary files /dev/null and b/uk-UA/images/three-circles.png differ
diff --git a/uk-UA/images/top-left.png b/uk-UA/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/uk-UA/images/top-left.png differ
diff --git a/uk-UA/images/triangles-coords.png b/uk-UA/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/uk-UA/images/triangles-coords.png differ
diff --git a/uk-UA/images/upgrade-ideas.png b/uk-UA/images/upgrade-ideas.png
new file mode 100644
index 000000000..34b87678d
Binary files /dev/null and b/uk-UA/images/upgrade-ideas.png differ
diff --git a/uk-UA/images/yellow-points.png b/uk-UA/images/yellow-points.png
new file mode 100644
index 000000000..90c285f39
Binary files /dev/null and b/uk-UA/images/yellow-points.png differ
diff --git a/uk-UA/meta.yml b/uk-UA/meta.yml
new file mode 100644
index 000000000..869398d91
--- /dev/null
+++ b/uk-UA/meta.yml
@@ -0,0 +1,41 @@
+---
+title: Влучний постріл
+hero_image: images/banner.png
+description: За допомогою Python намалюй мішень та набирай бали, влучаючи в неї стрілами
+meta_title: Проєкти з кодування для дітей і підлітків | Влучний постріл
+meta_description: Вивчай Python за допомогою проєктів програмування Raspberry Pi Foundation для дітей і підлітків. За допомогою Python намалюй ціль і набирай бали, влучаючи в неї стрілами.
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: Що ти зробиш
+ -
+ title: Намалюй траву
+ -
+ title: Намалюй мішень
+ completion:
+ - engaged
+ -
+ title: Додай стрілу
+ -
+ title: У який колір влучила стріла?
+ -
+ title: Набирай бали
+ completion:
+ - internal
+ -
+ title: Швидкий тест
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: Додаткове завдання
+ challenge: true
+ -
+ title: Що ти тепер вмієш?
diff --git a/uk-UA/python-comments-demo.txt b/uk-UA/python-comments-demo.txt
new file mode 100644
index 000000000..86261a0a7
--- /dev/null
+++ b/uk-UA/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Setup your game here
+
+width and height of screen
+
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Set the fill colour to grass
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the circle fill colour to outer
+
+x, y, width of the circle
+
+Blue
+
+Red
+
+Yellow
+
+Set the circle fill colour to inner
+
+Inner circle - x, y, width of the circle
+
+Set the circle fill colour to middle
+
+Middle circle - x, y, width of the circle
+
+The shoot_arrow function goes here
+
+Store a random number between 100 and 300
+
+Set the arrow to fill colour to wood
+
+Draw a small circle at random coordinates
+
+Get the hit colour
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Save the colour before drawing the arrow
+
+Like functions, 'if' statements are indented
+
+Import library code
+
+Keep this to run your code
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Set the fill colour to grass
diff --git a/uk-UA/python-comments.txt b/uk-UA/python-comments.txt
new file mode 100644
index 000000000..a149b3a51
--- /dev/null
+++ b/uk-UA/python-comments.txt
@@ -0,0 +1,27 @@
+Що відбувається на кожному кадрі
+
+Намалюй внутрішнє коло
+
+Намалюй центральне коло
+
+Тут буде функція shoot_arrow
+
+Тут буде функція mouse_pressed
+
+Стріла в зовнішньому колі — 50 балів!
+
+Стріла у внутрішньому колі — 200 балів!
+
+Стріла у центрі — 500 балів!
+
+Стріла у центрі — 500 балів!
+
+Стріла не влучила! Нуль балів!
+
+Надзвичайно швидко
+
+Досить швидко
+
+Дуже швидко
+
+Не вдається розпізнати швидкість!
\ No newline at end of file
diff --git a/uk-UA/python-translatable-demo.txt b/uk-UA/python-translatable-demo.txt
new file mode 100644
index 000000000..71707d059
--- /dev/null
+++ b/uk-UA/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+wood
+
+sky
+
+grass
+
+outer
+
+inner
+
+middle
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
+
+speed
diff --git a/uk-UA/python-translatable.txt b/uk-UA/python-translatable.txt
new file mode 100644
index 000000000..1e4f01f6b
--- /dev/null
+++ b/uk-UA/python-translatable.txt
@@ -0,0 +1,9 @@
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_colour
+
+speed
\ No newline at end of file
diff --git a/uk-UA/quiz1/question_1.md b/uk-UA/quiz1/question_1.md
new file mode 100644
index 000000000..af366ccb3
--- /dev/null
+++ b/uk-UA/quiz1/question_1.md
@@ -0,0 +1,60 @@
+## Швидкий тест
+
+Дай відповідь на три запитання. Підказки допоможуть знайти правильну відповідь.
+
+Відповівши на питання, натисни на **Перевірити мою відповідь**.
+
+Успіхів!
+
+--- question ---
+---
+legend: Питання 1 з 3
+---
+У цьому проєкті ми додали `randint(100, 300)` до функції `shoot_arrow()`. Що робить `randint(100, 300)`?
+
+--- code ---
+---
+language: python
+---
+
+def shoot_arrow(): global hit_colour arrow_x = randint(100, 300) arrow_y = randint(100, 300)
+
+--- /code ---
+
+--- choices ---
+
+- (x) Вибирає випадкове ціле число від 100 до 300.
+
+ --- feedback ---
+
+Правильно. randint(100, 300) вибирає випадкову координату x для твоєї стріли.
+
+ --- /feedback ---
+
+- ( ) Змушує стрілу довільно рухатися по екрану.
+
+ --- feedback ---
+
+Не зовсім так. Ця частина коду допомагає стрілі рухатися випадковим чином, але для досягнення цієї мети тобі потрібен інший код.
+
+ --- /feedback ---
+
+- () Визначає колір, на який потрапила стріла.
+
+ --- feedback ---
+
+ Не зовсім так. Для отримання кольору використовувалася б функція get().
+
+ --- /feedback ---
+
+- ( ) Малює коло довільного розміру.
+
+ --- feedback ---
+
+ Не зовсім так. Для малювання кола використовувалася б функція circle().
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/uk-UA/quiz1/question_2.md b/uk-UA/quiz1/question_2.md
new file mode 100644
index 000000000..7dedfafe1
--- /dev/null
+++ b/uk-UA/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legend: Питання 2 з 3
+---
+
+У твоєму проєкті використовувалися умови `if`, `elif` та `else`, щоб перевірити, на який колір влучила стріла.
+
+У наступному прикладі змінна з назвою `speed` зберігає число `6`. Що буде надруковано в області виводу, коли ми запустимо умову `if`?
+
+--- code ---
+---
+language: python
+---
+speed = 6
+
+if speed == 7: print('Надзвичайно швидко') elif speed == 5: print('Досить швидко') elif speed == 6: print('Дуже швидко') else: print('Не вдається розпізнати швидкість!')
+
+--- /code ---
+
+--- choices ---
+
+- (x) `Дуже швидко`
+
+ --- feedback ---
+
+ Правильно! Змінній **speed** було присвоєно значення `6`. Це означає, що умова `speed == 6` **справджується** (True), і код виведе на екран `Дуже швидко`.
+
+ --- /feedback ---
+
+- ( ) `Не вдається розпізнати швидкість!`
+
+ --- feedback ---
+
+ Не зовсім так. Подивися на значення, присвоєне змінній **speed**.
+
+ --- /feedback ---
+
+- ( ) Нічого не буде надруковано
+
+ --- feedback ---
+
+ Спробуй ще раз. `else` використовується тоді, коли всі попередні умови є хибними. Подивись ще раз на умови, чи справджуються вони?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/uk-UA/quiz1/question_3.md b/uk-UA/quiz1/question_3.md
new file mode 100644
index 000000000..02bac3521
--- /dev/null
+++ b/uk-UA/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legend: Питання 3 з 3
+---
+
+За допомогою наступного коду малюється коло:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+На якому з наведених нижче зображень показано правильне положення кола в області виводу результатів?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Не зовсім так. Для центрування кола в правому нижньому куті необхідно, щоб його координати збігалися з розміром екрана. У нашому прикладі еліпс матиме такий вигляд: `circle(400, 400, 300)`.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Не зовсім так. Щоб відцентрувати коло посередині, координати повинні бути вдвічі меншими за розмір екрана. У нашому прикладі це було б `circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ Правильно! Центр цього кола знаходиться в точці з координатами (0,0) — верхньому лівому куті екрана.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Ні, щоб відцентрувати коло у верхньому правому куті екрана, його код мав би бути `circle(350, 150, 300)`. Координата `x` встановлює позицію еліпса на екрані по горизонталі, а координата `y` встановлює позицію по вертикалі.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/uk-UA/step_1.md b/uk-UA/step_1.md
new file mode 100644
index 000000000..d806bb3b8
--- /dev/null
+++ b/uk-UA/step_1.md
@@ -0,0 +1,29 @@
+## Що ти зробиш
+
+За допомогою Python ти намалюєш мішень та зароблятимеш бали, влучаючи в неї стрілами.
+
+--- print-only ---
+
+{:width="640px"}
+
+--- /print-only ---
+
+--- no-print ---
+
+
+
+Натисни кнопку **Run** (Запуск) внизу, щоб запустити гру. Коли на мішені 🎯 з'явиться крапка, клацни мишкою (або торкнись екрану планшета), щоб випустити стрілу.
+
+
+
+
+
+--- /no-print ---
+
+
+
+
+
diff --git a/uk-UA/step_2.md b/uk-UA/step_2.md
new file mode 100644
index 000000000..405500af9
--- /dev/null
+++ b/uk-UA/step_2.md
@@ -0,0 +1,37 @@
+## Намалюй траву
+
+--- task ---
+
+Відкрий [початковий проєкт «Влучний постріл»](https://editor.raspberrypi.org/en/projects/target-practice-starter){:target="_blank"}.
+
+--- /task ---
+
+--- task ---
+
+**Додай** код, щоб намалювати зелений прямокутник у нижній частині екрана. Це буде трава.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 17
+line_highlights: 21-22
+---
+def draw(): # Things to do in every frame fill('cyan')
+rect(0, 0, 400, 250)
+fill('lightgreen')
+rect(0, 250, 400, 150)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Протестуй:** запусти свій проєкт, щоб побачити тло.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/uk-UA/step_3.md b/uk-UA/step_3.md
new file mode 100644
index 000000000..b14b85e74
--- /dev/null
+++ b/uk-UA/step_3.md
@@ -0,0 +1,115 @@
+## Намалюй мішень
+
+
+
+У твоїй грі потрібно намалювати мішень, в яку можна випускати стріли.
+
+
+
+{:width="300px"}
+
+
+
+
+### Намалюй підставку у вигляді трикутника
+
+--- task ---
+
+Встанови колір заливки `brown` (коричневий).
+
+Намалюй трикутник (англійською triangle), використовуючи координати x та y для кожного з кутів.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 21
+line_highlights: 23-24
+---
+
+ fill('lightgreen')
+ rect(0, 250, 400, 150)
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Протестуй:** запусти код, щоб побачити підставку для мішені:
+
+{:width="400px"}
+
+--- /task ---
+
+### Намалюй кола мішені
+
+--- task ---
+
+Найбільша частина мішені — це синє **коло** (англійською circle).
+
+Встанови колір заливки `blue` (синій).
+
+Намалюй коло з координатами x та y (де буде його центр) та шириною.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 23
+line_highlights: 25-26
+---
+
+ fill('brown')
+ triangle(150, 350, 200, 150, 250, 350)
+ fill('blue')
+ circle(200, 200, 170)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Протестуй:** запусти код, щоб побачити перше велике синє коло.
+
+Ми намалювали синє коло після підставки, тому воно знаходиться попереду.
+
+{:width="400px"}
+
+--- /task ---
+
+Мішень складається з кіл різного розміру з однаковими координатами центру (200, 200).
+
+--- task ---
+
+**Додай** кольорові кола для внутрішньої та центральної частин мішені.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 25
+line_highlights: 27-30
+---
+
+ fill('blue')
+ circle(200, 200, 170)
+ fill('red')
+ circle(200, 200, 110) # Draw the inner circle
+ fill('yellow')
+ circle(200, 200, 30) # Draw the middle circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Протестуй:** запусти свій проєкт, щоб побачити мішень з трьома кольоровими колами.
+
+{:width="400px"}
+
+--- /task ---
+
+--- save ---
diff --git a/uk-UA/step_4.md b/uk-UA/step_4.md
new file mode 100644
index 000000000..0ad2f975e
--- /dev/null
+++ b/uk-UA/step_4.md
@@ -0,0 +1,88 @@
+## Додай стрілу
+
+
+
+Додайте найменше коло — це буде стріла.
+
+
+
+{:width="300px"}
+
+
+
+
+### Куди ти поцілиш?
+
+--- task ---
+
+Додай функцію, яка малюватиме коричневе коло з координатами `200`, `200`.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 8
+line_highlights: 9-13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = 200 arrow_y = 200 fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Виклич цю нову функцію `shoot_arrow()`{:.language-python} (з англійської «пустити стрілу») наприкінці своєї функції `draw()`{:.language-python} (з англійської «малювати»).
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 33
+line_highlights: 35
+---
+
+ fill('yellow')
+ circle(200, 200, 30)
+ shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Протестуй:** натисни на кнопку **Run**. Ти маєш побачити стрілу в центрі.
+
+
+
+
+--- /task ---
+
+Стріла повинна рухатися випадковим чином.
+
+
+--- task ---
+
+Зміни код так, щоб змінні `arrow_x`{:.language-python} і `arrow_y`{:.language-python} вибирали випадкове число від 100 до 300.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10-11
+---
+def shoot_arrow(): arrow_x = randint(100, 300) arrow_y = randint(100, 300) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+
+--- task ---
+
+
+**Протестуй:** натисни на кнопку **Run**. Ти маєш побачити, як стріла рухається навколо цілі.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/uk-UA/step_5.md b/uk-UA/step_5.md
new file mode 100644
index 000000000..62ea246ad
--- /dev/null
+++ b/uk-UA/step_5.md
@@ -0,0 +1,80 @@
+## У який колір влучила стріла?
+
+Тепер ти додаси код, який буде визначати колір місця, куди влучила стріла.
+
+### Визнач колір, на який потрапила стріла
+
+--- task ---
+
+Додай нову **глобальну змінну** під назвою `hit_colour` (з англійської «колір, у який влучила стріла»).
+
+Додай код який буде `діставати` (англійською get) колір пікселя з центру стріли та зберігати його у змінній `hit_color`.
+
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 9
+line_highlights: 10, 13, 14
+---
+def shoot_arrow(): global hit_colour
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300) hit_colour = get(arrow_x, arrow_y).hex print(hit_colour) fill('brown') circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+**Порада:** код для визначення кольору (`get`) повинен бути **перед** кодом, який малює коло (`circle`). Інакше ти будеш постійно зберігати коричневий колір стріли!
+
+--- /task ---
+
+--- task ---
+
+**Протестуй:** натисни на кнопку **Run**. Ти маєш бачити кольори, що друкуються у **полі для вихідного тексту** у шістнадцятковому форматі.
+
+--- /task ---
+
+### Запускай код, коли натиснута кнопка миші
+
+--- task ---
+
+Додай значок коментаря # перед рядком, який виводить колір. Це означає, що цей рядок не буде виконуватися.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 13
+line_highlights: 14
+---
+
+ hit_colour = get(arrow_x, arrow_y).hex
+ # print(hit_colour)
+ circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Додай код, щоб **коли натискалася кнопка миші**, у полі для вихідного тексту виводилось емоджі мішені 🎯.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 5
+line_highlights: 6-7
+---
+# The mouse_pressed function goes here
+def mouse_pressed():
+print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Протестуй:** натисни на кнопку **Run**. Ти маєш бачити символ мішені 🎯 щоразу, як клацаєш мишкою на мішені.
+
+
+
+--- /task ---
+
+--- save ---
\ No newline at end of file
diff --git a/uk-UA/step_6.md b/uk-UA/step_6.md
new file mode 100644
index 000000000..b1acc75a3
--- /dev/null
+++ b/uk-UA/step_6.md
@@ -0,0 +1,112 @@
+## Набирай бали
+
+
+
+Додай рахунок залежно від того, куди влучить стріла.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Додай символ коментаря # перед рядком, який виводить 🎯, щоб він більше не виконувався.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 7
+---
+def mouse_pressed(): # print('🎯')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Виведи повідомлення, **якщо** колір `hit_colour`{:.language-python} дорівнює кольору `зовнішнього` кола (синьому).
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 8-9
+---
+def mouse_pressed():
+# print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!')
+
+--- /code ---
+
+**Порада:** якщо твоє зовнішнє коло іншого кольору, тобі потрібно буде замінити `blue` на назву вибраного тобою кольору англійською мовою.
+
+--- /task ---
+
+--- task ---
+
+**Протестуй:** натисни на кнопку **Run**. Зачекай, поки стріла опиниться на синьому колі, а потім натисни ліву кнопку миші. 
+
+--- /task ---
+
+Щоб додати більше умов до виразу `if`{:.language-python}, можна використовувати `elif`{:.language-python}.
+
+--- task ---
+
+Додай рядки коду, які рахуватимуть бали у випадку потрапляння у **внутрішнє** або **середнє** коло.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 6
+line_highlights: 10-14
+---
+
+def mouse_pressed(): # print('🎯') if hit_colour == Color('blue').hex: print('You hit the outer circle, 50 points!') elif hit_colour == Color('red').hex: print('You hit the inner circle, 200 points!') elif hit_colour == Color('yellow').hex: print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Протестуй:** натисни кнопку **Run**. Ти маєш бачити рахунок щоразу, як стріла влучає у мішень.
+
+
+
+--- /task ---
+
+### Мимо мішені
+
+Тобі треба вирішити: що буде, якщо стріла не влучить у мішень?
+
+Щоб виконати цю перевірку, використай `else`{:.language-python}.
+
+--- task ---
+
+Додай код, який виводитиме повідомлення (`print`), коли жодна з умов `if` або `elif` не виконалась.
+
+--- code ---
+---
+language: python line_numbers: true line_number_start: 12
+line_highlights: 14-15
+---
+
+ elif hit_colour == Color('yellow').hex:
+ print('You hit the middle, 500 points!')
+ else:
+ print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Протестуй:** натисни на кнопку **Run**. Спробуй влучити в траву або небо, щоб побачити повідомлення про промах.
+
+
+
+--- /task ---
+
+--- save ---
diff --git a/uk-UA/step_7.md b/uk-UA/step_7.md
new file mode 100644
index 000000000..89468759d
--- /dev/null
+++ b/uk-UA/step_7.md
@@ -0,0 +1 @@
+## Швидкий тест
\ No newline at end of file
diff --git a/uk-UA/step_8.md b/uk-UA/step_8.md
new file mode 100644
index 000000000..a2089363e
--- /dev/null
+++ b/uk-UA/step_8.md
@@ -0,0 +1,36 @@
+## Додаткове завдання
+
+--- challenge ---
+
+
+Ти можеш:
+
+
+--- task ---
+
+Додати `четверте` і `пʼяте` коло інших кольорів, за які зараховується різна кількість балів залежно від їхнього розташування.
+
+--- /task ---
+
+--- task ---
+
+Додати емоджі до повідомлень print (можеш скопіювати їх із цього [списку емоджі](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"})
+
+--- /task ---
+
+--- task ---
+
+Зробити гру легшою або складнішою, змінивши значення `frame_rate(2)`
+
+
+--- /task ---
+
+--- task ---
+
+Додати змінну, яка відстежуватиме загальну кількість балів. Щоразу як стріла влучає у мішень, до значення змінної має додаватися правильна кількість балів.
+
+--- /task ---
+
+
+
+--- /challenge ---
diff --git a/uk-UA/step_9.md b/uk-UA/step_9.md
new file mode 100644
index 000000000..aa7f182ee
--- /dev/null
+++ b/uk-UA/step_9.md
@@ -0,0 +1,21 @@
+## Що робити далі?
+
+Якщо ти йдеш напрямом [Вступ до Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro), можеш переходити до наступного проєкту — [Ракета летить у космос](https://projects.raspberrypi.org/en/projects/rocket-launch). У цьому проєкті ти створиш інтерактивну анімацію ракети, яка виводить супутник на орбіту.
+
+\--- print-only ---
+
+{:width="600px"}
+
+\--- /print-only ---
+
+\--- no-print ---
+
+Натисни кнопку **Run**, щоб побачити приклад цього проєкту.
+
+
+
+\--- /no-print ---
+
+Або чому б не спробувати інший проєкт у [Python](https://projects.raspberrypi.org/en/projects?software%5B%5D=python).
+
diff --git a/xh-ZA/images/alternative-colours.png b/xh-ZA/images/alternative-colours.png
new file mode 100644
index 000000000..a688ac942
Binary files /dev/null and b/xh-ZA/images/alternative-colours.png differ
diff --git a/xh-ZA/images/animation_bg_erase.gif b/xh-ZA/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/xh-ZA/images/animation_bg_erase.gif differ
diff --git a/xh-ZA/images/animation_no_bg_erase.gif b/xh-ZA/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/xh-ZA/images/animation_no_bg_erase.gif differ
diff --git a/xh-ZA/images/arrow-middle.png b/xh-ZA/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/xh-ZA/images/arrow-middle.png differ
diff --git a/xh-ZA/images/arrow-target.png b/xh-ZA/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/xh-ZA/images/arrow-target.png differ
diff --git a/xh-ZA/images/background.png b/xh-ZA/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/xh-ZA/images/background.png differ
diff --git a/xh-ZA/images/banner.png b/xh-ZA/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/xh-ZA/images/banner.png differ
diff --git a/xh-ZA/images/blue-circle.png b/xh-ZA/images/blue-circle.png
new file mode 100644
index 000000000..65c8564cc
Binary files /dev/null and b/xh-ZA/images/blue-circle.png differ
diff --git a/xh-ZA/images/blue-points.png b/xh-ZA/images/blue-points.png
new file mode 100644
index 000000000..7c1a8049a
Binary files /dev/null and b/xh-ZA/images/blue-points.png differ
diff --git a/xh-ZA/images/bottom-right.png b/xh-ZA/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/xh-ZA/images/bottom-right.png differ
diff --git a/xh-ZA/images/centre.png b/xh-ZA/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/xh-ZA/images/centre.png differ
diff --git a/xh-ZA/images/circle-coords.png b/xh-ZA/images/circle-coords.png
new file mode 100644
index 000000000..6c0d2c78b
Binary files /dev/null and b/xh-ZA/images/circle-coords.png differ
diff --git a/xh-ZA/images/coords_animation.gif b/xh-ZA/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/xh-ZA/images/coords_animation.gif differ
diff --git a/xh-ZA/images/difficulty-setting.png b/xh-ZA/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/xh-ZA/images/difficulty-setting.png differ
diff --git a/xh-ZA/images/fire_arrow.gif b/xh-ZA/images/fire_arrow.gif
new file mode 100644
index 000000000..c084db578
Binary files /dev/null and b/xh-ZA/images/fire_arrow.gif differ
diff --git a/xh-ZA/images/five_circles.png b/xh-ZA/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/xh-ZA/images/five_circles.png differ
diff --git a/xh-ZA/images/green-grass.png b/xh-ZA/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/xh-ZA/images/green-grass.png differ
diff --git a/xh-ZA/images/grey-circle.png b/xh-ZA/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/xh-ZA/images/grey-circle.png differ
diff --git a/xh-ZA/images/grey-points.png b/xh-ZA/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/xh-ZA/images/grey-points.png differ
diff --git a/xh-ZA/images/initial_target.png b/xh-ZA/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/xh-ZA/images/initial_target.png differ
diff --git a/xh-ZA/images/missed-points.png b/xh-ZA/images/missed-points.png
new file mode 100644
index 000000000..0cd14626c
Binary files /dev/null and b/xh-ZA/images/missed-points.png differ
diff --git a/xh-ZA/images/outline-circles.png b/xh-ZA/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/xh-ZA/images/outline-circles.png differ
diff --git a/xh-ZA/images/points-scored.gif b/xh-ZA/images/points-scored.gif
new file mode 100644
index 000000000..e6ddac2a3
Binary files /dev/null and b/xh-ZA/images/points-scored.gif differ
diff --git a/xh-ZA/images/quiz-colour.png b/xh-ZA/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/xh-ZA/images/quiz-colour.png differ
diff --git a/xh-ZA/images/random-side.png b/xh-ZA/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/xh-ZA/images/random-side.png differ
diff --git a/xh-ZA/images/rectangle-diagram.png b/xh-ZA/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/xh-ZA/images/rectangle-diagram.png differ
diff --git a/xh-ZA/images/showcase_rocket.png b/xh-ZA/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/xh-ZA/images/showcase_rocket.png differ
diff --git a/xh-ZA/images/showcase_static.png b/xh-ZA/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/xh-ZA/images/showcase_static.png differ
diff --git a/xh-ZA/images/sky_coords.png b/xh-ZA/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/xh-ZA/images/sky_coords.png differ
diff --git a/xh-ZA/images/sky_stroke.png b/xh-ZA/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/xh-ZA/images/sky_stroke.png differ
diff --git a/xh-ZA/images/stand_coords.png b/xh-ZA/images/stand_coords.png
new file mode 100644
index 000000000..28e151045
Binary files /dev/null and b/xh-ZA/images/stand_coords.png differ
diff --git a/xh-ZA/images/step_4_preview.gif b/xh-ZA/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/xh-ZA/images/step_4_preview.gif differ
diff --git a/xh-ZA/images/step_5_preview.gif b/xh-ZA/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/xh-ZA/images/step_5_preview.gif differ
diff --git a/xh-ZA/images/target-stand.png b/xh-ZA/images/target-stand.png
new file mode 100644
index 000000000..c64259beb
Binary files /dev/null and b/xh-ZA/images/target-stand.png differ
diff --git a/xh-ZA/images/target_area.png b/xh-ZA/images/target_area.png
new file mode 100644
index 000000000..72d80ba1d
Binary files /dev/null and b/xh-ZA/images/target_area.png differ
diff --git a/xh-ZA/images/three-circles.png b/xh-ZA/images/three-circles.png
new file mode 100644
index 000000000..90a5e243a
Binary files /dev/null and b/xh-ZA/images/three-circles.png differ
diff --git a/xh-ZA/images/top-left.png b/xh-ZA/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/xh-ZA/images/top-left.png differ
diff --git a/xh-ZA/images/triangles-coords.png b/xh-ZA/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/xh-ZA/images/triangles-coords.png differ
diff --git a/xh-ZA/images/upgrade-ideas.png b/xh-ZA/images/upgrade-ideas.png
new file mode 100644
index 000000000..bfda023ae
Binary files /dev/null and b/xh-ZA/images/upgrade-ideas.png differ
diff --git a/xh-ZA/images/yellow-points.png b/xh-ZA/images/yellow-points.png
new file mode 100644
index 000000000..5e702c248
Binary files /dev/null and b/xh-ZA/images/yellow-points.png differ
diff --git a/xh-ZA/meta.yml b/xh-ZA/meta.yml
new file mode 100644
index 000000000..d4420e902
--- /dev/null
+++ b/xh-ZA/meta.yml
@@ -0,0 +1,36 @@
+---
+title: Target practice
+hero_image: images/banner.png
+description: Use Python to draw a target and score points by hitting it with arrows
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: You will make
+ -
+ title: Create a background
+ -
+ title: Draw your target
+ completion:
+ - engaged
+ -
+ title: Fire your arrow
+ -
+ title: Score points
+ completion:
+ - internal
+ -
+ title: Quick quiz
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: Upgrade your project
+ -
+ title: What next?
diff --git a/xh-ZA/python-comments-demo.txt b/xh-ZA/python-comments-demo.txt
new file mode 100644
index 000000000..cb2eb5621
--- /dev/null
+++ b/xh-ZA/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Setup your game here
+
+width and height of screen
+
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Set the fill color to grass
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the circle fill colour to outer
+
+x, y, width of the circle
+
+Blue
+
+Red
+
+Yellow
+
+Set the circle fill colour to inner
+
+Inner circle - x, y, width of the circle
+
+Set the circle fill colour to middle
+
+Middle circle - x, y, width of the circle
+
+The shoot_arrow function goes here
+
+Store a random number between 100 and 300
+
+Set the arrow to fill colour to wood
+
+Draw a small circle at random coordinates
+
+Get the hit colour
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Save the colour before drawing the arrow
+
+Like functions, 'if' statements are indented
+
+Import library code
+
+Keep this to run your code
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Set the fill color to grass
diff --git a/xh-ZA/python-comments.txt b/xh-ZA/python-comments.txt
new file mode 100644
index 000000000..160666a85
--- /dev/null
+++ b/xh-ZA/python-comments.txt
@@ -0,0 +1,87 @@
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Start x, start y, width, height
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the arrow to fill colour to wood
+
+Set the stand fill colour to grass
+
+Set the circle fill colour to outer
+
+Set the circle fill colour to inner
+
+Set the circle fill colour to middle
+
+x, y, width of the circle
+
+Inner circle - x, y, width of the circle
+
+Middle circle - x, y, width of the circle
+
+Outer circle.200, 200 is the middle of the screen
+
+Blue
+
+Red
+
+Yellow
+
+Stand
+
+Outer circle
+
+Inner circle
+
+Bullseye
+
+The shoot_arrow function goes here
+
+Import library code
+
+Update to random coordinates
+
+Save the colour before drawing the arrow
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Like functions, 'if' statements are indented
+
+Setup your game here
+
+width and height
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Keep this to run your code
+
+Store a random number between 100 and 300
+
+Get the hit colour
+
+Draw a small circle at random coordinates
+
+width and height of screen
diff --git a/xh-ZA/python-translatable-demo.txt b/xh-ZA/python-translatable-demo.txt
new file mode 100644
index 000000000..71707d059
--- /dev/null
+++ b/xh-ZA/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+wood
+
+sky
+
+grass
+
+outer
+
+inner
+
+middle
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
+
+speed
diff --git a/xh-ZA/python-translatable.txt b/xh-ZA/python-translatable.txt
new file mode 100644
index 000000000..75c0058cc
--- /dev/null
+++ b/xh-ZA/python-translatable.txt
@@ -0,0 +1,43 @@
+sky
+
+grass
+
+wood
+
+outer
+
+inner
+
+bullseye
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You hit the bullseye, 500 points!
+
+You missed! No points!
+
+How fast do you want the arrow? slow, medium, fast
+
+You hit red, 200 points!
+
+speed
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
diff --git a/xh-ZA/quiz1/question_1.md b/xh-ZA/quiz1/question_1.md
new file mode 100644
index 000000000..7413e69a7
--- /dev/null
+++ b/xh-ZA/quiz1/question_1.md
@@ -0,0 +1,53 @@
+## Quick quiz
+
+Answer the three questions. There are hints to guide you to the correct answer.
+
+When you have answered each question, click on **Check my answer**.
+
+Have fun!
+
+--- question ---
+---
+legend: Question 1 of 3
+---
+Here is a blue square, what are the RGB values that will create it?
+
+
+
+--- choices ---
+
+- ( ) (0, 0, 0)
+
+ --- feedback ---
+
+Not quite, when all the colour values are set to `0`, the color is **black**.
+
+ --- /feedback ---
+
+- ( ) (255, 0, 0)
+
+ --- feedback ---
+
+Not quite, colours follow the RGB model. This colour has maximum R value and no G or B, so will be **red**.
+
+ --- /feedback ---
+
+- (x) (0, 0, 255)
+
+ --- feedback ---
+
+ That's correct! Colours follow the RGB model. This colour has no R or G, but maximum B, so will be **blue**.
+
+ --- /feedback ---
+
+- ( ) (255, 255, 255)
+
+ --- feedback ---
+
+ Not quite, when all the colour values are set to the `255` maximum, the color is **white**.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/xh-ZA/quiz1/question_2.md b/xh-ZA/quiz1/question_2.md
new file mode 100644
index 000000000..cb8b743b2
--- /dev/null
+++ b/xh-ZA/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legend: Question 2 of 3
+---
+
+In your project, you used `if` , `elif`, and `else` conditions to check which colour the arrow landed on.
+
+In the example below, a variable called `speed` has the number `6` stored in it. When this `if` statement is run, what would be printed in the output area?
+
+--- code ---
+---
+language: python
+---
+speed = 6
+
+if speed == 7: print('Super fast') elif speed == 5: print('Pretty quick') elif speed == 6: print('Very fast') else: print('Speed not recognised!')
+
+--- /code ---
+
+--- choices ---
+
+- (x) `Very fast`
+
+ --- feedback ---
+
+ That's correct! The **speed** variable has been assigned the value `6`, which makes the `speed == 6` condition **True** and prints `Very fast`.
+
+ --- /feedback ---
+
+- ( ) `Speed not recognised!`
+
+ --- feedback ---
+
+ Not quite, look at the value assigned to the **speed** variable.
+
+ --- /feedback ---
+
+- ( ) Nothing gets printed
+
+ --- feedback ---
+
+ Try again, `else` is used as a final option for when all the above conditions are false. Look through the conditions again, are any of the conditions true?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/xh-ZA/quiz1/question_3.md b/xh-ZA/quiz1/question_3.md
new file mode 100644
index 000000000..de44b3b7f
--- /dev/null
+++ b/xh-ZA/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legend: Question 3 of 3
+---
+
+A circle is drawn using the following code:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+Which of the images below show the correct position of this circle in the output area?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the bottom-right corner, the coordinates would need to be the same as the screen size. In this example, the ellipse would be `circle(400, 400, 300)`.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the middle, the coordinates would need to be half of the screen size. In this example, `circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ That's correct! This circle is centred at coordinates (0,0), the top-left corner of the screen.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ No, this circle would have code of `circle(350, 150, 300)` to centre it towards the top-right of the screen. The `x` coordinate is how far across the screen the ellipse is, and the `y` coordinate is how far down the screen it is.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/xh-ZA/step_1.md b/xh-ZA/step_1.md
new file mode 100644
index 000000000..21a69d6b9
--- /dev/null
+++ b/xh-ZA/step_1.md
@@ -0,0 +1,40 @@
+## You will make
+
+Use Python, with the `p5` graphics library, to draw a target and score points by hitting it with arrows.
+
+You will:
+ + Personalise your game with **RGB colours**
+ + Use **conditional statements** (`if`, `elif`, `else`) to make decisions
+ + Position shapes with **x, y coordinates**
+
+--- no-print ---
+
+### Play ▶️
+
+--- task ---
+
+
+
+Click the **Run** button below to start the game. When the dot appears on the target 🎯, click the mouse (or tap on your tablet) to fire your arrow.
+
+Have a few goes. Your score appears in the output area below the target. How does your score change when the arrow lands on the different colours?
+
+
+
+
+--- /task ---
+
+--- /no-print ---
+
+--- print-only ---
+
+
+
+--- /print-only ---
+
+
+The oldest evidence of archery comes from the Sibudu Cave in KwaZulu-Natal, South Africa. Remains of stone and bone arrowheads have been found, which date to between 60,000 and 70,000 years ago.
+
+
+
diff --git a/xh-ZA/step_2.md b/xh-ZA/step_2.md
new file mode 100644
index 000000000..b03ac80cf
--- /dev/null
+++ b/xh-ZA/step_2.md
@@ -0,0 +1,97 @@
+## Create a background
+
+
+
+Your game needs a colourful background.
+
+
+
+{:width="300px"}
+
+
+
+
+### Open the starter project
+
+--- task ---
+
+Open the [Target practice starter](https://trinket.io/python/9973649e5c){:target="_blank"} project.
+
+If you have a Trinket account, you can click on the **Remix** button to save a copy to your **My Trinkets** library.
+
+--- /task ---
+
+### Edit the sky
+
+--- task ---
+
+The starter project has some code already written for you.
+
+Click **'Run'** to see a blue filled rectangle drawn from x=`0`, y=`0` (the top of the screen). This `400` x `250` pixels rectangle is the sky.
+
+{:width="400px"}
+
+**Tip:** 💡 Coordinates start from (x=0, y=0) in the top left corner. This might be different to other coordinate systems you have used.
+
+--- /task ---
+
+--- task ---
+
+The sky has been drawn with a black border (stroke).
+
+To turn the stroke off for all shapes add `no_stroke()` to the `setup` function:
+
+--- code ---
+---
+language: python filename: main.py — setup() line_numbers: true line_number_start: 11
+line_highlights: 15
+---
+def setup():
+# Setup your game here
+ size(400, 400) # width and height of screen frame_rate(2) no_stroke()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Run** your code again and notice 👀 that the border (stroke) has now disappeared.
+
+--- /task ---
+
+### Draw the grass
+
+--- task ---
+
+**Add** code to draw a green rectangle at the bottom of the screen.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 17
+line_highlights: 27, 28
+---
+def draw():
+# Things to do in every frame
+ global wood sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206 grass = color(149, 212, 122) wood = color(145, 96, 51) outer = color(0, 120, 180)
+
+ fill(sky)
+rect(0, 0, 400, 250)
+fill(grass) # Set the fill color to grass rect(0, 250, 400, 150) # x, y, width, height
+
+--- /code ---
+
+**Tip:** 💡 We have added comments to our code, like `# Set the fill color to grass`, to tell you what it does. You don't need to add these comments to your code, but they can be helpful to remind you what lines of code do.
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project again to view the finished background.
+
+{:width="400px"}
+
+--- /task ---
+
diff --git a/xh-ZA/step_3.md b/xh-ZA/step_3.md
new file mode 100644
index 000000000..39986aa1f
--- /dev/null
+++ b/xh-ZA/step_3.md
@@ -0,0 +1,152 @@
+## Draw your target
+
+
+
+Your game needs a target to shoot arrows at.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a triangular stand
+
+--- task ---
+
+Set the fill colour to `wood` (brown).
+
+Draw a triangle using the x and y coordinates for each of the corners.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 27
+line_highlights: 29, 30
+---
+ fill(grass)
+rect(0, 250, 400, 150) fill(wood) # Set the stand fill colour to wood
+triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your code to see the stand for your target:
+
+{:width="400px"}
+
+--- /task ---
+
+### Draw the target circles
+
+--- task ---
+
+The largest part of the target is a blue **circle**.
+
+Set the fill colour to `outer` (blue).
+
+Draw a circle with x and y coordinates for its centre and a width.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 29
+line_highlights: 31, 32
+---
+
+ fill(wood)
+triangle(150, 350, 200, 150, 250, 350)
+fill(outer) # Set the circle fill colour to outer
+circle(200, 200, 170) # x, y, width of the circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the first large blue circle.
+
+The blue circle was drawn after the stand so it is in front:
+
+{:width="400px"}
+
+--- /task ---
+
+--- task ---
+
+👀 Find your colour variables in the `draw` function.
+
+Create two variables called `inner` and `middle` to store colours for the other circles.
+
+The `color` function expects three numbers: one each for red, green, and blue.
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 17
+line_highlights: 24, 25
+---
+def draw():
+# Things to do in every frame global wood sky = color(92, 204, 206)
+grass = color(149, 212, 122)
+wood = color(145, 96, 51)
+outer = color(0, 120, 180) # Blue
+inner = color(210, 60, 60) # Red
+middle = color(220, 200, 0) # Yellow
+
+--- /code ---
+
+--- /task ---
+
+The target is made of different-sized circles with the same centre coordinates (200, 200).
+
+--- task ---
+
+**Add** coloured circles for the inner and middle parts of the target.
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 31
+line_highlights: 35, 36, 37, 38
+---
+ fill(wood)
+triangle(150, 350, 200, 150, 250, 350)
+fill(outer)
+circle(200, 200, 170) fill(inner) # Set the circle fill colour to inner
+circle(200, 200, 110) # Inner circle - x, y, width of the circle
+fill(middle) # Set the circle fill colour to middle
+circle(200, 200, 30) # Middle circle - x, y, width of the circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project to see the target with three coloured circles.
+
+{:width="400px"}
+
+**Debug:** 🐞 Check that you have used the American spelling of 'color' (without a 'u').
+
+--- /task ---
+
+--- task ---
+
+**Choose:** 💭 Change any of the colours.
+
+[[[generic-theory-simple-colours]]]
+
+{:width="400px"}
+
+
+--- /task ---
+
+
+
diff --git a/xh-ZA/step_4.md b/xh-ZA/step_4.md
new file mode 100644
index 000000000..995a078e0
--- /dev/null
+++ b/xh-ZA/step_4.md
@@ -0,0 +1,159 @@
+## Fire your arrow
+
+
+
+When you click or tap, an arrow will fire at the position of a moving target circle.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a target circle every frame
+
+ Computers create the effect of movement by showing lots of images one after another. Each image is called a frame .
+
+
+--- task ---
+
+Define your `shoot_arrow()` function under the comment **# The shoot_arrow function goes here**.
+
+Add code to randomly draw a brown circle within a target area:
+
+
+
+--- code ---
+---
+language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 9
+line_highlights: 10, 11, 12, 13, 14
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = randint(100, 300) # Store a random number between 100 and 300
+arrow_y = randint(100, 300) # Store a random number between 100 and 300
+fill(wood) # Set the arrow to fill colour to wood
+circle(arrow_x, arrow_y, 15) # Draw a small circle at random coordinates
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Go to the `draw` function and call your new `shoot_arrow` function.
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 42
+line_highlights: 44
+---
+ fill(middle)
+circle(200, 200, 30)
+shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run you code and see the arrow appear in a random position each frame.
+
+
+
+The background and target will be drawn over the old arrow. This means you only see one arrow at a time.
+
+--- /task ---
+
+### Get the colour hit by the arrow
+
+The `get()` function returns the colour of a pixel.
+
+
+A pixel, short for picture element, is a single coloured dot within an image. Images are made up of lots of coloured pixels.
+
+
+--- task ---
+
+Add code to `get` the colour of the pixel at the centre of the arrow and store it in the `hit_color` variable.
+
+--- code ---
+---
+language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 9
+line_highlights: 13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300)
+hit_color = get(arrow_x, arrow_y) # Get the hit colour fill(wood)
+circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+**Tip:** 💡 The code to `get` the colour needs to be **before** the code to draw the `circle` otherwise you will always save the wood colour of the arrow!
+
+--- /task ---
+
+### Print the colour when the mouse is pressed
+
+The `p5` library 'listens' for certain events, one of these is the press of the mouse button. When it detects that the button has been pressed, it will run whatever code it has been given in the `mouse_pressed` function.
+
+--- task ---
+
+Define your `mouse_pressed()` function under the comment **# The mouse_pressed function goes here**.
+
+Add code to print the amounts of red, green, and blue in the pixel the arrow lands on.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 8, 9
+---
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+print( red(hit_color), green(hit_color), blue(hit_color) )
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Make `hit_color` a **global variable** so that it can be used throughout your code:
+
+--- code ---
+---
+language: python filename: main.py - shoot_arrow() line_numbers: true line_number_start: 11
+line_highlights: 13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+global hit_color # Can be used in other functions
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300)
+hit_color = get(arrow_x, arrow_y) # Save the colour before drawing the arrow fill(wood)
+circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project.
+
+The project prints the `hit_color` each time the arrow is redrawn.
+
+
+
+**Debug:** 🐞 If you are seeing a message about `hit_color` being 'not defined', then go back to `shoot_arrow()` and check that you have the `global hit_color` line.
+
+**Debug:** 🐞 Check the `print` line really carefully for commas and brackets.
+
+--- /task ---
+
+
diff --git a/xh-ZA/step_5.md b/xh-ZA/step_5.md
new file mode 100644
index 000000000..e0660f134
--- /dev/null
+++ b/xh-ZA/step_5.md
@@ -0,0 +1,169 @@
+## Score points
+
+
+
+Your game will add scores based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Go to the `draw()` function and add `, outer, inner, middle` to the list of global variables.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 26
+line_highlights: 28
+---
+
+def draw():
+# Things to do in every frame
+ global wood, outer, inner, middle
+sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+grass = color(149, 212, 122)
+wood = color(145, 96, 51)
+outer = color(0, 120, 180)
+inner = color(210, 60, 60)
+middle = color(220, 200, 0)
+
+--- /code ---
+
+--- /task ---
+
+
+We use conditions all the time to make decisions. We could say 'if the pencil is blunt, then sharpen it'. Similarly, `if` conditions let us write code that do something different depending on whether a condition is true or false.
+
+
+### Display the scores
+
+--- task ---
+
+Delete ❌ the `print( red(hit_color), green(hit_color), blue(hit_color) )` line of code.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 9
+---
+# The mouse_pressed function goes here
+def mouse_pressed():
+
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+`print` a message `if` the `hit_color` is equal to `outer` 🎯.
+
+Notice 👀 that the code uses two equals signs `==` to mean **equal to**.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 9, 10
+---
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!') # Like functions, 'if' statements are indented
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow on the blue outer circle to see your message.
+
+**Tip:** 💡 `frame_rate()`, in `setup`, controls how fast your game draws. If it's going too fast, set it to a lower number.
+
+
+
+**Debug:** 🐞 Make sure your code matches exactly and you indented the code inside your `if` statement.
+
+--- /task ---
+
+`elif` (else - if) can be used to add more conditions to your `if` statement. These will be read from top to bottom. As soon as a **True** condition is found, it will be actioned. The remaining conditions will be ignored.
+
+--- task ---
+
+Score points if the arrow lands on the `inner` or `middle` circles 🎯:
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 8
+line_highlights: 11, 12, 13, 14
+---
+
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!')
+elif hit_color == inner:
+print('You hit the inner circle, 200 points!')
+elif hit_color == middle:
+print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow on the inner and middle circles to see their messages.
+
+
+
+**Debug:** 🐞 Check your indentation matches the example.
+
+**Debug:** 🐞 If you see a message about `inner` or `middle` being 'not defined', then go back to `draw()` and check that they are on the line that declares variables global.
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles? ❌
+
+To do this last check, you use `else`.
+
+--- task ---
+
+Add code to `print` a message `else` none of the `if` and `elif` statements have been met.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 8
+line_highlights: 15, 16
+---
+
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!')
+elif hit_color == inner:
+print('You hit the inner circle, 200 points!')
+elif hit_color == middle:
+print('You hit the middle, 500 points!')
+else:
+print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow in the grass or sky to see the miss message.
+
+**Choose:** 💭 Change the number of points scored for the different colours if you like.
+
+
+
+--- /task ---
+
diff --git a/xh-ZA/step_6.md b/xh-ZA/step_6.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/xh-ZA/step_6.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/xh-ZA/step_7.md b/xh-ZA/step_7.md
new file mode 100644
index 000000000..e479b9649
--- /dev/null
+++ b/xh-ZA/step_7.md
@@ -0,0 +1,35 @@
+## Upgrade your project
+
+
+
+Personalise and add more to your project. Perhaps you could change the difficulty level or add more circles to your target.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+You could:
+
++ Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position 🟠🟣
++ Put emoji in your print messages ([here's a list of emoji](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from) 🎯
++ Make the game easier or harder by changing the `frame_rate(2)` value 💨
++ Use `input()` to ask the user which difficulty level they want to play at 🗣️
+
+--- /task ---
+
+
+
+--- collapse ---
+---
+title: Completed project
+---
+
+You can view the [completed project here](https://trinket.io/python/f686c82d8a){:target="_blank"}.
+
+--- /collapse ---
+
diff --git a/xh-ZA/step_8.md b/xh-ZA/step_8.md
new file mode 100644
index 000000000..867ede7b9
--- /dev/null
+++ b/xh-ZA/step_8.md
@@ -0,0 +1,31 @@
+## What next?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+--- print-only ---
+
+
+
+--- /print-only ---
+
+--- no-print ---
+
+--- task ---
+
+**Try it:** Your program will adjust the animation based on how much fuel you give it and will succeed or fail in reaching orbit. How much fuel do you want to use to reach orbit but not waste too much extra fuel?
+
+**Tip:** Around 25,000kg should be enough, but experiment with the numbers to see what happens.
+
+
+
+
+
+--- /task ---
+
+--- /no-print ---
+
+If you want to have more fun exploring Python, then you could try out any of [these projects](https://projects.raspberrypi.org/en/projects?software%5B%5D=python).
+
+
+
diff --git a/zu-ZA/images/alternative-colours.png b/zu-ZA/images/alternative-colours.png
new file mode 100644
index 000000000..a688ac942
Binary files /dev/null and b/zu-ZA/images/alternative-colours.png differ
diff --git a/zu-ZA/images/animation_bg_erase.gif b/zu-ZA/images/animation_bg_erase.gif
new file mode 100644
index 000000000..d241286f5
Binary files /dev/null and b/zu-ZA/images/animation_bg_erase.gif differ
diff --git a/zu-ZA/images/animation_no_bg_erase.gif b/zu-ZA/images/animation_no_bg_erase.gif
new file mode 100644
index 000000000..c96d54052
Binary files /dev/null and b/zu-ZA/images/animation_no_bg_erase.gif differ
diff --git a/zu-ZA/images/arrow-middle.png b/zu-ZA/images/arrow-middle.png
new file mode 100644
index 000000000..945ca5b23
Binary files /dev/null and b/zu-ZA/images/arrow-middle.png differ
diff --git a/zu-ZA/images/arrow-target.png b/zu-ZA/images/arrow-target.png
new file mode 100644
index 000000000..64e413737
Binary files /dev/null and b/zu-ZA/images/arrow-target.png differ
diff --git a/zu-ZA/images/background.png b/zu-ZA/images/background.png
new file mode 100644
index 000000000..7d2a272de
Binary files /dev/null and b/zu-ZA/images/background.png differ
diff --git a/zu-ZA/images/banner.png b/zu-ZA/images/banner.png
new file mode 100644
index 000000000..ddd9a5786
Binary files /dev/null and b/zu-ZA/images/banner.png differ
diff --git a/zu-ZA/images/blue-circle.png b/zu-ZA/images/blue-circle.png
new file mode 100644
index 000000000..65c8564cc
Binary files /dev/null and b/zu-ZA/images/blue-circle.png differ
diff --git a/zu-ZA/images/blue-points.png b/zu-ZA/images/blue-points.png
new file mode 100644
index 000000000..7c1a8049a
Binary files /dev/null and b/zu-ZA/images/blue-points.png differ
diff --git a/zu-ZA/images/bottom-right.png b/zu-ZA/images/bottom-right.png
new file mode 100644
index 000000000..2c4fb9e43
Binary files /dev/null and b/zu-ZA/images/bottom-right.png differ
diff --git a/zu-ZA/images/centre.png b/zu-ZA/images/centre.png
new file mode 100644
index 000000000..1ce8e6fc4
Binary files /dev/null and b/zu-ZA/images/centre.png differ
diff --git a/zu-ZA/images/circle-coords.png b/zu-ZA/images/circle-coords.png
new file mode 100644
index 000000000..6c0d2c78b
Binary files /dev/null and b/zu-ZA/images/circle-coords.png differ
diff --git a/zu-ZA/images/coords_animation.gif b/zu-ZA/images/coords_animation.gif
new file mode 100644
index 000000000..e684f63a6
Binary files /dev/null and b/zu-ZA/images/coords_animation.gif differ
diff --git a/zu-ZA/images/difficulty-setting.png b/zu-ZA/images/difficulty-setting.png
new file mode 100644
index 000000000..eb2d42527
Binary files /dev/null and b/zu-ZA/images/difficulty-setting.png differ
diff --git a/zu-ZA/images/fire_arrow.gif b/zu-ZA/images/fire_arrow.gif
new file mode 100644
index 000000000..c084db578
Binary files /dev/null and b/zu-ZA/images/fire_arrow.gif differ
diff --git a/zu-ZA/images/five_circles.png b/zu-ZA/images/five_circles.png
new file mode 100644
index 000000000..524db6c9c
Binary files /dev/null and b/zu-ZA/images/five_circles.png differ
diff --git a/zu-ZA/images/green-grass.png b/zu-ZA/images/green-grass.png
new file mode 100644
index 000000000..8c7f5794e
Binary files /dev/null and b/zu-ZA/images/green-grass.png differ
diff --git a/zu-ZA/images/grey-circle.png b/zu-ZA/images/grey-circle.png
new file mode 100644
index 000000000..3e8d5d182
Binary files /dev/null and b/zu-ZA/images/grey-circle.png differ
diff --git a/zu-ZA/images/grey-points.png b/zu-ZA/images/grey-points.png
new file mode 100644
index 000000000..b516035b9
Binary files /dev/null and b/zu-ZA/images/grey-points.png differ
diff --git a/zu-ZA/images/initial_target.png b/zu-ZA/images/initial_target.png
new file mode 100644
index 000000000..caaca5115
Binary files /dev/null and b/zu-ZA/images/initial_target.png differ
diff --git a/zu-ZA/images/missed-points.png b/zu-ZA/images/missed-points.png
new file mode 100644
index 000000000..0cd14626c
Binary files /dev/null and b/zu-ZA/images/missed-points.png differ
diff --git a/zu-ZA/images/outline-circles.png b/zu-ZA/images/outline-circles.png
new file mode 100644
index 000000000..fb31925b0
Binary files /dev/null and b/zu-ZA/images/outline-circles.png differ
diff --git a/zu-ZA/images/points-scored.gif b/zu-ZA/images/points-scored.gif
new file mode 100644
index 000000000..e6ddac2a3
Binary files /dev/null and b/zu-ZA/images/points-scored.gif differ
diff --git a/zu-ZA/images/quiz-colour.png b/zu-ZA/images/quiz-colour.png
new file mode 100644
index 000000000..e6012953c
Binary files /dev/null and b/zu-ZA/images/quiz-colour.png differ
diff --git a/zu-ZA/images/random-side.png b/zu-ZA/images/random-side.png
new file mode 100644
index 000000000..212ea6368
Binary files /dev/null and b/zu-ZA/images/random-side.png differ
diff --git a/zu-ZA/images/rectangle-diagram.png b/zu-ZA/images/rectangle-diagram.png
new file mode 100644
index 000000000..8b1a8d348
Binary files /dev/null and b/zu-ZA/images/rectangle-diagram.png differ
diff --git a/zu-ZA/images/showcase_rocket.png b/zu-ZA/images/showcase_rocket.png
new file mode 100644
index 000000000..6586fe933
Binary files /dev/null and b/zu-ZA/images/showcase_rocket.png differ
diff --git a/zu-ZA/images/showcase_static.png b/zu-ZA/images/showcase_static.png
new file mode 100644
index 000000000..312d7fac1
Binary files /dev/null and b/zu-ZA/images/showcase_static.png differ
diff --git a/zu-ZA/images/sky_coords.png b/zu-ZA/images/sky_coords.png
new file mode 100644
index 000000000..5f918d7ef
Binary files /dev/null and b/zu-ZA/images/sky_coords.png differ
diff --git a/zu-ZA/images/sky_stroke.png b/zu-ZA/images/sky_stroke.png
new file mode 100644
index 000000000..347018cb5
Binary files /dev/null and b/zu-ZA/images/sky_stroke.png differ
diff --git a/zu-ZA/images/stand_coords.png b/zu-ZA/images/stand_coords.png
new file mode 100644
index 000000000..28e151045
Binary files /dev/null and b/zu-ZA/images/stand_coords.png differ
diff --git a/zu-ZA/images/step_4_preview.gif b/zu-ZA/images/step_4_preview.gif
new file mode 100644
index 000000000..06af11669
Binary files /dev/null and b/zu-ZA/images/step_4_preview.gif differ
diff --git a/zu-ZA/images/step_5_preview.gif b/zu-ZA/images/step_5_preview.gif
new file mode 100644
index 000000000..49c6e41a3
Binary files /dev/null and b/zu-ZA/images/step_5_preview.gif differ
diff --git a/zu-ZA/images/target-stand.png b/zu-ZA/images/target-stand.png
new file mode 100644
index 000000000..c64259beb
Binary files /dev/null and b/zu-ZA/images/target-stand.png differ
diff --git a/zu-ZA/images/target_area.png b/zu-ZA/images/target_area.png
new file mode 100644
index 000000000..72d80ba1d
Binary files /dev/null and b/zu-ZA/images/target_area.png differ
diff --git a/zu-ZA/images/three-circles.png b/zu-ZA/images/three-circles.png
new file mode 100644
index 000000000..90a5e243a
Binary files /dev/null and b/zu-ZA/images/three-circles.png differ
diff --git a/zu-ZA/images/top-left.png b/zu-ZA/images/top-left.png
new file mode 100644
index 000000000..3cb3e458f
Binary files /dev/null and b/zu-ZA/images/top-left.png differ
diff --git a/zu-ZA/images/triangles-coords.png b/zu-ZA/images/triangles-coords.png
new file mode 100644
index 000000000..1eec68b23
Binary files /dev/null and b/zu-ZA/images/triangles-coords.png differ
diff --git a/zu-ZA/images/upgrade-ideas.png b/zu-ZA/images/upgrade-ideas.png
new file mode 100644
index 000000000..bfda023ae
Binary files /dev/null and b/zu-ZA/images/upgrade-ideas.png differ
diff --git a/zu-ZA/images/yellow-points.png b/zu-ZA/images/yellow-points.png
new file mode 100644
index 000000000..5e702c248
Binary files /dev/null and b/zu-ZA/images/yellow-points.png differ
diff --git a/zu-ZA/meta.yml b/zu-ZA/meta.yml
new file mode 100644
index 000000000..d4420e902
--- /dev/null
+++ b/zu-ZA/meta.yml
@@ -0,0 +1,36 @@
+---
+title: Target practice
+hero_image: images/banner.png
+description: Use Python to draw a target and score points by hitting it with arrows
+version: 4
+listed: true
+copyedit: true
+last_tested: "2021-10-06"
+steps:
+ -
+ title: You will make
+ -
+ title: Create a background
+ -
+ title: Draw your target
+ completion:
+ - engaged
+ -
+ title: Fire your arrow
+ -
+ title: Score points
+ completion:
+ - internal
+ -
+ title: Quick quiz
+ knowledge_quiz:
+ path: quiz1
+ version: 1
+ questions: 3
+ passing_score: 3
+ completion:
+ - external
+ -
+ title: Upgrade your project
+ -
+ title: What next?
diff --git a/zu-ZA/python-comments-demo.txt b/zu-ZA/python-comments-demo.txt
new file mode 100644
index 000000000..cb2eb5621
--- /dev/null
+++ b/zu-ZA/python-comments-demo.txt
@@ -0,0 +1,73 @@
+Setup your game here
+
+width and height of screen
+
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Set the fill color to grass
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the circle fill colour to outer
+
+x, y, width of the circle
+
+Blue
+
+Red
+
+Yellow
+
+Set the circle fill colour to inner
+
+Inner circle - x, y, width of the circle
+
+Set the circle fill colour to middle
+
+Middle circle - x, y, width of the circle
+
+The shoot_arrow function goes here
+
+Store a random number between 100 and 300
+
+Set the arrow to fill colour to wood
+
+Draw a small circle at random coordinates
+
+Get the hit colour
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Save the colour before drawing the arrow
+
+Like functions, 'if' statements are indented
+
+Import library code
+
+Keep this to run your code
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Set the fill color to grass
diff --git a/zu-ZA/python-comments.txt b/zu-ZA/python-comments.txt
new file mode 100644
index 000000000..160666a85
--- /dev/null
+++ b/zu-ZA/python-comments.txt
@@ -0,0 +1,87 @@
+Things to do in every frame
+
+Red = 92, Green = 204, Blue = 206
+
+Start x, start y, width, height
+
+x, y, width, height
+
+Set the stand fill colour to wood
+
+Set the arrow to fill colour to wood
+
+Set the stand fill colour to grass
+
+Set the circle fill colour to outer
+
+Set the circle fill colour to inner
+
+Set the circle fill colour to middle
+
+x, y, width of the circle
+
+Inner circle - x, y, width of the circle
+
+Middle circle - x, y, width of the circle
+
+Outer circle.200, 200 is the middle of the screen
+
+Blue
+
+Red
+
+Yellow
+
+Stand
+
+Outer circle
+
+Inner circle
+
+Bullseye
+
+The shoot_arrow function goes here
+
+Import library code
+
+Update to random coordinates
+
+Save the colour before drawing the arrow
+
+The mouse_pressed function goes here
+
+Can be used in other functions
+
+Like functions, 'if' statements are indented
+
+Setup your game here
+
+width and height
+
+Definitions for compatibility with the p5py processing library
+
+Shape
+
+Fonts
+
+Text
+
+Colour
+
+Images
+
+Environment
+
+Transform
+
+Keyboard
+
+Keep this to run your code
+
+Store a random number between 100 and 300
+
+Get the hit colour
+
+Draw a small circle at random coordinates
+
+width and height of screen
diff --git a/zu-ZA/python-translatable-demo.txt b/zu-ZA/python-translatable-demo.txt
new file mode 100644
index 000000000..71707d059
--- /dev/null
+++ b/zu-ZA/python-translatable-demo.txt
@@ -0,0 +1,37 @@
+wood
+
+sky
+
+grass
+
+outer
+
+inner
+
+middle
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You missed! No points!
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
+
+speed
diff --git a/zu-ZA/python-translatable.txt b/zu-ZA/python-translatable.txt
new file mode 100644
index 000000000..75c0058cc
--- /dev/null
+++ b/zu-ZA/python-translatable.txt
@@ -0,0 +1,43 @@
+sky
+
+grass
+
+wood
+
+outer
+
+inner
+
+bullseye
+
+shoot_arrow
+
+arrow_x
+
+arrow_y
+
+hit_color
+
+You hit the outer circle, 50 points!
+
+You hit the inner circle, 200 points!
+
+You hit the middle, 500 points!
+
+You hit the bullseye, 500 points!
+
+You missed! No points!
+
+How fast do you want the arrow? slow, medium, fast
+
+You hit red, 200 points!
+
+speed
+
+Super fast
+
+Pretty quick
+
+Very fast
+
+Speed not recognised!
diff --git a/zu-ZA/quiz1/question_1.md b/zu-ZA/quiz1/question_1.md
new file mode 100644
index 000000000..7413e69a7
--- /dev/null
+++ b/zu-ZA/quiz1/question_1.md
@@ -0,0 +1,53 @@
+## Quick quiz
+
+Answer the three questions. There are hints to guide you to the correct answer.
+
+When you have answered each question, click on **Check my answer**.
+
+Have fun!
+
+--- question ---
+---
+legend: Question 1 of 3
+---
+Here is a blue square, what are the RGB values that will create it?
+
+
+
+--- choices ---
+
+- ( ) (0, 0, 0)
+
+ --- feedback ---
+
+Not quite, when all the colour values are set to `0`, the color is **black**.
+
+ --- /feedback ---
+
+- ( ) (255, 0, 0)
+
+ --- feedback ---
+
+Not quite, colours follow the RGB model. This colour has maximum R value and no G or B, so will be **red**.
+
+ --- /feedback ---
+
+- (x) (0, 0, 255)
+
+ --- feedback ---
+
+ That's correct! Colours follow the RGB model. This colour has no R or G, but maximum B, so will be **blue**.
+
+ --- /feedback ---
+
+- ( ) (255, 255, 255)
+
+ --- feedback ---
+
+ Not quite, when all the colour values are set to the `255` maximum, the color is **white**.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/zu-ZA/quiz1/question_2.md b/zu-ZA/quiz1/question_2.md
new file mode 100644
index 000000000..cb8b743b2
--- /dev/null
+++ b/zu-ZA/quiz1/question_2.md
@@ -0,0 +1,49 @@
+
+--- question ---
+---
+legend: Question 2 of 3
+---
+
+In your project, you used `if` , `elif`, and `else` conditions to check which colour the arrow landed on.
+
+In the example below, a variable called `speed` has the number `6` stored in it. When this `if` statement is run, what would be printed in the output area?
+
+--- code ---
+---
+language: python
+---
+speed = 6
+
+if speed == 7: print('Super fast') elif speed == 5: print('Pretty quick') elif speed == 6: print('Very fast') else: print('Speed not recognised!')
+
+--- /code ---
+
+--- choices ---
+
+- (x) `Very fast`
+
+ --- feedback ---
+
+ That's correct! The **speed** variable has been assigned the value `6`, which makes the `speed == 6` condition **True** and prints `Very fast`.
+
+ --- /feedback ---
+
+- ( ) `Speed not recognised!`
+
+ --- feedback ---
+
+ Not quite, look at the value assigned to the **speed** variable.
+
+ --- /feedback ---
+
+- ( ) Nothing gets printed
+
+ --- feedback ---
+
+ Try again, `else` is used as a final option for when all the above conditions are false. Look through the conditions again, are any of the conditions true?
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/zu-ZA/quiz1/question_3.md b/zu-ZA/quiz1/question_3.md
new file mode 100644
index 000000000..de44b3b7f
--- /dev/null
+++ b/zu-ZA/quiz1/question_3.md
@@ -0,0 +1,64 @@
+
+--- question ---
+---
+legend: Question 3 of 3
+---
+
+A circle is drawn using the following code:
+
+--- code ---
+---
+language: python
+---
+
+def setup():
+size(400, 400)
+fill(0, 255, 0)
+no_stroke()
+
+def draw():
+circle(0, 0, 300)
+
+run()
+
+--- /code ---
+
+Which of the images below show the correct position of this circle in the output area?
+
+--- choices ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the bottom-right corner, the coordinates would need to be the same as the screen size. In this example, the ellipse would be `circle(400, 400, 300)`.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ Not quite, to centre the circle in the middle, the coordinates would need to be half of the screen size. In this example, `circle(200, 200, 300)`.
+
+ --- /feedback ---
+
+- (x) 
+
+ --- feedback ---
+
+ That's correct! This circle is centred at coordinates (0,0), the top-left corner of the screen.
+
+ --- /feedback ---
+
+- ( ) 
+
+ --- feedback ---
+
+ No, this circle would have code of `circle(350, 150, 300)` to centre it towards the top-right of the screen. The `x` coordinate is how far across the screen the ellipse is, and the `y` coordinate is how far down the screen it is.
+
+ --- /feedback ---
+
+--- /choices ---
+
+--- /question ---
diff --git a/zu-ZA/step_1.md b/zu-ZA/step_1.md
new file mode 100644
index 000000000..21a69d6b9
--- /dev/null
+++ b/zu-ZA/step_1.md
@@ -0,0 +1,40 @@
+## You will make
+
+Use Python, with the `p5` graphics library, to draw a target and score points by hitting it with arrows.
+
+You will:
+ + Personalise your game with **RGB colours**
+ + Use **conditional statements** (`if`, `elif`, `else`) to make decisions
+ + Position shapes with **x, y coordinates**
+
+--- no-print ---
+
+### Play ▶️
+
+--- task ---
+
+
+
+Click the **Run** button below to start the game. When the dot appears on the target 🎯, click the mouse (or tap on your tablet) to fire your arrow.
+
+Have a few goes. Your score appears in the output area below the target. How does your score change when the arrow lands on the different colours?
+
+
+
+
+--- /task ---
+
+--- /no-print ---
+
+--- print-only ---
+
+
+
+--- /print-only ---
+
+
+The oldest evidence of archery comes from the Sibudu Cave in KwaZulu-Natal, South Africa. Remains of stone and bone arrowheads have been found, which date to between 60,000 and 70,000 years ago.
+
+
+
diff --git a/zu-ZA/step_2.md b/zu-ZA/step_2.md
new file mode 100644
index 000000000..b03ac80cf
--- /dev/null
+++ b/zu-ZA/step_2.md
@@ -0,0 +1,97 @@
+## Create a background
+
+
+
+Your game needs a colourful background.
+
+
+
+{:width="300px"}
+
+
+
+
+### Open the starter project
+
+--- task ---
+
+Open the [Target practice starter](https://trinket.io/python/9973649e5c){:target="_blank"} project.
+
+If you have a Trinket account, you can click on the **Remix** button to save a copy to your **My Trinkets** library.
+
+--- /task ---
+
+### Edit the sky
+
+--- task ---
+
+The starter project has some code already written for you.
+
+Click **'Run'** to see a blue filled rectangle drawn from x=`0`, y=`0` (the top of the screen). This `400` x `250` pixels rectangle is the sky.
+
+{:width="400px"}
+
+**Tip:** 💡 Coordinates start from (x=0, y=0) in the top left corner. This might be different to other coordinate systems you have used.
+
+--- /task ---
+
+--- task ---
+
+The sky has been drawn with a black border (stroke).
+
+To turn the stroke off for all shapes add `no_stroke()` to the `setup` function:
+
+--- code ---
+---
+language: python filename: main.py — setup() line_numbers: true line_number_start: 11
+line_highlights: 15
+---
+def setup():
+# Setup your game here
+ size(400, 400) # width and height of screen frame_rate(2) no_stroke()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Run** your code again and notice 👀 that the border (stroke) has now disappeared.
+
+--- /task ---
+
+### Draw the grass
+
+--- task ---
+
+**Add** code to draw a green rectangle at the bottom of the screen.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 17
+line_highlights: 27, 28
+---
+def draw():
+# Things to do in every frame
+ global wood sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206 grass = color(149, 212, 122) wood = color(145, 96, 51) outer = color(0, 120, 180)
+
+ fill(sky)
+rect(0, 0, 400, 250)
+fill(grass) # Set the fill color to grass rect(0, 250, 400, 150) # x, y, width, height
+
+--- /code ---
+
+**Tip:** 💡 We have added comments to our code, like `# Set the fill color to grass`, to tell you what it does. You don't need to add these comments to your code, but they can be helpful to remind you what lines of code do.
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project again to view the finished background.
+
+{:width="400px"}
+
+--- /task ---
+
diff --git a/zu-ZA/step_3.md b/zu-ZA/step_3.md
new file mode 100644
index 000000000..39986aa1f
--- /dev/null
+++ b/zu-ZA/step_3.md
@@ -0,0 +1,152 @@
+## Draw your target
+
+
+
+Your game needs a target to shoot arrows at.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a triangular stand
+
+--- task ---
+
+Set the fill colour to `wood` (brown).
+
+Draw a triangle using the x and y coordinates for each of the corners.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 27
+line_highlights: 29, 30
+---
+ fill(grass)
+rect(0, 250, 400, 150) fill(wood) # Set the stand fill colour to wood
+triangle(150, 350, 200, 150, 250, 350)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your code to see the stand for your target:
+
+{:width="400px"}
+
+--- /task ---
+
+### Draw the target circles
+
+--- task ---
+
+The largest part of the target is a blue **circle**.
+
+Set the fill colour to `outer` (blue).
+
+Draw a circle with x and y coordinates for its centre and a width.
+
+{:width="400px"}
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 29
+line_highlights: 31, 32
+---
+
+ fill(wood)
+triangle(150, 350, 200, 150, 250, 350)
+fill(outer) # Set the circle fill colour to outer
+circle(200, 200, 170) # x, y, width of the circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** Run your code to see the first large blue circle.
+
+The blue circle was drawn after the stand so it is in front:
+
+{:width="400px"}
+
+--- /task ---
+
+--- task ---
+
+👀 Find your colour variables in the `draw` function.
+
+Create two variables called `inner` and `middle` to store colours for the other circles.
+
+The `color` function expects three numbers: one each for red, green, and blue.
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 17
+line_highlights: 24, 25
+---
+def draw():
+# Things to do in every frame global wood sky = color(92, 204, 206)
+grass = color(149, 212, 122)
+wood = color(145, 96, 51)
+outer = color(0, 120, 180) # Blue
+inner = color(210, 60, 60) # Red
+middle = color(220, 200, 0) # Yellow
+
+--- /code ---
+
+--- /task ---
+
+The target is made of different-sized circles with the same centre coordinates (200, 200).
+
+--- task ---
+
+**Add** coloured circles for the inner and middle parts of the target.
+
+--- code ---
+---
+language: python filename: main.py - draw() line_numbers: true line_number_start: 31
+line_highlights: 35, 36, 37, 38
+---
+ fill(wood)
+triangle(150, 350, 200, 150, 250, 350)
+fill(outer)
+circle(200, 200, 170) fill(inner) # Set the circle fill colour to inner
+circle(200, 200, 110) # Inner circle - x, y, width of the circle
+fill(middle) # Set the circle fill colour to middle
+circle(200, 200, 30) # Middle circle - x, y, width of the circle
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project to see the target with three coloured circles.
+
+{:width="400px"}
+
+**Debug:** 🐞 Check that you have used the American spelling of 'color' (without a 'u').
+
+--- /task ---
+
+--- task ---
+
+**Choose:** 💭 Change any of the colours.
+
+[[[generic-theory-simple-colours]]]
+
+{:width="400px"}
+
+
+--- /task ---
+
+
+
diff --git a/zu-ZA/step_4.md b/zu-ZA/step_4.md
new file mode 100644
index 000000000..995a078e0
--- /dev/null
+++ b/zu-ZA/step_4.md
@@ -0,0 +1,159 @@
+## Fire your arrow
+
+
+
+When you click or tap, an arrow will fire at the position of a moving target circle.
+
+
+
+{:width="300px"}
+
+
+
+
+### Draw a target circle every frame
+
+ Computers create the effect of movement by showing lots of images one after another. Each image is called a frame .
+
+
+--- task ---
+
+Define your `shoot_arrow()` function under the comment **# The shoot_arrow function goes here**.
+
+Add code to randomly draw a brown circle within a target area:
+
+
+
+--- code ---
+---
+language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 9
+line_highlights: 10, 11, 12, 13, 14
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = randint(100, 300) # Store a random number between 100 and 300
+arrow_y = randint(100, 300) # Store a random number between 100 and 300
+fill(wood) # Set the arrow to fill colour to wood
+circle(arrow_x, arrow_y, 15) # Draw a small circle at random coordinates
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Go to the `draw` function and call your new `shoot_arrow` function.
+
+--- code ---
+---
+language: python filename: main.py — draw() line_numbers: true line_number_start: 42
+line_highlights: 44
+---
+ fill(middle)
+circle(200, 200, 30)
+shoot_arrow()
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run you code and see the arrow appear in a random position each frame.
+
+
+
+The background and target will be drawn over the old arrow. This means you only see one arrow at a time.
+
+--- /task ---
+
+### Get the colour hit by the arrow
+
+The `get()` function returns the colour of a pixel.
+
+
+A pixel, short for picture element, is a single coloured dot within an image. Images are made up of lots of coloured pixels.
+
+
+--- task ---
+
+Add code to `get` the colour of the pixel at the centre of the arrow and store it in the `hit_color` variable.
+
+--- code ---
+---
+language: python filename: main.py — shoot_arrow() line_numbers: true line_number_start: 9
+line_highlights: 13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300)
+hit_color = get(arrow_x, arrow_y) # Get the hit colour fill(wood)
+circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+**Tip:** 💡 The code to `get` the colour needs to be **before** the code to draw the `circle` otherwise you will always save the wood colour of the arrow!
+
+--- /task ---
+
+### Print the colour when the mouse is pressed
+
+The `p5` library 'listens' for certain events, one of these is the press of the mouse button. When it detects that the button has been pressed, it will run whatever code it has been given in the `mouse_pressed` function.
+
+--- task ---
+
+Define your `mouse_pressed()` function under the comment **# The mouse_pressed function goes here**.
+
+Add code to print the amounts of red, green, and blue in the pixel the arrow lands on.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 8, 9
+---
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+print( red(hit_color), green(hit_color), blue(hit_color) )
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+Make `hit_color` a **global variable** so that it can be used throughout your code:
+
+--- code ---
+---
+language: python filename: main.py - shoot_arrow() line_numbers: true line_number_start: 11
+line_highlights: 13
+---
+# The shoot_arrow function goes here
+def shoot_arrow():
+global hit_color # Can be used in other functions
+arrow_x = randint(100, 300)
+arrow_y = randint(100, 300)
+hit_color = get(arrow_x, arrow_y) # Save the colour before drawing the arrow fill(wood)
+circle(arrow_x, arrow_y, 15)
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project.
+
+The project prints the `hit_color` each time the arrow is redrawn.
+
+
+
+**Debug:** 🐞 If you are seeing a message about `hit_color` being 'not defined', then go back to `shoot_arrow()` and check that you have the `global hit_color` line.
+
+**Debug:** 🐞 Check the `print` line really carefully for commas and brackets.
+
+--- /task ---
+
+
diff --git a/zu-ZA/step_5.md b/zu-ZA/step_5.md
new file mode 100644
index 000000000..e0660f134
--- /dev/null
+++ b/zu-ZA/step_5.md
@@ -0,0 +1,169 @@
+## Score points
+
+
+
+Your game will add scores based on where the arrow hits.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+Go to the `draw()` function and add `, outer, inner, middle` to the list of global variables.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 26
+line_highlights: 28
+---
+
+def draw():
+# Things to do in every frame
+ global wood, outer, inner, middle
+sky = color(92, 204, 206) # Red = 92, Green = 204, Blue = 206
+grass = color(149, 212, 122)
+wood = color(145, 96, 51)
+outer = color(0, 120, 180)
+inner = color(210, 60, 60)
+middle = color(220, 200, 0)
+
+--- /code ---
+
+--- /task ---
+
+
+We use conditions all the time to make decisions. We could say 'if the pencil is blunt, then sharpen it'. Similarly, `if` conditions let us write code that do something different depending on whether a condition is true or false.
+
+
+### Display the scores
+
+--- task ---
+
+Delete ❌ the `print( red(hit_color), green(hit_color), blue(hit_color) )` line of code.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 9
+---
+# The mouse_pressed function goes here
+def mouse_pressed():
+
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+`print` a message `if` the `hit_color` is equal to `outer` 🎯.
+
+Notice 👀 that the code uses two equals signs `==` to mean **equal to**.
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 7
+line_highlights: 9, 10
+---
+
+# The mouse_pressed function goes here
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!') # Like functions, 'if' statements are indented
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow on the blue outer circle to see your message.
+
+**Tip:** 💡 `frame_rate()`, in `setup`, controls how fast your game draws. If it's going too fast, set it to a lower number.
+
+
+
+**Debug:** 🐞 Make sure your code matches exactly and you indented the code inside your `if` statement.
+
+--- /task ---
+
+`elif` (else - if) can be used to add more conditions to your `if` statement. These will be read from top to bottom. As soon as a **True** condition is found, it will be actioned. The remaining conditions will be ignored.
+
+--- task ---
+
+Score points if the arrow lands on the `inner` or `middle` circles 🎯:
+
+--- code ---
+---
+language: python filename: main.py - mouse_pressed() line_numbers: true line_number_start: 8
+line_highlights: 11, 12, 13, 14
+---
+
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!')
+elif hit_color == inner:
+print('You hit the inner circle, 200 points!')
+elif hit_color == middle:
+print('You hit the middle, 500 points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow on the inner and middle circles to see their messages.
+
+
+
+**Debug:** 🐞 Check your indentation matches the example.
+
+**Debug:** 🐞 If you see a message about `inner` or `middle` being 'not defined', then go back to `draw()` and check that they are on the line that declares variables global.
+
+--- /task ---
+
+### Missing the target
+
+There is one more decision you need to make: what happens if the arrow does not land on any of the target circles? ❌
+
+To do this last check, you use `else`.
+
+--- task ---
+
+Add code to `print` a message `else` none of the `if` and `elif` statements have been met.
+
+--- code ---
+---
+language: python filename: main.py line_numbers: true line_number_start: 8
+line_highlights: 15, 16
+---
+
+def mouse_pressed():
+if hit_color == outer:
+print('You hit the outer circle, 50 points!')
+elif hit_color == inner:
+print('You hit the inner circle, 200 points!')
+elif hit_color == middle:
+print('You hit the middle, 500 points!')
+else:
+print('You missed! No points!')
+
+--- /code ---
+
+--- /task ---
+
+--- task ---
+
+**Test:** 🔄 Run your project. Try to stop the arrow in the grass or sky to see the miss message.
+
+**Choose:** 💭 Change the number of points scored for the different colours if you like.
+
+
+
+--- /task ---
+
diff --git a/zu-ZA/step_6.md b/zu-ZA/step_6.md
new file mode 100644
index 000000000..ef044b75d
--- /dev/null
+++ b/zu-ZA/step_6.md
@@ -0,0 +1 @@
+## Quick quiz
\ No newline at end of file
diff --git a/zu-ZA/step_7.md b/zu-ZA/step_7.md
new file mode 100644
index 000000000..e479b9649
--- /dev/null
+++ b/zu-ZA/step_7.md
@@ -0,0 +1,35 @@
+## Upgrade your project
+
+
+
+Personalise and add more to your project. Perhaps you could change the difficulty level or add more circles to your target.
+
+
+
+{:width="300px"}
+
+
+
+
+--- task ---
+
+You could:
+
++ Add a `fourth` and `fifth` circle, in new colours, which score different amounts of points based on their position 🟠🟣
++ Put emoji in your print messages ([here's a list of emoji](https://unicode.org/emoji/charts/full-emoji-list.html){:target="_blank"} you can copy from) 🎯
++ Make the game easier or harder by changing the `frame_rate(2)` value 💨
++ Use `input()` to ask the user which difficulty level they want to play at 🗣️
+
+--- /task ---
+
+
+
+--- collapse ---
+---
+title: Completed project
+---
+
+You can view the [completed project here](https://trinket.io/python/f686c82d8a){:target="_blank"}.
+
+--- /collapse ---
+
diff --git a/zu-ZA/step_8.md b/zu-ZA/step_8.md
new file mode 100644
index 000000000..867ede7b9
--- /dev/null
+++ b/zu-ZA/step_8.md
@@ -0,0 +1,31 @@
+## What next?
+
+If you are following the [Introduction to Python](https://projects.raspberrypi.org/en/raspberrypi/python-intro) pathway, you can move on to the [Rocket launch](https://projects.raspberrypi.org/en/projects/rocket-launch) project. In this project, you will make an interactive animation of a rocket launching a satellite into orbit.
+
+--- print-only ---
+
+
+
+--- /print-only ---
+
+--- no-print ---
+
+--- task ---
+
+**Try it:** Your program will adjust the animation based on how much fuel you give it and will succeed or fail in reaching orbit. How much fuel do you want to use to reach orbit but not waste too much extra fuel?
+
+**Tip:** Around 25,000kg should be enough, but experiment with the numbers to see what happens.
+
+
+
+
+
+--- /task ---
+
+--- /no-print ---
+
+If you want to have more fun exploring Python, then you could try out any of [these projects](https://projects.raspberrypi.org/en/projects?software%5B%5D=python).
+
+
+