Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Well done!
      You have completed C# Objects!
      
    
You have completed C# Objects!
Preview
    
      
  Foreach loops are special loops intended for collections (like arrays).
This video doesn't have any notes.
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
                      We learned about for
loops in the previous video.
                      0:00
                    
                    
                      We wrote this for a loop so
                      0:03
                    
                    
                      that we could do something with all of
the invaders in the invaders array.
                      0:04
                    
                    
                      It turns out that looping through all the
items of a collection such as an array is
                      0:08
                    
                    
                      so common that there is yet another type
of loop that's designed to do just that.
                      0:12
                    
                    
                      It's called a for each loop.
                      0:18
                    
                    
                      I'll write what that looks like
below our existing four a loop, so
                      0:21
                    
                    
                      that we can compare the two loops.
                      0:24
                    
                    
                      With the four each loop we get rid of
the loop counter variable entirely.
                      0:30
                    
                    
                      This loop will always run if there's
at least one item in the array.
                      0:35
                    
                    
                      Each time through the loop,
                      0:40
                    
                    
                      the invader variable will be set
to the next item in the array.
                      0:41
                    
                    
                      So the first time through the loop,
                      0:45
                    
                    
                      invader will contain the first
invader in the array.
                      0:47
                    
                    
                      The second time through the loop it
will contain the second item, and so on.
                      0:51
                    
                    
                      Pretty neat?
                      0:56
                    
                    
                      Using for
                      0:57
                    
                    
                      each loops makes it clear that we want to
loop through every item in the collection.
                      0:58
                    
                    
                      We'll use this for each loop to look
at each invader in the array and
                      1:03
                    
                    
                      determine if it's in range of the tower.
                      1:06
                    
                    
                      We already know where the invader and
                      1:09
                    
                    
                      the towers are located because they
both have map location member variables.
                      1:11
                    
                    
                      We can use the distance to method to see
how far they are from each other and
                      1:16
                    
                    
                      then check if the distance is less
than the shooting range of the tower.
                      1:21
                    
                    
                      Why don't we write a method that
does this comparison for us?
                      1:25
                    
                    
                      We could put this method in the tower or
the invader classes.
                      1:29
                    
                    
                      However if we consider that this
method is really only determining if
                      1:33
                    
                    
                      two map locations are within
a certain distance of each other
                      1:37
                    
                    
                      I think it's best to put it
in the map location class.
                      1:41
                    
                    
                      Let's call this method in range of.
                      1:46
                    
                    
                      It will take another map location as
a parameter and an integer range.
                      1:48
                    
                    
                      Here we can call the distance to method we
already wrote to get the distance between
                      1:56
                    
                    
                      the map location object this method was
called on and the one that's passed in.
                      2:01
                    
                    
                      Then we'll check if that distance is less
than or equal to the range passed in.
                      2:07
                    
                    
                      We'll return the result
of this comparison.
                      2:12
                    
                    
                      Now back here in the tower
class we can write if our
                      2:14
                    
                    
                      location is in range of
                      2:20
                    
                    
                      the invaders location
using a range of one.
                      2:25
                    
                    
                      This one here is the width
of one grid square.
                      2:33
                    
                    
                      If the invader's in range,
we'll decrease its health.
                      2:38
                    
                    
                      This shows that the tower was able
to cause some damage to the invader.
                      2:40
                    
                    
                      And we'll have the invaders
health decreased by one.
                      2:44
                    
                    
                      As the code stands right now, the towers
can fire on every invader in range,
                      2:48
                    
                    
                      even if they've already
been neutralized or
                      2:53
                    
                    
                      even if they've made it
to the end of the path.
                      2:55
                    
                    
                      Let's fix this by only allowing them to
shoot at invaders that are still active
                      2:58
                    
                    
                      by checking the is active property we
previously added to the invader class.
                      3:02
                    
                    
                      So now the towers can only
decrease the health of an invader
                      3:07
                    
                    
                      if they're both active and
they're in range.
                      3:11
                    
                    
                      Finally let's handicap the towers a bit
                      3:14
                    
                    
                      by only letting them shoot
at one tower at a time.
                      3:17
                    
                    
                      We can do this by forcing the foreach
loop to exit after it's found and
                      3:21
                    
                    
                      shot one enemy.
                      3:25
                    
                    
                      For loops and for each loops just like
while loops, can use the break and
                      3:27
                    
                    
                      continue statements.
                      3:31
                    
                    
                      Remember the continue statement
like this causes the loop
                      3:33
                    
                    
                      to immediately go back to the beginning.
                      3:36
                    
                    
                      In the case of a for each loop,
the continue statement
                      3:39
                    
                    
                      causes the loop to move on to the next
item in the array or collection.
                      3:42
                    
                    
                      We don't want to use the continue
statement right here though.
                      3:48
                    
                    
                      I'm just showing it here, so
that you can see how it works.
                      3:50
                    
                    
                      Instead we want to break out of
the loop using the break statement.
                      3:53
                    
                    
                      There is nothing after the loop here.
                      3:58
                    
                    
                      So the method returns to
the code that called it.
                      4:00
                    
              
        You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up