Skip to content

Improvements to lesson 17 and 18 #641

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 28 additions & 28 deletions course/course-learn-gdscript.tres
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,35 @@

[ext_resource path="res://resources/Course.gd" type="Script" id=1]
[ext_resource path="res://course/lesson-26-looping-over-dictionaries/lesson.tres" type="Resource" id=2]
[ext_resource path="res://course/lesson-14-multiplying/lesson.tres" type="Resource" id=3]
[ext_resource path="res://course/lesson-21-strings/lesson.tres" type="Resource" id=4]
[ext_resource path="res://course/lesson-2-your-first-error/lesson.tres" type="Resource" id=5]
[ext_resource path="res://course/lesson-11-time-delta/lesson.tres" type="Resource" id=6]
[ext_resource path="res://course/lesson-17-while-loops/lesson.tres" type="Resource" id=7]
[ext_resource path="res://course/lesson-6-multiple-function-parameters/lesson.tres" type="Resource" id=8]
[ext_resource path="res://course/lesson-15-modulo/lesson.tres" type="Resource" id=9]
[ext_resource path="res://course/lesson-13-conditions/lesson.tres" type="Resource" id=10]
[ext_resource path="res://course/lesson-27-value-types/lesson.tres" type="Resource" id=11]
[ext_resource path="res://course/lesson-22-functions-return-values/lesson.tres" type="Resource" id=12]
[ext_resource path="res://course/lesson-18-for-loops/lesson.tres" type="Resource" id=13]
[ext_resource path="res://course/lesson-3-standing-on-shoulders-of-giants/lesson.tres" type="Resource" id=14]
[ext_resource path="res://course/lesson-28-specifying-types/lesson.tres" type="Resource" id=15]
[ext_resource path="res://course/lesson-10-the-game-loop/lesson.tres" type="Resource" id=16]
[ext_resource path="res://course/lesson-20-looping-over-arrays/lesson.tres" type="Resource" id=17]
[ext_resource path="res://course/lesson-23-append-to-arrays/lesson.tres" type="Resource" id=18]
[ext_resource path="res://course/lesson-4-drawing-a-rectangle/lesson.tres" type="Resource" id=19]
[ext_resource path="res://course/lesson-24-access-array-indices/lesson.tres" type="Resource" id=20]
[ext_resource path="res://course/lesson-19-creating-arrays/lesson.tres" type="Resource" id=21]
[ext_resource path="res://course/lesson-9-adding-and-subtracting/lesson.tres" type="Resource" id=22]
[ext_resource path="res://course/lesson-5-your-first-function/lesson.tres" type="Resource" id=23]
[ext_resource path="res://course/lesson-16-2d-vectors/lesson.tres" type="Resource" id=24]
[ext_resource path="res://course/lesson-8-defining-variables/lesson.tres" type="Resource" id=25]
[ext_resource path="res://course/lesson-12-using-variables/lesson.tres" type="Resource" id=26]
[ext_resource path="res://course/lesson-7-member-variables/lesson.tres" type="Resource" id=27]
[ext_resource path="res://course/lesson-25-creating-dictionaries/lesson.tres" type="Resource" id=28]
[ext_resource path="res://course/lesson-1-what-code-is-like/lesson.tres" type="Resource" id=29]
[ext_resource path="res://course/lesson-20-looping-over-arrays/lesson.tres" type="Resource" id=3]
[ext_resource path="res://course/lesson-6-multiple-function-parameters/lesson.tres" type="Resource" id=4]
[ext_resource path="res://course/lesson-5-your-first-function/lesson.tres" type="Resource" id=5]
[ext_resource path="res://course/lesson-16-2d-vectors/lesson.tres" type="Resource" id=6]
[ext_resource path="res://course/lesson-8-defining-variables/lesson.tres" type="Resource" id=7]
[ext_resource path="res://course/lesson-12-using-variables/lesson.tres" type="Resource" id=8]
[ext_resource path="res://course/lesson-7-member-variables/lesson.tres" type="Resource" id=9]
[ext_resource path="res://course/lesson-25-creating-dictionaries/lesson.tres" type="Resource" id=10]
[ext_resource path="res://course/lesson-1-what-code-is-like/lesson.tres" type="Resource" id=11]
[ext_resource path="res://course/lesson-28-specifying-types/lesson.tres" type="Resource" id=12]
[ext_resource path="res://course/lesson-17-while-loops/lesson.tres" type="Resource" id=13]
[ext_resource path="res://course/lesson-22-functions-return-values/lesson.tres" type="Resource" id=14]
[ext_resource path="res://course/lesson-21-strings/lesson.tres" type="Resource" id=15]
[ext_resource path="res://course/lesson-15-modulo/lesson.tres" type="Resource" id=16]
[ext_resource path="res://course/lesson-27-value-types/lesson.tres" type="Resource" id=17]
[ext_resource path="res://course/lesson-18-for-loops/lesson.tres" type="Resource" id=18]
[ext_resource path="res://course/lesson-3-standing-on-shoulders-of-giants/lesson.tres" type="Resource" id=19]
[ext_resource path="res://course/lesson-11-time-delta/lesson.tres" type="Resource" id=20]
[ext_resource path="res://course/lesson-13-conditions/lesson.tres" type="Resource" id=21]
[ext_resource path="res://course/lesson-2-your-first-error/lesson.tres" type="Resource" id=22]
[ext_resource path="res://course/lesson-23-append-to-arrays/lesson.tres" type="Resource" id=23]
[ext_resource path="res://course/lesson-4-drawing-a-rectangle/lesson.tres" type="Resource" id=24]
[ext_resource path="res://course/lesson-24-access-array-indices/lesson.tres" type="Resource" id=25]
[ext_resource path="res://course/lesson-19-creating-arrays/lesson.tres" type="Resource" id=26]
[ext_resource path="res://course/lesson-9-adding-and-subtracting/lesson.tres" type="Resource" id=27]
[ext_resource path="res://course/lesson-10-the-game-loop/lesson.tres" type="Resource" id=28]
[ext_resource path="res://course/lesson-14-multiplying/lesson.tres" type="Resource" id=29]

[resource]
script = ExtResource( 1 )
title = "Learn GDScript From Zero"
lessons = [ ExtResource( 29 ), ExtResource( 5 ), ExtResource( 14 ), ExtResource( 19 ), ExtResource( 23 ), ExtResource( 8 ), ExtResource( 27 ), ExtResource( 25 ), ExtResource( 22 ), ExtResource( 16 ), ExtResource( 6 ), ExtResource( 26 ), ExtResource( 10 ), ExtResource( 3 ), ExtResource( 9 ), ExtResource( 24 ), ExtResource( 7 ), ExtResource( 13 ), ExtResource( 21 ), ExtResource( 17 ), ExtResource( 4 ), ExtResource( 12 ), ExtResource( 18 ), ExtResource( 20 ), ExtResource( 28 ), ExtResource( 2 ), ExtResource( 11 ), ExtResource( 15 ) ]
lessons = [ ExtResource( 11 ), ExtResource( 22 ), ExtResource( 19 ), ExtResource( 24 ), ExtResource( 5 ), ExtResource( 4 ), ExtResource( 9 ), ExtResource( 7 ), ExtResource( 27 ), ExtResource( 28 ), ExtResource( 20 ), ExtResource( 8 ), ExtResource( 21 ), ExtResource( 29 ), ExtResource( 16 ), ExtResource( 6 ), ExtResource( 13 ), ExtResource( 18 ), ExtResource( 26 ), ExtResource( 3 ), ExtResource( 15 ), ExtResource( 14 ), ExtResource( 23 ), ExtResource( 25 ), ExtResource( 10 ), ExtResource( 2 ), ExtResource( 17 ), ExtResource( 12 ) ]
6 changes: 4 additions & 2 deletions course/lesson-17-while-loops/lesson.tres
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ text = "You've seen that you can use functions to [i]reuse[/i] code. In this les

To illustrate how loops work, let's take a game board split into a grid.

Our robot can move to neighboring cells by changing a [code]Vector2[/code] variable named [code]cell[/code].
Our robot can move to neighboring cells by changing a [code]Vector2[/code] variable named [code]cell[/code]. It represents the current cell the robot is in.

When we increase [code]cell.x[/code], the robot moves to the right.

Expand Down Expand Up @@ -127,7 +127,9 @@ text = "Let's apply this to our [code]move_to_end()[/code] function.

This time, we compare the number of loops to the board's width. We go through the loop until we reach the width of the board.

Note that we move one less than the board's width because the robot is already on the first cell."
Note that we move the robot until its position is one less than the board's width because we are counting tiles from [code]0[/code].

A board of [code]3[/code] by [code]3[/code] cells would have cell coordinates going from [code]0[/code] to [code]2[/code] on both the X and Y axes."
visual_element_path = ""
reverse_blocks = false
has_separator = false
Expand Down
10 changes: 5 additions & 5 deletions course/lesson-17-while-loops/visuals/PrintWhileLoop.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@ script/source = "extends OutputConsole

func run() -> void:
clear_messages()
emit_signal(\"highlight_line\", 0)
emit_signal(\"line_highlight_requested\", 0)
yield()
var number = 0
emit_signal(\"highlight_line\", 1)
emit_signal(\"line_highlight_requested\", 1)
yield()
while number < 4:
emit_signal(\"highlight_line\", 2)
emit_signal(\"line_highlight_requested\", 2)
yield()
print_output([number])
emit_signal(\"highlight_line\", 3)
emit_signal(\"line_highlight_requested\", 3)
yield()
number += 1
emit_signal(\"highlight_line\", 4)
emit_signal(\"line_highlight_requested\", 4)
yield()
"

Expand Down
52 changes: 48 additions & 4 deletions course/lesson-18-for-loops/lesson.tres
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[gd_resource type="Resource" load_steps=25 format=2]
[gd_resource type="Resource" load_steps=29 format=2]

[ext_resource path="res://resources/Lesson.gd" type="Script" id=1]
[ext_resource path="res://resources/QuizChoice.gd" type="Script" id=2]
Expand Down Expand Up @@ -122,9 +122,53 @@ title = ""
type = 0
text = "In the above example, for each item in the list [code][0, 1, 2][/code], Godot sets [code]number[/code] to the item, then executes the code in the [code]for[/code] loop.

In this example, we're printing the value of [code]number[/code] as Godot moves through the loop.
We'll explain arrays more throughly in the next lesson, but notice that [code]number[/code] is just a temporary variable. You create it when defining the loop, and the loop takes care of changing its value. Also, you can name this variable anything you want.

We can put whatever code we like in the loop's code block, including other function calls like [code]draw_rectangle()[/code]."
This code behaves the same as the previous example:"
visual_element_path = ""
reverse_blocks = false
has_separator = false

[sub_resource type="Resource" id=21]
script = ExtResource( 3 )
content_id = "res://course/lesson-18-for-loops/content-UdOCQiGj.tres"
title = ""
type = 0
text = ""
visual_element_path = "visuals/PrintForLoopArray.tscn"
reverse_blocks = false
has_separator = false

[sub_resource type="Resource" id=20]
script = ExtResource( 3 )
content_id = "res://course/lesson-18-for-loops/content-0c7DDizK.tres"
title = ""
type = 0
text = "In both examples, we print the value of the temporary variable we created: [code]number[/code] in the first example and [code]element[/code] in the second.

As Godot moves through the loop, it assigns each value of the array to that variable. First, it sets the variable to [code]0[/code], then to [code]1[/code], and finally, to [code]2[/code].

We can break down the instructions the loop runs. You can see how a loop is a shortcut to code that otherwise gets very long."
visual_element_path = ""
reverse_blocks = false
has_separator = false

[sub_resource type="Resource" id=22]
script = ExtResource( 3 )
content_id = "res://course/lesson-18-for-loops/content-Q2XNwQMq.tres"
title = ""
type = 0
text = ""
visual_element_path = "visuals/PrintForLoopArrayUnwrapped.tscn"
reverse_blocks = false
has_separator = false

[sub_resource type="Resource" id=23]
script = ExtResource( 3 )
content_id = "res://course/lesson-18-for-loops/content-B7tKRHJM.tres"
title = ""
type = 0
text = "We can put whatever code we like in the loop's code block, including other function calls like [code]draw_rectangle()[/code]."
visual_element_path = ""
reverse_blocks = false
has_separator = false
Expand Down Expand Up @@ -255,5 +299,5 @@ description = "In the past we had to copy and paste code to draw multiple rectan
[resource]
script = ExtResource( 1 )
title = "Introduction to For Loops"
content_blocks = [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 15 ), SubResource( 5 ), SubResource( 6 ), SubResource( 7 ), SubResource( 8 ), SubResource( 9 ), SubResource( 16 ), SubResource( 10 ), SubResource( 11 ), SubResource( 12 ), SubResource( 19 ), SubResource( 13 ), SubResource( 14 ) ]
content_blocks = [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 15 ), SubResource( 5 ), SubResource( 6 ), SubResource( 7 ), SubResource( 8 ), SubResource( 9 ), SubResource( 21 ), SubResource( 20 ), SubResource( 22 ), SubResource( 23 ), SubResource( 16 ), SubResource( 10 ), SubResource( 11 ), SubResource( 12 ), SubResource( 19 ), SubResource( 13 ), SubResource( 14 ) ]
practices = [ SubResource( 17 ), SubResource( 18 ) ]
3 changes: 0 additions & 3 deletions course/lesson-18-for-loops/visuals/CodeForMove.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,4 @@ wrap_enabled = true
caret_block_mode = true
caret_blink = true
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
min_size = Vector2( 300, 140 )
4 changes: 1 addition & 3 deletions course/lesson-18-for-loops/visuals/CodeWhileMove.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@ margin_bottom = 60.0
rect_min_size = Vector2( 300, 210 )
size_flags_horizontal = 3
text = "func move_to_end():
var number = 0
while cell.x < board_size.x - 1:
cell.x += 1
number += 1"
cell.x += 1"
readonly = true
syntax_highlighting = true
show_line_numbers = true
Expand Down
43 changes: 43 additions & 0 deletions course/lesson-18-for-loops/visuals/PrintForLoopArray.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
[gd_scene load_steps=4 format=2]

[ext_resource path="res://ui/components/RunnableCodeExample.tscn" type="PackedScene" id=1]
[ext_resource path="res://ui/components/OutputConsole.tscn" type="PackedScene" id=2]

[sub_resource type="GDScript" id=1]
script/source = "extends OutputConsole

func run():
clear_messages()
emit_signal(\"line_highlight_requested\", 0)
yield()
for i in [0, 1, 2]:
emit_signal(\"line_highlight_requested\", 1)
emit_signal(\"animate_arrow_requested\", [17 + 3*i,1], [5,7])
yield()
print_output([i])
emit_signal(\"line_highlight_requested\", 2)
yield()
"

[node name="Panel" type="PanelContainer"]
margin_right = 14.0
margin_bottom = 14.0
size_flags_horizontal = 3

[node name="RunnableCodeExample" parent="." instance=ExtResource( 1 )]
margin_left = 7.0
margin_top = 7.0
margin_right = 788.0
margin_bottom = 267.0
gdscript_code = "func run():
for element in [0, 1, 2]:
print(element)"

[node name="OutputConsole" parent="RunnableCodeExample" instance=ExtResource( 2 )]
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 672.0
margin_right = 781.0
margin_bottom = 260.0
size_flags_horizontal = 3
script = SubResource( 1 )
75 changes: 75 additions & 0 deletions course/lesson-18-for-loops/visuals/PrintForLoopArrayUnwrapped.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
[gd_scene load_steps=4 format=2]

[ext_resource path="res://ui/components/OutputConsole.tscn" type="PackedScene" id=1]
[ext_resource path="res://ui/components/RunnableCodeExample.tscn" type="PackedScene" id=2]

[sub_resource type="GDScript" id=1]
script/source = "extends OutputConsole

func run():
clear_messages()
emit_signal(\"line_highlight_requested\", 0)
yield()

var array = [0, 1, 2]
emit_signal(\"line_highlight_requested\", 1)
yield()

var number
emit_signal(\"line_highlight_requested\", 2)
yield()

number = array[0]
emit_signal(\"line_highlight_requested\", 4)
yield()
print_output([number])
emit_signal(\"line_highlight_requested\", 5)
yield()

number = array[1]
emit_signal(\"line_highlight_requested\", 7)
yield()
print_output([number])
emit_signal(\"line_highlight_requested\", 8)
yield()

number = array[2]
emit_signal(\"line_highlight_requested\", 10)
yield()
print_output([number])
emit_signal(\"line_highlight_requested\", 11)
yield()
"

[node name="Panel" type="PanelContainer"]
margin_right = 14.0
margin_bottom = 14.0
rect_min_size = Vector2( 0, 400 )
size_flags_horizontal = 3

[node name="RunnableCodeExample" parent="." instance=ExtResource( 2 )]
margin_left = 7.0
margin_top = 7.0
margin_right = 788.0
margin_bottom = 393.0
gdscript_code = "func run():
var array = [0, 1, 2]
var element

element = array[0]
print(element)

element = array[1]
print(element)

element = array[2]
print(element)"

[node name="OutputConsole" parent="RunnableCodeExample" instance=ExtResource( 1 )]
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 672.0
margin_right = 781.0
margin_bottom = 386.0
size_flags_horizontal = 3
script = SubResource( 1 )