{"componentChunkName":"component---src-templates-legacy-tutorial-page-js","path":"/oa/tutorials/code-wizard-castle/expand-powers/","result":{"pageContext":{"tutorial":{"id":"T0E6OlR1dG9yaWFsLTE4MQ==","slug":"code-wizard-castle","title":"Code Wizard Castle","previewText":"Begin your journey into\nthe world of Code Magic\nas an Apprentice Code Wizard.\nLearn to harness\nthe powers of Code Magic.\n","heroImagePath":"https://raw.githubusercontent.com/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial/master/cover.png","heroImageFile":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAABYlAAAWJQFJUiTwAAADUklEQVQ4y41UWU8TYRSdX+QuAiIxhpaWttNZum/QzpSytkBZ2lLARJYoFNkeRAETRV+ERIkvGvWvHXMuTluUBx9uptO537nnnHu/q/j8ATD8AVUioAahBjUENR2abiBk6HDrEbiNGBLxGNKZQQxlc7DsPAojoyiWpjA9U0Z5dg7V2iIUj3cADO+AT2LA55fwBVToAR/uxsegHnxF9Og7bqRnUC4VsdnYxsudHTx/sYn9gwNsbjUwWSxhdm4eigN0BUwYB6GpKnpDgwjsX0A7/IaexAgKto35SlXY1JeWsba+gdW1dUxNz2B+odICJJB3oB1QRSCoIaT60W1m0BmxETd1WPlhYTJTnhXQpeUV1JeWRPZCpXoJSMlX2bW8VDUDYcNALGQiEosjFo8jnkgiMziEbM7CcGEE4xOT/wK6+z0S/R5v01MWILBmmNDNMMxQWMBS6Yw0xs4PY2R0DBOTxRYgD/OFMphQLs+KF5VqDaNj43/MnsOz1TXJiURjAjg4lG12mgybHlKiU40JlJGzLHlnonO4WCoJeDQWbzK0rmOoG6b4QCmGGQLfE8mUHHKKJFNpjI1PwLLtJkNnFv8BZAKrky4ZkNXyylMs1tm5SxkEW9/YQM76D0CaT0Y0n/JpPJvBQwwyZvB3VLqcEMZ/e+gUV3iVthoN7OzuYndvD+/en8p8vX5zhB8/f2Fndw+vDg9x+uGjsA6FI0hlLn3N2bawnyyVUJqabjFkEoGd2eKTLOx8XjrNm8C7Sk+dplA+z6ZSGRhGGKFwFIv1OhQO79z8glAfymbFmz6XW+S3DzrzWJjNY7Fs1oLL40JvXw8ePumEX/OjVqtDoWe85JTDOSN1Drgz3ASkh8wjYGsOc3B5XXjseYReTzdc3j5UKjUorE4pHBn+ZnWuLnrD1cSRCkeiwowyhwsFJJJJsUbTTXR0dOHunQ5EYwlUazUorEaGNP745ASfzs7kVmw1tvH5ywWOjk+kIccnb3F2fi7fyJLgLN7V/RAPOjvFsuY+5CIlQz4pj0+OEf+jVI6V450TBOS3e/c7cPPWbbGBtkmX3f3e5lJwNk/7BqcFBKeHnMNUOi3No2w2kEF7eP+V65Zre2fbwSjV2Tacw+a2KRZlP3IOfwPgTVZG6rHa+QAAAABJRU5ErkJggg=="},"images":{"fallback":{"src":"/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/5aead/cover.png","srcSet":"/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/e9fba/cover.png 50w,\n/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/15e42/cover.png 100w,\n/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/5aead/cover.png 200w,\n/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/d6138/cover.png 400w","sizes":"(min-width: 200px) 200px, 100vw"},"sources":[{"srcSet":"/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/b79cb/cover.avif 50w,\n/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/6d0de/cover.avif 100w,\n/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/f2685/cover.avif 200w,\n/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/4ff31/cover.avif 400w","type":"image/avif","sizes":"(min-width: 200px) 200px, 100vw"},{"srcSet":"/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/dbc4a/cover.webp 50w,\n/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/d8057/cover.webp 100w,\n/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/2e34e/cover.webp 200w,\n/mediabook/static/d18ca09c34b889f7da14ad5021bd1aca/416c3/cover.webp 400w","type":"image/webp","sizes":"(min-width: 200px) 200px, 100vw"}]},"width":200,"height":200}}},"pages":{"nodes":[{"id":"T0E6OlBhZ2UtMTQ4NA==","title":"Getting Started","slug":"getting-started-fA4=","sections":{"nodes":[{"id":"T0E6OlNlY3Rpb24tNTk5Mw==","title":"Getting Started","htmlContent":"<p><a href=\"https://code.org/api/hour/begin_makeschool_wizard.png\" target=\"_blank\">\n          <img src=\"https://code.org/api/hour/begin_makeschool_wizard.png\" alt=\"hour of code tracking pixel\" title=\"Hour of Code Tracking Pixel\">\n        </a></p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P00-Getting-Started/assets/cover.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P00-Getting-Started/assets/cover.png\" alt=\"code wizard castle cover image\" title=\"code wizard castle cover image\">\n        </a></p><p>This tutorial is a beginner-friendly introduction to the basics of programming.</p><p>You'll start out by copying code, then learning to modify parts of the code, and finally you will start writing your own code from scratch.</p><p>At the end of the tutorial are additional challenges, for beginners and advanced learners, to push your programming understanding even further.</p><h2>Navigating the Tutorial</h2><h3>Learning</h3><p>Along the way, important information will be highlighted in an...</p><div class=\"info\">\n<p>\ninformation box</p>\n</div><h3>Doing</h3><p>Any time you need to add some code or complete and important step, you'll find it in an...</p><div class=\"action\">\n<p>\naction box</p>\n</div><h3>Checking</h3><p>After you've come up with your own answer, you can expand the...</p><div class=\"solution\">\n<p>\nsolution box</p>\n</div><h3>Growing</h3><p>Along the way and at the end of the tutorial, you can push yourself by tackling all of the...</p><div class=\"challenge\">\n<p>\nchallenges in boxes like this</p>\n</div><h2>What You'll Learn</h2><div class=\"info\">\n<p>\nIn this tutorial you will build up your comfort working with the basic building blocks of programming:</p>\n\n<ul>\n<li>variables</li>\n<li>objects</li>\n<li>functions</li>\n<li>conditional logic</li>\n<li>if statements</li>\n<li>loops</li>\n</ul>\n</div><p>Starting from an empty canvas, you will soon be creating and customizing your own wizard and castle, and giving your wizard magical powers to interact with the world around you.</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P00-Getting-Started/assets/final_castle.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P00-Getting-Started/assets/final_castle.png\" alt=\"screenshot of the final code wizard castle\" title=\"Final Code Wizard Castle\">\n        </a></p>"},{"id":"T0E6OlNlY3Rpb24tNTk5NA==","title":"Accessing the Starter Project","htmlContent":"<p>Where will you actually write the code? There are two options for getting the starter project.</p><h2>Best Option - Use repl.it</h2><p>Repl.it is a website makes it easy to jump right in to programming without having to set up a local environment. Whether you are a beginning or advanced programmer, it's a great way to jump right into the code.</p><div class=\"action\">\n<p>\nIn a new window, go to <a href=\"https://repl.it/@MakeSchoolRAMP/CodeWizardCastleTutorial\" target=\"_blank\">CodeWizardCastleTutorial on Repl.it</a></p>\n</div><!-- ### Repl.it Interface Overview --><!-- TODO: Screenshot and overview of navigating repl.it project --><h2>Alternate Option - Use GitHub</h2><p>This tutorial does not cover working with GitHub or getting set up for local development of web projects, but if those are things you are already comfortable with, you can clone the starter project from GitHub.</p><div class=\"action\">\n<p>\nIn a new window, go to <a href=\"https://github.com/MakeSchool-Tutorials/Code-Wizard-Castle-Starter\" target=\"_blank\">Code-Wizard-Castle-Starter on GitHub</a></p>\n</div>"},{"id":"T0E6OlNlY3Rpb24tNTk5NQ==","title":"Project Introduction","htmlContent":"<p>When viewing the starter project, you should see the following files:</p><pre><span class=\"n\">index</span><span class=\"p\">.</span><span class=\"n\">html</span>\n<span class=\"n\">sketch</span><span class=\"p\">.</span><span class=\"n\">js</span>\n<span class=\"n\">wizardClass</span><span class=\"p\">.</span><span class=\"n\">js</span>\n<span class=\"n\">spellFunctions</span><span class=\"p\">.</span><span class=\"n\">js</span>\n<span class=\"n\">drawFunctions</span><span class=\"p\">.</span><span class=\"n\">js</span>\n<span class=\"n\">helperFunctions</span><span class=\"p\">.</span><span class=\"n\">js</span></pre><h2>index.html</h2><p>The <code>index.html</code> page loads the content that you see in the browser when you run the program. Between the <code>&lt;body&gt;</code> and <code>&lt;/body&gt;</code> tags is where things like page headers and paragraph text are found.</p><div class=\"challenge\">\n<p>\nIn <code>index.html</code>, find <code>&lt;h1&gt;Code Wizard Castle&lt;/h1&gt;</code> and change it to <code>&lt;h1&gt;YOUR_NAME's Code Wizard Castle&lt;/h1&gt;</code></p>\n</div><p>Also in <code>index.html</code> are some <code>script</code> tags that load all of the <code>.js</code> (JavaScript) files needed for this project.</p><pre><span class=\"nt\">&lt;script </span><span class=\"na\">src=</span><span class=\"s\">\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/p5.js\"</span><span class=\"nt\">&gt;&lt;/script&gt;</span>\n<span class=\"nt\">&lt;script </span><span class=\"na\">src=</span><span class=\"s\">\"wizardClass.js\"</span><span class=\"nt\">&gt;&lt;/script&gt;</span>\n<span class=\"nt\">&lt;script </span><span class=\"na\">src=</span><span class=\"s\">\"helperFunctions.js\"</span><span class=\"nt\">&gt;&lt;/script&gt;</span>\n<span class=\"nt\">&lt;script </span><span class=\"na\">src=</span><span class=\"s\">\"spellFunctions.js\"</span><span class=\"nt\">&gt;&lt;/script&gt;</span>\n<span class=\"nt\">&lt;script </span><span class=\"na\">src=</span><span class=\"s\">\"drawFunctions.js\"</span><span class=\"nt\">&gt;&lt;/script&gt;</span>\n<span class=\"nt\">&lt;script </span><span class=\"na\">src=</span><span class=\"s\">\"sketch.js\"</span><span class=\"nt\">&gt;&lt;/script&gt;</span></pre><p>The first one, that ends in <code>libs/p5.js/0.6.1/p5.js</code> loads in helper functions from the <a href=\"p5js.org\" target=\"_blank\">p5.js Library</a>, which provides helper functions make it easier to display the visual elements of the project.</p><p>The rest of the loaded files are the files that belong to this project.</p><p>The main reason for having multiple files is to keep the code organized.</p><div class=\"info\">\n<p>\nThe <code>sketch.js</code> file is loaded last in <code>index.html</code> because it uses code from the other files to control the overall program.</p>\n</div><h2>sketch.js</h2><p>The majority of this tutorial will be making changes in <code>sketch.js</code>, with a few updates inside some of the other <code>.js</code> files as well towards the later part of the tutorial.</p><p>When viewing <code>sketch.js</code> you should see this starter code:</p><pre><span class=\"kd\">function</span> <span class=\"nx\">setup</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">createCanvas</span><span class=\"p\">(</span><span class=\"mi\">400</span><span class=\"p\">,</span> <span class=\"mi\">400</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">draw</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">background</span><span class=\"p\">(</span><span class=\"s2\">\"lightgray\"</span><span class=\"p\">);</span>\n<span class=\"p\">}</span></pre><p>When you first run the program you should see that right now it just has a light gray square on the page.</p><!-- TODO: image of starter page --><p>The <code>setup()</code> function only runs one time at the start of the program. Code should be added here if it only needs to run once, usually to assign initial values to things.</p><p>The line <code>createCanvas(400,400)</code> creates the canvas with a width and height of 400.</p><div class=\"challenge\">\n<p>\nTry adjusting the values passed to <code>createCanvas(width,height)</code> to see how the shape of the canvas changes</p>\n\n<p>Don't forget to reset it back to <code>createCanvas(400,400)</code> before you continue!</p>\n</div><p>The <code>draw()</code> function is a loop that runs forever for as long as you are running the program. This is the place for code that needs to update values or perform actions that should always happen.</p><p>The line <code>background(\"lightgray\")</code> fills the entire canvas with the color given.</p><div class=\"challenge\">\n<p>\nTry changing the color name in <code>background(\"colorName\")</code> to see if you can fill the canvas with different colors.</p>\n\n<p>Reset back to <code>background(\"lightgray\")</code> before you continue (unless you want a castle floor that's a unique color).</p>\n</div><p>These four helper functions are provided by the <a href=\"p5js.org\" target=\"_blank\">p5.js Library</a>, which has been designed to make creating art and designs with code more accessible.</p>"}]},"next":{"id":"T0E6OlBhZ2UtMTQ4NQ==","slug":"create-wizard","title":"Create Your Wizard"},"previous":{"id":"T0E6OlBhZ2UtMTQ4NQ==","slug":"create-wizard","title":"Create Your Wizard"}},{"id":"T0E6OlBhZ2UtMTQ4NQ==","title":"Create Your Wizard","slug":"create-wizard","sections":{"nodes":[{"id":"T0E6OlNlY3Rpb24tNTk5Ng==","title":"Create Your Wizard","htmlContent":"<p>Now, let's start adding some magic. But first, we'll need a wizard!</p><div class=\"action\">\n<p>\nAdd <code>var wizard, pet, magicScroll, broom;\n</code> to the <strong>very top</strong> of <code>sketch.js</code>, above <code>function setup()</code></p>\n</div><p>You've just declared 4 global variables that will be available for all of your code to access.</p><div class=\"info\">\n<p>\nVariables are how you save and refer to existing objects or values.</p>\n</div><p>Next up, make and save a <code>Wizard</code> to the <code>wizard</code> variable, and then call the <code>drawWizard()</code> function to make it appear.</p><div class=\"action\">\n<p></p>\n\n<ol>\n<li>Inside of <code>setup()</code>, on a new line, add <code>wizard = new Wizard();</code>\n</li>\n<li>Inside of <code>draw()</code>, on a new line, add <code>drawWizard();</code>\n</li>\n</ol>\n</div><p>Run your program and you should now see a shadowy wizard form!</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P01-Create-Your-Wizard/assets/shadow_wizard.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P01-Create-Your-Wizard/assets/shadow_wizard.png\" alt=\"shadowy wizard form\" title=\"Shadowy Wizard\">\n        </a></p><h2>Check</h2><p>Take a moment to check your code so far.</p><div class=\"solution\">\n<p></p>\n<pre><span class=\"kd\">var</span> <span class=\"nx\">wizard</span><span class=\"p\">,</span> <span class=\"nx\">pet</span><span class=\"p\">,</span> <span class=\"nx\">magicScroll</span><span class=\"p\">,</span> <span class=\"nx\">broom</span><span class=\"p\">;</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">setup</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n <span class=\"nx\">createCanvas</span><span class=\"p\">(</span><span class=\"mi\">400</span><span class=\"p\">,</span> <span class=\"mi\">400</span><span class=\"p\">);</span>\n\n <span class=\"nx\">wizard</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nx\">Wizard</span><span class=\"p\">();</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">draw</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n <span class=\"nx\">background</span><span class=\"p\">(</span><span class=\"s2\">\"lightgray\"</span><span class=\"p\">);</span>\n\n <span class=\"nx\">drawWizard</span><span class=\"p\">();</span>\n<span class=\"p\">}</span></pre>\n</div>"},{"id":"T0E6OlNlY3Rpb24tNTk5Nw==","title":"Coloring Your World","htmlContent":"<p>Time to bring your shadowy wizard to life with some colors.</p><div class=\"info\">\n<p>\nThere are 4 main ways to use the <code>color()</code> function to create colors.</p>\n\n<ol>\n<li>\n<code>color(number);</code>  // grayscale, 0-255, 0 for black, 255 for white</li>\n<li>\n<code>color(\"colorname\");</code> // named colors</li>\n<li>\n<code>color(number1, number2, number3);</code> // RGB (red, green, blue), 0-255 each</li>\n<li>\n<code>color(\"#abcdef\");</code> // hexcode colors</li>\n</ol>\n</div><p>Try one of each.</p><div class=\"action\">\n<p>\nOn a new line at the end of <code>setup()</code>, paste in the following, which will create and assign colors to several properties on <code>wizard</code>:</p>\n<pre><span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">wandColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"mi\">200</span><span class=\"p\">);</span>  <span class=\"c1\">// grayscale, 0 for black, 255 for white</span>\n<span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">hatColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"teal\"</span><span class=\"p\">);</span> <span class=\"c1\">// named colors</span>\n<span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">robeColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">);</span> <span class=\"c1\">// RGB (red, green, blue), 0-255</span>\n<span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">skinColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"#9e81f4\"</span><span class=\"p\">);</span> <span class=\"c1\">// hexcode colors</span></pre>\n</div><!--  --><div class=\"action\">\n<p>\nPlay with the 4 ways of making colors by changing the values until your wizard has a custom appearance.</p>\n</div><p>Explore by changing the numbers, color names, and hexcodes and seeing what happens.  Then you can <a href=\"https://www.google.com/search?q=colorpicker&amp;oq=colorpicker&amp;aqs=chrome..69i57j0l5.3848j1j1&amp;sourceid=chrome&amp;ie=UTF-8\" target=\"_blank\">search for \"color picker\"</a> to find tools that will help you get the values for any color you desire.</p><div class=\"action\">\n<p>\nAdd a few more lines to give your <code>wizard</code> a name:</p>\n<pre><span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">magicalName</span> <span class=\"o\">=</span> <span class=\"s2\">\"Wizard\"</span><span class=\"p\">;</span>\n<span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">magicalNameColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"#e8b255\"</span><span class=\"p\">);</span></pre>\n</div><!--  --><div class=\"action\">\n<p>\nCustomize your wizard's name and the color of the letter on their chest.</p>\n</div><p>You should now have a custom and colorful wizard in the middle of your canvas!</p><h2>Check</h2><div class=\"solution\">\n<p>\n<a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P01-Create-Your-Wizard/assets/colorful_wizard.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P01-Create-Your-Wizard/assets/colorful_wizard.png\" alt=\"custom colorful wizard\" title=\"custom colorful wizard\">\n        </a></p>\n<pre><span class=\"kd\">var</span> <span class=\"nx\">wizard</span><span class=\"p\">,</span> <span class=\"nx\">pet</span><span class=\"p\">,</span> <span class=\"nx\">magicScroll</span><span class=\"p\">,</span> <span class=\"nx\">broom</span><span class=\"p\">;</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">setup</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n <span class=\"nx\">createCanvas</span><span class=\"p\">(</span><span class=\"mi\">400</span><span class=\"p\">,</span> <span class=\"mi\">400</span><span class=\"p\">);</span>\n\n <span class=\"nx\">wizard</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nx\">Wizard</span><span class=\"p\">();</span>\n <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">wandColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"mi\">200</span><span class=\"p\">);</span>  <span class=\"c1\">// grayscale, 0 for black, 255 for white</span>\n <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">hatColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"teal\"</span><span class=\"p\">);</span> <span class=\"c1\">// named colors</span>\n <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">robeColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">);</span> <span class=\"c1\">// RGB (red, green, blue), 0-255</span>\n <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">skinColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"#9e81f4\"</span><span class=\"p\">);</span> <span class=\"c1\">// hexcode colors</span>\n <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">magicalName</span> <span class=\"o\">=</span> <span class=\"s2\">\"Wizard\"</span><span class=\"p\">;</span>\n <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">magicalNameColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"#e8b255\"</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">draw</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n <span class=\"nx\">background</span><span class=\"p\">(</span><span class=\"s2\">\"lightgray\"</span><span class=\"p\">);</span>\n\n <span class=\"nx\">drawWizard</span><span class=\"p\">();</span>\n<span class=\"p\">}</span></pre>\n</div>"}]},"next":{"id":"T0E6OlBhZ2UtMTQ4Ng==","slug":"decorate-castle","title":"Decorate Your Castle"},"previous":{"id":"T0E6OlBhZ2UtMTQ4Ng==","slug":"decorate-castle","title":"Decorate Your Castle"}},{"id":"T0E6OlBhZ2UtMTQ4Ng==","title":"Decorate Your Castle","slug":"decorate-castle","sections":{"nodes":[{"id":"T0E6OlNlY3Rpb24tNTk5OA==","title":"Decorate Your Castle","htmlContent":"<p>There is no castle to decorate quite yet. Let's add one.</p><div class=\"action\">\n<p>\nInside of <code>draw()</code>, add <code>drawCastle();</code> on a new line</p>\n</div><p>Did you put it before or after <code>drawWizard()</code>? Try switching the order to see what happens.</p><h2>Check</h2><div class=\"solution\">\n<p>\nOrder matters! If you call <code>drawCastle()</code> last, your <code>wizard</code> looks like he is stuck in the floor, because the floor tile lines were drawn <em>after</em> the <code>wizard</code>.</p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">draw</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">background</span><span class=\"p\">(</span><span class=\"s2\">\"lightgray\"</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">drawWizard</span><span class=\"p\">();</span>\n  <span class=\"nx\">drawCastle</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n<span class=\"p\">}</span></pre>\n<p>When you draw the castle <strong>after</strong> the wizard...</p>\n\n<p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P02-Decorate-Your-Castle/assets/floor_wizard.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P02-Decorate-Your-Castle/assets/floor_wizard.png\" alt=\"wizard in the floor\" title=\"wizard in the floor\">\n        </a></p>\n</div><!--  --><div class=\"action\">\n<p>\nPut the two functions in the correct order so that the <code>wizard</code> is on top.</p>\n</div><p>Now your wizard has a 4-room castle, nice!</p><p>There are still 3 global variables for other objects to add to the castle: <code>pet</code>, <code>magicScroll</code>, and <code>broom</code>.</p>"},{"id":"T0E6OlNlY3Rpb24tNTk5OQ==","title":"Summon Your Familiar","htmlContent":"<p>A wizard would be lonely without their familiar, their magical pet friend. Let's summon one and use some new code magic along the way!</p><p>So far, you've seen how to update values on an object using the <code>objectName.propertyName = value</code> format. Here's another way of creating and assigning values to an object all at once.</p><div class=\"action\">\n<p>\nInside of the <code>setup()</code> function, after everything else, add:</p>\n<pre><span class=\"nx\">pet</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n  <span class=\"nx\">x</span><span class=\"o\">:</span> <span class=\"mi\">100</span><span class=\"p\">,</span>\n  <span class=\"nx\">y</span><span class=\"o\">:</span> <span class=\"mi\">350</span><span class=\"p\">,</span>\n  <span class=\"nx\">type</span><span class=\"o\">:</span> <span class=\"s2\">\"cat\"</span><span class=\"p\">,</span>\n  <span class=\"nx\">color</span><span class=\"o\">:</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"black\"</span><span class=\"p\">),</span>\n<span class=\"p\">}</span></pre>\n</div><!--  --><div class=\"action\">\n<p>\nInside of <code>draw()</code>, add <code>drawPet();</code> (remember that order matters!)</p>\n</div><p>You should see a black cat in the lower left corner of the castle:</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P02-Decorate-Your-Castle/assets/black_cat.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P02-Decorate-Your-Castle/assets/black_cat.png\" alt=\"black cat\" title=\"black cat\">\n        </a></p><h2>Check</h2><div class=\"solution\">\n<p></p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">setup</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">createCanvas</span><span class=\"p\">(</span><span class=\"mi\">400</span><span class=\"p\">,</span> <span class=\"mi\">400</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">wizard</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nx\">Wizard</span><span class=\"p\">();</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n\n  <span class=\"c1\">// &lt;--- start</span>\n  <span class=\"nx\">pet</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"nx\">x</span><span class=\"o\">:</span> <span class=\"mi\">100</span><span class=\"p\">,</span>\n    <span class=\"nx\">y</span><span class=\"o\">:</span> <span class=\"mi\">350</span><span class=\"p\">,</span>\n    <span class=\"nx\">type</span><span class=\"o\">:</span> <span class=\"s2\">\"cat\"</span><span class=\"p\">,</span>\n    <span class=\"nx\">color</span><span class=\"o\">:</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"black\"</span><span class=\"p\">),</span>\n    <span class=\"nx\">walkSpeed</span><span class=\"o\">:</span> <span class=\"mf\">0.5</span><span class=\"p\">,</span>\n  <span class=\"p\">}</span>\n  <span class=\"c1\">// &lt;--- end</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">draw</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">background</span><span class=\"p\">(</span><span class=\"s2\">\"lightgray\"</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">drawCastle</span><span class=\"p\">();</span>\n  <span class=\"nx\">drawWizard</span><span class=\"p\">();</span>\n  <span class=\"nx\">drawPet</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n<span class=\"p\">}</span></pre>\n</div><p>Feel free to play with the values to change things and explore. You can change the pet's location by adjusting the <code>x</code> and <code>y</code> values inside of <code>pet = { ... }</code>.</p><div class=\"action\">\n<p>\nFor help getting exact coordinates, you can add the following helper code to the end of the <code>draw()</code> function: <code>reveal(mouseLocation(), \"mouseInfo\");</code></p>\n</div><!--  --><div class=\"info\">\n<p>\nHave you noticed that bigger <code>y</code> values are lower on the canvas? That's because position <code>0, 0</code> is in the <strong>upper left</strong> corner, not the bottom left.</p>\n</div><p>Now you should see the coordinates that your mouse is at on the top left corner above the canvas.</p><h2>Check</h2><div class=\"solution\">\n<p></p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">draw</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">background</span><span class=\"p\">(</span><span class=\"s2\">\"lightgray\"</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">drawWizard</span><span class=\"p\">();</span>\n  <span class=\"nx\">drawCastle</span><span class=\"p\">();</span>\n  <span class=\"nx\">drawPet</span><span class=\"p\">();</span>\n\n  <span class=\"nx\">reveal</span><span class=\"p\">(</span><span class=\"nx\">mouseLocation</span><span class=\"p\">(),</span> <span class=\"s2\">\"mouseInfo\"</span><span class=\"p\">);</span> <span class=\"c1\">// &lt;---</span>\n<span class=\"p\">}</span></pre>\n<p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P02-Decorate-Your-Castle/assets/coords.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P02-Decorate-Your-Castle/assets/coords.png\" alt=\"mouse coordinates above canvas\" title=\"mouse coordinates above canvas\">\n        </a></p>\n</div><!--  --><div class=\"challenge\">\n<p>\nIf you don't want a <code>\"cat\"</code>, you can also try a <code>\"frog\"</code>, or <code>\"ghost\"</code> for your pet's <code>type</code>.</p>\n</div>"},{"id":"T0E6OlNlY3Rpb24tNjAwMA==","title":"More Magical Objects","htmlContent":"<p>Let's add object properties for the last two global variables, <code>magicScroll</code> and <code>broom</code>, so your wizard can have a full collection of magical objects.</p><p>Just like you did for adding the pet, you'll add some properties to each object in <code>setup()</code> and then call the function that draws it inside of <code>draw()</code>.</p><div class=\"action\">\n<p>\nInside of <code>setup()</code>, after <code>pet = { ... }</code>, add:</p>\n<pre><span class=\"nx\">magicScroll</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n  <span class=\"nx\">x</span><span class=\"o\">:</span> <span class=\"mi\">300</span><span class=\"p\">,</span>\n  <span class=\"nx\">y</span><span class=\"o\">:</span> <span class=\"mi\">50</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n\n<span class=\"nx\">broom</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n  <span class=\"nx\">x</span><span class=\"o\">:</span> <span class=\"mi\">350</span><span class=\"p\">,</span>\n  <span class=\"nx\">y</span><span class=\"o\">:</span> <span class=\"mi\">350</span><span class=\"p\">,</span>\n<span class=\"p\">}</span></pre>\n</div><!--  --><div class=\"action\">\n<p>\nInside of <code>draw()</code>, add <code>drawScroll();</code> and <code>drawBroom();</code></p>\n</div><!--  --><div class=\"action\">\n<p>\nAdjust the values so that the <code>magicScroll</code> is on the desk in the study, and the <code>broom</code> is by the fireplace in the kitchen.</p>\n</div><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P02-Decorate-Your-Castle/assets/decorated_castle.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P02-Decorate-Your-Castle/assets/decorated_castle.png\" alt=\"decorated castle\" title=\"decorated castle\">\n        </a></p><h2>Check</h2><div class=\"solution\">\n<p></p>\n<pre><span class=\"kd\">var</span> <span class=\"nx\">wizard</span><span class=\"p\">,</span> <span class=\"nx\">pet</span><span class=\"p\">,</span> <span class=\"nx\">magicScroll</span><span class=\"p\">,</span> <span class=\"nx\">broom</span><span class=\"p\">;</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">setup</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">createCanvas</span><span class=\"p\">(</span><span class=\"mi\">400</span><span class=\"p\">,</span> <span class=\"mi\">400</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">wizard</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nx\">Wizard</span><span class=\"p\">();</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">wandColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"mi\">200</span><span class=\"p\">);</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">hatColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"teal\"</span><span class=\"p\">);</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">robeColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">);</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">skinColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"#9e81f4\"</span><span class=\"p\">);</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">magicalName</span> <span class=\"o\">=</span> <span class=\"s2\">\"Wizard\"</span><span class=\"p\">;</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">magicalNameColor</span> <span class=\"o\">=</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"#e8b255\"</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">pet</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"nx\">x</span><span class=\"o\">:</span> <span class=\"mi\">100</span><span class=\"p\">,</span>\n    <span class=\"nx\">y</span><span class=\"o\">:</span> <span class=\"mi\">350</span><span class=\"p\">,</span>\n    <span class=\"nx\">type</span><span class=\"o\">:</span> <span class=\"s2\">\"cat\"</span><span class=\"p\">,</span>\n    <span class=\"nx\">color</span><span class=\"o\">:</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"black\"</span><span class=\"p\">),</span>\n    <span class=\"nx\">walkSpeed</span><span class=\"o\">:</span> <span class=\"mf\">0.5</span><span class=\"p\">,</span>\n  <span class=\"p\">}</span>\n\n  <span class=\"c1\">// &lt;--- start</span>\n  <span class=\"nx\">magicScroll</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"nx\">x</span><span class=\"o\">:</span> <span class=\"mi\">380</span><span class=\"p\">,</span>\n    <span class=\"nx\">y</span><span class=\"o\">:</span> <span class=\"mi\">50</span><span class=\"p\">,</span>\n  <span class=\"p\">}</span>\n\n  <span class=\"nx\">broom</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"nx\">x</span><span class=\"o\">:</span> <span class=\"mi\">50</span><span class=\"p\">,</span>\n    <span class=\"nx\">y</span><span class=\"o\">:</span> <span class=\"mi\">350</span><span class=\"p\">,</span>\n  <span class=\"p\">}</span>\n  <span class=\"c1\">// &lt;--- end</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">draw</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">background</span><span class=\"p\">(</span><span class=\"s2\">\"lightgray\"</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">drawCastle</span><span class=\"p\">();</span>\n  <span class=\"nx\">drawWizard</span><span class=\"p\">();</span>\n  <span class=\"nx\">drawPet</span><span class=\"p\">();</span>\n  <span class=\"nx\">drawScroll</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"nx\">drawBroom</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n\n  <span class=\"nx\">reveal</span><span class=\"p\">(</span><span class=\"nx\">mouseLocation</span><span class=\"p\">(),</span> <span class=\"s2\">\"mouseInfo\"</span><span class=\"p\">);</span>\n<span class=\"p\">}</span></pre>\n</div>"}]},"next":{"id":"T0E6OlBhZ2UtMTQ4Nw==","slug":"animate-castle","title":"Animate Your Castle"},"previous":{"id":"T0E6OlBhZ2UtMTQ4Nw==","slug":"animate-castle","title":"Animate Your Castle"}},{"id":"T0E6OlBhZ2UtMTQ4Nw==","title":"Animate Your Castle","slug":"animate-castle","sections":{"nodes":[{"id":"T0E6OlNlY3Rpb24tNjAwMQ==","title":"Animate Your Castle","htmlContent":"<p>Right now your castle is pretty static, with no movement other than your wizard looking around. Let's bring things to life!</p><p>First let's give your <code>wizard</code> the ability to walk around, by adding another property <code>walkSpeed</code> and then calling a helper function that will update the position for you.</p><div class=\"action\">\n<p>\nInside of <code>setup()</code>, at the end of the other wizard properties, add <code>wizard.walkSpeed = 0.5;</code></p>\n</div><!--  --><div class=\"action\">\n<p>\nInside of <code>draw()</code>,  add <code>wizard.updatePosition();</code></p>\n</div><p>Now you should see your <code>wizard</code> automatically walking towards wherever your mouse is.</p><div class=\"solution\">\n<p></p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">setup</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">createCanvas</span><span class=\"p\">(</span><span class=\"mi\">400</span><span class=\"p\">,</span> <span class=\"mi\">400</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">wizard</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nx\">Wizard</span><span class=\"p\">();</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">walkSpeed</span> <span class=\"o\">=</span> <span class=\"mf\">0.5</span><span class=\"p\">;</span> <span class=\"c1\">// &lt;---</span>\n\n  <span class=\"c1\">// ... code skipped for brevity</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">draw</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">background</span><span class=\"p\">(</span><span class=\"s2\">\"lightgray\"</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">updatePosition</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n\n  <span class=\"nx\">reveal</span><span class=\"p\">(</span><span class=\"nx\">mouseLocation</span><span class=\"p\">(),</span> <span class=\"s2\">\"mouseInfo\"</span><span class=\"p\">);</span>\n<span class=\"p\">}</span></pre>\n</div>"},{"id":"T0E6OlNlY3Rpb24tNjAwMg==","title":"Functional Motion","htmlContent":"<p>But let's give you a little more control - instead of the <code>wizard</code> walking all of the time, let's change it to only update position when you have pressed the <code>SHIFT</code> key on the keyboard.</p><p>To accomplish this, you'll add your first custom function and then call it!</p><div class=\"action\">\n<p>\nAt the end of <code>sketch.js</code>, <strong>after</strong> the end of the <code>draw()</code> function, add a new custom function called <code>updateWizardPosition()</code>:</p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">updateWizardPosition</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">keyIsDown</span><span class=\"p\">(</span><span class=\"nx\">SHIFT</span><span class=\"p\">))</span> <span class=\"p\">{</span>\n    <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">updatePosition</span><span class=\"p\">();</span>\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"c1\">// do not move the wizard</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span></pre>\n</div><p>This function contains an <code>if else</code> statement that checks if the <code>SHIFT</code> key is currently being pressed using the helper function <code>keyIsDown()</code>. If the result is yes, or <code>true</code>, then it will call <code>wizard.updatePosition();</code>, if not, it will do nothing.</p><div class=\"info\">\n<p>\nIncluding an <code>else</code> statement that doesn't do anything isn't required, but it is a good way to keep things easy to read and to add a note about the effect of doing nothing.</p>\n</div><p>Now that we have this new function, let's call it:</p><div class=\"action\">\n<p>\nBack up in <code>draw()</code>, remove <code>wizard.updatePosition();</code> and replace it with a call to your new function: <code>updateWizardPosition();</code></p>\n</div><p>Now, your <code>wizard</code> should only walk towards the mouse when you are pressing the <code>SHIFT</code> button.</p><div class=\"info\">\n<p>\n<strong>NOTE:</strong> Be sure to click onto the canvas first, otherwise the key press won't be correctly captured and your wizard won't walk.</p>\n</div><h2>Check</h2><div class=\"solution\">\n<p></p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">draw</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">background</span><span class=\"p\">(</span><span class=\"s2\">\"lightgray\"</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">updateWizardPosition</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// &lt;--- start</span>\n<span class=\"kd\">function</span> <span class=\"nx\">updateWizardPosition</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">keyIsDown</span><span class=\"p\">(</span><span class=\"nx\">SHIFT</span><span class=\"p\">))</span> <span class=\"p\">{</span>\n    <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">updatePosition</span><span class=\"p\">();</span>\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"c1\">// do not move the wizard</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n<span class=\"c1\">// &lt;--- end</span></pre>\n</div>"},{"id":"T0E6OlNlY3Rpb24tNjAwMw==","title":"Frolicking Familiar","htmlContent":"<p>Let's get your pet moving now, too.</p><p>Just like we gave the <code>wizard</code> a <code>walkSpeed</code> we need to give one to the <code>pet</code>.</p><div class=\"action\">\n<p>\nAdd a new property to the end of the <code>pet</code> object properties:</p>\n<pre><span class=\"nx\">pet</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n  <span class=\"nx\">x</span><span class=\"o\">:</span> <span class=\"mi\">100</span><span class=\"p\">,</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n  <span class=\"nx\">color</span><span class=\"o\">:</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"black\"</span><span class=\"p\">),</span>\n  <span class=\"nx\">walkSpeed</span><span class=\"o\">:</span> <span class=\"mf\">0.5</span><span class=\"p\">,</span> <span class=\"c1\">// &lt;---</span>\n<span class=\"p\">}</span></pre>\n</div><p>Like before, we're also going to add a new custom function, <code>updatePetPosition()</code>, that will help control how the pet moves. For this one you'll learn how to work with an even bigger <code>if</code> statement.</p><div class=\"action\">\n<p>\nAt the end of <code>sketch.js</code>, add:</p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">updatePetPosition</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">&gt;</span> <span class=\"nx\">width</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">walkSpeed</span> <span class=\"o\">=</span> <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">walkSpeed</span> <span class=\"o\">*</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">walkSpeed</span> <span class=\"o\">=</span> <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">walkSpeed</span> <span class=\"o\">*</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"c1\">// leave walkSpeed the same</span>\n  <span class=\"p\">}</span>\n\n  <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">=</span> <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">+</span> <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">walkSpeed</span><span class=\"p\">;</span>\n<span class=\"p\">}</span></pre>\n</div><p>Take a few minutes to examine the 3-part <code>if else</code> statement.</p><p>The first <code>if</code> checks if the <code>pet</code> has walked past the right edge of the canvas (the variable <code>width</code> is automatically assigned to match the size of the canvas from <code>createCanvas</code>).</p><p>The second part, <code>else if</code>, checks if the <code>pet</code> has gone off the left side of the canvas.</p><p>In either of those cases, <code>pet.walkSpeed</code> is multiplied by <code>-1</code> in order to reverse the direction the <code>pet</code> is walking.</p><p>Lastly, the <code>else</code> statement is for any time the <code>pet</code> is not on either edge, and should not alter <code>walkSpeed</code>.</p><p>Positive speed walks to the right, negative to left, as the <code>pet.x</code> value is updated in the last line of the function.</p><p>Now we need to call our new function to get that familiar frolicking back and forth in the castle.</p><div class=\"action\">\n<p>\nInside of <code>draw()</code>, add <code>updatePetPosition();</code></p>\n</div><p>Your wizard's familiar should now be moving back and forth horizontally in the castle.</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P03-Animate-Your-Castle/assets/frolicking.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P03-Animate-Your-Castle/assets/frolicking.png\" alt=\"frolicking familiar\" title=\"frolicking familiar\">\n        </a></p><h2>Check</h2><div class=\"solution\">\n<p></p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">setup</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n\n  <span class=\"nx\">pet</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"c1\">// ... code skipped for brevity</span>\n    <span class=\"nx\">walkSpeed</span><span class=\"o\">:</span> <span class=\"mf\">0.5</span><span class=\"p\">,</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"p\">}</span>\n\n  <span class=\"c1\">// ... code skipped for brevity</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">draw</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">background</span><span class=\"p\">(</span><span class=\"s2\">\"lightgray\"</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">updateWizardPosition</span><span class=\"p\">();</span>\n  <span class=\"nx\">updatePetPosition</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">updateWizardPosition</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// &lt;--- start</span>\n<span class=\"kd\">function</span> <span class=\"nx\">updatePetPosition</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">&gt;</span> <span class=\"nx\">width</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">walkSpeed</span> <span class=\"o\">=</span> <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">walkSpeed</span> <span class=\"o\">*</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">walkSpeed</span> <span class=\"o\">=</span> <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">walkSpeed</span> <span class=\"o\">*</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"c1\">// leave walkSpeed the same</span>\n  <span class=\"p\">}</span>\n\n  <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">=</span> <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">+</span> <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">walkSpeed</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n<span class=\"c1\">// &lt;--- end</span></pre>\n</div>"},{"id":"T0E6OlNlY3Rpb24tNjAwNA==","title":"Turn Up the Heat","htmlContent":"<p>Stone castles get cold. Let's add one more touch of motion to warm up this castle - a nice roaring fire in the kitchen!</p><p>To add this effect, you'll make a tiny change to an existing function inside of the <code>drawFunctions.js</code> file.</p><div class=\"action\">\n<p>\nNavigate to the <code>drawFunctions.js</code> file, scroll down to find the <code>drawKitchen()</code> function, and locate the <code>// draw fire</code> section (just after line 150).</p>\n</div><p>Take a look at the existing code:</p><pre><span class=\"c1\">// draw fire</span>\n<span class=\"kd\">var</span> <span class=\"nx\">fireX</span> <span class=\"o\">=</span> <span class=\"nx\">x</span> <span class=\"o\">+</span> <span class=\"mi\">15</span><span class=\"p\">;</span>\n<span class=\"kd\">var</span> <span class=\"nx\">fireY</span> <span class=\"o\">=</span> <span class=\"nx\">y</span> <span class=\"o\">+</span> <span class=\"mi\">95</span><span class=\"p\">;</span>\n\n<span class=\"nx\">fill</span><span class=\"p\">(</span><span class=\"s2\">\"orange\"</span><span class=\"p\">);</span>\n\n<span class=\"k\">while</span> <span class=\"p\">(</span><span class=\"nx\">fireX</span> <span class=\"o\">&lt;</span> <span class=\"nx\">cauldWidth</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n  <span class=\"kd\">var</span> <span class=\"nx\">flameHeight</span> <span class=\"o\">=</span> <span class=\"mi\">10</span><span class=\"p\">;</span> <span class=\"c1\">// TODO: update flameHeight value</span>\n\n  <span class=\"nx\">triangle</span><span class=\"p\">(</span><span class=\"nx\">fireX</span><span class=\"p\">,</span> <span class=\"nx\">fireY</span><span class=\"p\">,</span> <span class=\"nx\">fireX</span> <span class=\"o\">+</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"nx\">fireY</span><span class=\"p\">,</span> <span class=\"nx\">fireX</span> <span class=\"o\">+</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"nx\">fireY</span> <span class=\"o\">-</span> <span class=\"nx\">flameHeight</span><span class=\"p\">);</span>\n  <span class=\"nx\">fireX</span> <span class=\"o\">+=</span> <span class=\"mi\">7</span><span class=\"p\">;</span>\n<span class=\"p\">}</span></pre><p>This code is using <strong>local</strong> variables, <code>fireX</code>, <code>fireY</code>, <code>flameHeight</code>, and <code>cauldWidth</code> (defined a few lines above in <code>drawKitchen()</code>).</p><div class=\"info\">\n<p>\nLocal variables are defined, assigned, and used within a single code block, between { and }.</p>\n</div><p>That means that these variables are not visible or available for use outside of the <code>drawKitchen()</code> function.</p><p>The part that needs to change is <code>flameHeight</code>. This variable is used in the <code>triangle()</code> function to create the top point of the triangle. Right now it's set to <code>0</code>, which is why we don't see any triangle flames.</p><div class=\"action\">\n<p>\nChange the value to <code>10</code> and see how the fire appears under the cauldron: <code>var flameHeight = 10;</code></p>\n</div><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P03-Animate-Your-Castle/assets/cauldron_flames.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P03-Animate-Your-Castle/assets/cauldron_flames.png\" alt=\"cauldron flames\" title=\"cauldron flames\">\n        </a></p><p>The flames are created using a <code>while</code> loop.</p><div class=\"info\">\n<p>\nUnlike <code>if</code> statements, which run once if <code>true</code>, as long as the conditional statement of a <code>while</code> loop is <code>true</code>, the contents of the loop are repeated.</p>\n</div><p>Notice that the value of <code>fireX</code> is updated each time it reaches the end of the loop. Eventually, <code>fireX</code> will increase until it is more than <code>cauldWidth</code> (currently assigned to <code>40</code>), and the condition will be <code>false</code> and the loop is ended.</p><div class=\"challenge\">\n<p>\nPlay with changing the value of <code>cauldWidth</code> - what effect does it have?</p>\n</div><p>Since the code that assigns <code>flameHeight</code> is called each time the loop repeats, let's change the value each time for a more lively fire effect.</p><p>We can use the helper function <code>random()</code>.</p><div class=\"action\">\n<p>\nReplace <code>var flameHeight = 10;</code> with <code>var flameHeight = random(10,20);</code></p>\n</div><p>Watch the flames come to life.</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P03-Animate-Your-Castle/assets/random_flames.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P03-Animate-Your-Castle/assets/random_flames.png\" alt=\"random flames\" title=\"random flames\">\n        </a><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P03-Animate-Your-Castle/assets/random_flames_2.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P03-Animate-Your-Castle/assets/random_flames_2.png\" alt=\"random flames 2\" title=\"random flames 2\">\n        </a></p><div class=\"info\">\n<p>\nThe two values passed to <code>random()</code> are the low and high numbers that you want it to randomly select from.</p>\n</div><p>In this case the smallest a flame could be is <code>20</code>, and the biggest is <code>15</code>.</p><div class=\"action\">\n<p>\nTry out other values to create a bigger or smaller fire effect.</p>\n</div><h2>Check</h2><div class=\"solution\">\n<p></p>\n<pre><span class=\"c1\">// inside of drawFunctions.js</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">drawKitchen</span><span class=\"p\">(</span><span class=\"nx\">x</span><span class=\"p\">,</span> <span class=\"nx\">y</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n  <span class=\"nx\">drawRoomLabel</span><span class=\"p\">(</span><span class=\"s2\">\"Kitchen\"</span><span class=\"p\">,</span>  <span class=\"nx\">x</span> <span class=\"o\">+</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"nx\">y</span> <span class=\"o\">+</span> <span class=\"mi\">190</span><span class=\"p\">);</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n\n  <span class=\"c1\">// draw fire</span>\n  <span class=\"kd\">var</span> <span class=\"nx\">fireX</span> <span class=\"o\">=</span> <span class=\"nx\">x</span> <span class=\"o\">+</span> <span class=\"mi\">15</span><span class=\"p\">;</span>\n  <span class=\"kd\">var</span> <span class=\"nx\">fireY</span> <span class=\"o\">=</span> <span class=\"nx\">y</span> <span class=\"o\">+</span> <span class=\"mi\">95</span><span class=\"p\">;</span>\n\n  <span class=\"nx\">fill</span><span class=\"p\">(</span><span class=\"s2\">\"orange\"</span><span class=\"p\">);</span>\n\n  <span class=\"k\">while</span> <span class=\"p\">(</span><span class=\"nx\">fireX</span> <span class=\"o\">&lt;</span> <span class=\"nx\">cauldWidth</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"kd\">var</span> <span class=\"nx\">flameHeight</span> <span class=\"o\">=</span> <span class=\"nx\">random</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">);</span> <span class=\"c1\">// &lt;---</span>\n\n    <span class=\"nx\">triangle</span><span class=\"p\">(</span><span class=\"nx\">fireX</span><span class=\"p\">,</span> <span class=\"nx\">fireY</span><span class=\"p\">,</span> <span class=\"nx\">fireX</span> <span class=\"o\">+</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"nx\">fireY</span><span class=\"p\">,</span> <span class=\"nx\">fireX</span> <span class=\"o\">+</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"nx\">fireY</span> <span class=\"o\">-</span> <span class=\"o\">&gt;</span> <span class=\"nx\">flameHeight</span><span class=\"p\">);</span>\n    <span class=\"nx\">fireX</span> <span class=\"o\">+=</span> <span class=\"mi\">7</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span></pre>\n</div>"}]},"next":{"id":"T0E6OlBhZ2UtMTQ4OA==","slug":"cast-spells","title":"Cast Your Spells"},"previous":{"id":"T0E6OlBhZ2UtMTQ4OA==","slug":"cast-spells","title":"Cast Your Spells"}},{"id":"T0E6OlBhZ2UtMTQ4OA==","title":"Cast Your Spells","slug":"cast-spells","sections":{"nodes":[{"id":"T0E6OlNlY3Rpb24tNjAwNQ==","title":"Cast Your Spells","htmlContent":"<p>The time has come to add some interaction by giving your <code>wizard</code> some spells to cast.</p><p>We'll make it so that your <code>wizard</code> casts a spell when you click the mouse.</p><div class=\"action\">\n<p>\nAt the end of <code>sketch.js</code>, after your other custom functions, add:</p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">mousePressed</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">castSpell</span><span class=\"p\">();</span>\n<span class=\"p\">}</span></pre>\n</div><p>If you peek inside of <code>wizardClass.js</code> file to look at the <code>castSpell()</code> function, you can see that it checks if <code>currentSpell</code> exists, and if it does, it will call it:</p><pre><span class=\"c1\">// inside of wizardClass.js</span>\n\n<span class=\"nx\">castSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"k\">this</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"k\">this</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span><span class=\"p\">();</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span></pre>\n<div class=\"info\">\n<p>\nWhat is <code>this</code>?</p>\n\n<p><code>this.propertyName</code> or <code>this.functionName()</code> is the way that class objects refer to their own values and call class functions.</p>\n\n<p>It can take some time to get used to working with <code>this</code> - for now you can think of it working just as if you were to use <code>wizard.propertyName</code> or <code>wizard.functionName()</code>.</p>\n</div><p>So far, every time we've added a new function we have also had to then call the function from somewhre. But the <code>mousePressed()</code> function is special.</p><div class=\"info\">\n<p>\nThe <code>mousePressed()</code> helper function is part of the <code>p5.js</code> library, and is automatically called when you click the mouse on the canvas, so you do not need to call it from anywhere.</p>\n</div><h2>Check</h2><div class=\"solution\">\n<p></p>\n<pre><span class=\"kd\">var</span> <span class=\"nx\">wizard</span><span class=\"p\">,</span> <span class=\"nx\">pet</span><span class=\"p\">,</span> <span class=\"nx\">magicScroll</span><span class=\"p\">,</span> <span class=\"nx\">broom</span><span class=\"p\">;</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">setup</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">draw</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">updateWizardPosition</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">updatePetPosition</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"c1\">// ... code skipped for brevity</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">mousePressed</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">castSpell</span><span class=\"p\">();</span>\n<span class=\"p\">}</span></pre>\n</div><p>Even though <code>mousePressed()</code> <strong>is</strong> automatically called for you, if you try the program now you won't see any change because we haven't given the <code>wizard</code> a <code>.currentSpell</code> yet, so <code>if (this.currentSpell)</code> will always be <code>false</code>.</p>"},{"id":"T0E6OlNlY3Rpb24tNjAwNg==","title":"Spell Selection","htmlContent":"<p>We have several different spells to use, so let's add function <code>updateCurrentSpell()</code> that will control which one to use based on which room the <code>wizard</code> is in.</p><p>By the end, <code>updateCurrentSpell()</code> will help the wizard to:</p><ul>\n<li>In the bedroom, cast a spell to change outfits.</li>\n<li>In the kitchen, cast a transformation spell on the familiar.</li>\n<li>In the study, reveal the magic message on the scroll.</li>\n<li>In the great hall, levitate the broom.</li>\n</ul><p>Start by adding the beginning of the <code>if else</code> statement that will help switch between spells.</p><div class=\"action\">\n<p>\nAt the end of <code>sketch.js</code>, add:</p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">updateCurrentSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"kc\">false</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span> <span class=\"o\">=</span> <span class=\"nx\">changeOutfitSpell</span><span class=\"p\">;</span>\n\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span> <span class=\"o\">=</span> <span class=\"nx\">noSpell</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span></pre>\n</div><!--  --><div class=\"action\">\n<p>\n Inside of <code>draw()</code>, add <code>updateCurrentSpell();</code></p>\n</div><p>If you try it now, you should see your wizard saying \"Hmmm...\" when you click the mouse.</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/hmmm.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/hmmm.png\" alt=\"wizard saying hmmm\" title=\"wizard saying hmmm\">\n        </a></p><p>Because the <code>if</code> condition is currently set to <code>false</code> it will <strong>always</strong> use the final <code>else</code> statement and assign <code>.currentSpell</code> to <code>noSpell</code>.</p><p>If you look in <code>spellFunctions.js</code>, you'll see that <code>noSpell</code> doesn't do anything other than have the <code>wizard</code> say <code>Hmmmm...</code>, just as you saw.</p><pre><span class=\"c1\">// at the top of spellFunctions.js</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">noSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">say</span><span class=\"p\">(</span><span class=\"s2\">\"Hmmm...\"</span><span class=\"p\">);</span>\n<span class=\"p\">}</span></pre><p>This is exactly what we want, so that there's always a backup assigned in case none of the other <code>if</code> conditions are <code>true</code>, so that from now on, <code>wizard.currentSpell</code> always has a value.</p><p>If you change <code>false</code> to <code>true</code>, then it will always assign the <code>changeOutfitSpell</code>.</p><p>If you look closely, you may see that in <code>updateCurrentSpell</code> we aren't using <code>()</code> at the end of the function names - this is intentional!</p><div class=\"info\">\n<p>\nIn JavaScript, the way that you <strong>call</strong> or <strong>perform</strong> a function is by adding <code>()</code> to the end.</p>\n</div><p>But in this situation, we just want to <strong>refer</strong> to the function by using it's name without the parentheses <code>()</code>.</p><div class=\"info\">\n<p>\nIn JavaScript, named functions are really just variables that point to function objects!</p>\n<pre><span class=\"c1\">// try this at the end of the setup function</span>\n\n<span class=\"kd\">var</span> <span class=\"nx\">namedFunction</span> <span class=\"o\">=</span> <span class=\"kd\">function</span> <span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">say</span><span class=\"p\">(</span><span class=\"s2\">\"Mind blown!\"</span><span class=\"p\">)</span>\n<span class=\"p\">}</span>\n<span class=\"nx\">namedFunction</span><span class=\"p\">();</span></pre>\n</div><p>If you look at the <code>castSpell()</code> function in <code>wizardClass.js</code> again, you can see that it first refers to <code>currentSpell</code> and then it calls the function with <code>()</code>:</p><pre><span class=\"nx\">castSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"k\">this</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span><span class=\"p\">)</span> <span class=\"p\">{</span> <span class=\"c1\">// refers to it</span>\n    <span class=\"k\">this</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span><span class=\"p\">();</span>   <span class=\"c1\">// calls it</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span></pre><p>Getting back to the <code>updateCurrentSpell()</code> function, we don't want to hardcode <code>true</code> or <code>false</code>, we want to use some code that will be <code>true</code> or <code>false</code> depending on which area of the castle the <code>wizard</code> is in, so that we cast a different spell in each room.</p><p>We'll do this by adding helper functions that <code>return</code> a boolean value (<code>true</code> or <code>false</code>) so that we can tell which room the wizard is in.</p><div class=\"action\">\n<p>\nAt the end of <code>sketch.js</code>, add:</p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">inBedroom</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">&lt;</span> <span class=\"nx\">width</span><span class=\"o\">/</span><span class=\"mi\">2</span> <span class=\"o\">&amp;&amp;</span> <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">y</span> <span class=\"o\">&lt;</span> <span class=\"nx\">height</span><span class=\"o\">/</span><span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"k\">return</span> <span class=\"kc\">true</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"k\">return</span> <span class=\"kc\">false</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span></pre>\n</div><p>Now the condition of the <code>if</code> statement is a bit more complex, so let's break it down.</p><p>The first part is checking if the wizard is in the left half of the canvas, by checking if <code>wizard.x</code> is less than (<code>&lt;</code>) half the canvas (<code>width/2</code>). If the first part is <code>true</code>, the <code>&amp;&amp;</code> <strong>AND</strong> operator continues to the condition on the right, to see if the wizard is in the top half of the canvas by checking if <code>wizard.y</code> is less than (<code>&lt;</code>) half the canvas height (<code>height/2</code>).</p><p>When <strong>both</strong> of these conditions are <code>true</code>, the function returns <code>true</code>. If either one is <code>false</code>, it returns <code>false</code>.</p><div class=\"info\">\n<p>\nOnly when <strong>both</strong> sides of an <code>&amp;&amp;</code> condition are true is the whole condition true.</p>\n<pre><span class=\"kd\">var</span> <span class=\"nx\">trueTrue</span> <span class=\"o\">=</span> <span class=\"kc\">true</span> <span class=\"o\">&amp;&amp;</span> <span class=\"kc\">true</span><span class=\"p\">;</span> <span class=\"c1\">// true</span>\n<span class=\"kd\">var</span> <span class=\"nx\">falseTrue</span> <span class=\"o\">=</span> <span class=\"kc\">false</span> <span class=\"o\">&amp;&amp;</span> <span class=\"kc\">true</span><span class=\"p\">;</span> <span class=\"c1\">// false</span>\n<span class=\"kd\">var</span> <span class=\"nx\">trueFalse</span> <span class=\"o\">=</span> <span class=\"kc\">true</span> <span class=\"o\">&amp;&amp;</span> <span class=\"kc\">false</span><span class=\"p\">;</span> <span class=\"c1\">// false</span></pre>\n</div><p>Just one more change is needed before <code>updateCurrentSpell()</code> can start switching correctly between spells.</p><div class=\"action\">\n<p>\nInside of <code>updateCurrentSpell()</code>, change the first <code>if</code> condition to call the new helper function:</p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">updateCurrentSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">inBedroom</span><span class=\"p\">())</span> <span class=\"p\">{</span> <span class=\"c1\">// &lt;---</span>\n    <span class=\"c1\">// ... code skipped for brevity</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span></pre>\n</div><p>Try it out, and check that when <code>wizard</code> is in the bedroom area that it uses <code>changeOutfitSpell()</code> but still uses <code>noSpell()</code> everywhere else.</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/outfit_spell_1.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/outfit_spell_1.png\" alt=\"change outfit spell 1\" title=\"change outfit spell 1\">\n        </a></p><p>Right now only <code>wizard.wandColor</code> is changing.</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/outfit_spell_2.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/outfit_spell_2.png\" alt=\"change outfit spell 2\" title=\"change outfit spell 2\">\n        </a> <a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/outfit_spell_3.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/outfit_spell_3.png\" alt=\"change outfit spell 3\" title=\"change outfit spell 3\">\n        </a></p><div class=\"action\">\n<p>\nGo into <code>spellFunctions.js</code>, in the <code>changeOutfitSpell()</code> function, and use the helper <code>randomColor()</code> to assign new colors to each of the other wizard colors:</p>\n\n<ul>\n<li>wizard.hatColor</li>\n<li>wizard.robeColor</li>\n<li>wizard.skinColor</li>\n<li>wizard.magicalNameColor</li>\n</ul>\n</div><p>Awesome, right?!</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/outfit_spell_4.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/outfit_spell_4.png\" alt=\"change outfit spell 4\" title=\"change outfit spell 4\">\n        </a></p><h2>Check</h2><div class=\"solution\">\n<p></p>\n<pre><span class=\"c1\">// in sketch.js</span>\n<span class=\"kd\">var</span> <span class=\"nx\">wizard</span><span class=\"p\">,</span> <span class=\"nx\">pet</span><span class=\"p\">,</span> <span class=\"nx\">magicScroll</span><span class=\"p\">,</span> <span class=\"nx\">broom</span><span class=\"p\">;</span>\n\n<span class=\"c1\">// ... code skipped for brevity</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">draw</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">background</span><span class=\"p\">(</span><span class=\"s2\">\"lightgray\"</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">updateWizardPosition</span><span class=\"p\">();</span>\n  <span class=\"nx\">updatePetPosition</span><span class=\"p\">();</span>\n  <span class=\"nx\">updateCurrentSpell</span><span class=\"p\">();</span>\n\n  <span class=\"c1\">// ... code skipped for brevity</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// ... code skipped for brevity</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">mousePressed</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">castSpell</span><span class=\"p\">();</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// &lt;--- start</span>\n<span class=\"kd\">function</span> <span class=\"nx\">updateCurrentSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">inBedroom</span><span class=\"p\">())</span> <span class=\"p\">{</span>\n    <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span> <span class=\"o\">=</span> <span class=\"nx\">changeOutfitSpell</span><span class=\"p\">;</span>\n\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span> <span class=\"o\">=</span> <span class=\"nx\">noSpell</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">inBedroom</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">&lt;</span> <span class=\"nx\">width</span><span class=\"o\">/</span><span class=\"mi\">2</span> <span class=\"o\">&amp;&amp;</span> <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">y</span> <span class=\"o\">&lt;</span> <span class=\"nx\">height</span><span class=\"o\">/</span><span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"k\">return</span> <span class=\"kc\">true</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"k\">return</span> <span class=\"kc\">false</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n<span class=\"c1\">// &lt;--- end</span></pre>\n<pre><span class=\"c1\">// in spellFunctions.js</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">changeOutfitSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">say</span><span class=\"p\">(</span><span class=\"s2\">\"Changicus!\"</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">wandColor</span> <span class=\"o\">=</span> <span class=\"nx\">randomColor</span><span class=\"p\">();</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">hatColor</span> <span class=\"o\">=</span> <span class=\"nx\">randomColor</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">robeColor</span> <span class=\"o\">=</span> <span class=\"nx\">randomColor</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">skinColor</span> <span class=\"o\">=</span> <span class=\"nx\">randomColor</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">magicalNameColor</span> <span class=\"o\">=</span> <span class=\"nx\">randomColor</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n<span class=\"p\">}</span></pre>\n</div>"},{"id":"T0E6OlNlY3Rpb24tNjAwNw==","title":"Wizard Whereabouts","htmlContent":"<p>Next up, you'll need to create the 3 remaining spells - <code>readScrollSpell()</code>, <code>levitateBroomSpell()</code>, and <code>transformPetSpell()</code> - and the helper functions - <code>inStudy()</code>, <code>inKitchen()</code>, and <code>inGreatRoom()</code> - that we'll need to assign a different spell in each room.</p><p>Let's make each new spell and the helper for the room to cast it in at the same time.</p><p>In the study your <code>wizard</code> will cast a <code>readScrollSpell</code> to read the hidden message on <code>magicScroll</code>.</p><div class=\"action\">\n<p>\nAt the bottom of the <code>spellFunctions.js</code> file, add:</p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">readScrollSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">say</span><span class=\"p\">(</span><span class=\"s2\">\"Presto inko!\"</span><span class=\"p\">);</span>\n  <span class=\"nx\">magicScroll</span><span class=\"p\">.</span><span class=\"nx\">inkVisibility</span> <span class=\"o\">=</span> <span class=\"mi\">255</span><span class=\"p\">;</span>\n<span class=\"p\">}</span></pre>\n</div><!--  --><div class=\"challenge\">\n<p>\nRead the contents of <code>drawScroll()</code> in <code>drawFunctions.js</code> to try and guess what effect assigning <code>magicScroll.inkVisibility = 255</code> will have.</p>\n\n<p>A short explanation is given further below.</p>\n</div><p>Now we need the <code>inStudy()</code> helper and then to use it inside of <code>updateCurrentSpell()</code>.</p><div class=\"action\">\n<p>\nAt the bottom of <code>sketch.js</code>, create a new <code>inStudy()</code> helper function.</p>\n\n<p>Using <code>inBedroom()</code> as your example, modify the the <code>if</code> conditions to correctly compare the <code>wizard</code> <code>x</code> and <code>y</code> values with the correct location of the study.</p>\n</div><p>In addition to using <code>&lt;</code> (less than), you may also need to use <code>&gt;</code> (greater than). Be sure to combine <strong>two</strong> conditions using <code>&amp;&amp;</code> to ensure the <code>wizard</code> is in the correct corner of the castle.</p><div class=\"action\">\n<p>\n Next, add a new <code>else if</code> condition in the middle of <code>updateCurrentSpell()</code> that uses your newly made <code>inStudy()</code> function.</p>\n<pre><span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">inBedroom</span><span class=\"p\">())</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span> <span class=\"o\">=</span> <span class=\"nx\">changeOutfitSpell</span><span class=\"p\">;</span>\n\n<span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">inStudy</span><span class=\"p\">())</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">say</span><span class=\"p\">(</span><span class=\"s2\">\"Study time!\"</span><span class=\"p\">);</span>\n\n<span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span> <span class=\"o\">=</span> <span class=\"nx\">noSpell</span><span class=\"p\">;</span>\n<span class=\"p\">}</span></pre>\n</div><p>When you cast your new spell in the Study, you should see a magical message appear and then disappear on the scroll.</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/magic_message.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/magic_message.png\" alt=\"magic scroll message\" title=\"magic scroll message\">\n        </a></p><p>The <code>inkVisibility</code> property on <code>magicScroll</code> is used to assign a transparency value when displaying the scroll's message. <code>readScrollSpell</code> sets <code>magicScroll.inkVisibility</code> to the maximum value of <code>255</code> (same as the 0 to 255 range for colors), which makes it fully visible. But over time, the value of <code>inkVisibility</code> decreases back to <code>0</code> using <code>disappearSpeed</code>, making it fully transparent and no longer visible:</p><p>You may have noticed that the <code>readScrollSpell()</code> function uses 3 other properties of <code>magicScroll</code> that you can adjust: <code>message</code>, <code>color</code>, and <code>disappearSpeed</code>.</p><div class=\"action\">\n<p>\nIn <code>setup()</code>, add and customize the extra properties in the existing <code>magicScroll</code> object:</p>\n<pre><span class=\"nx\">magicScroll</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n  <span class=\"nx\">x</span><span class=\"o\">:</span> <span class=\"mi\">380</span><span class=\"p\">,</span>\n  <span class=\"nx\">y</span><span class=\"o\">:</span> <span class=\"mi\">50</span><span class=\"p\">,</span>\n  <span class=\"nx\">message</span><span class=\"o\">:</span> <span class=\"s2\">\"Hello World\"</span><span class=\"p\">,</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"nx\">color</span><span class=\"o\">:</span> <span class=\"nx\">color</span><span class=\"p\">(</span><span class=\"s2\">\"orange\"</span><span class=\"p\">),</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"nx\">disappearSpeed</span><span class=\"o\">:</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"c1\">// &lt;---</span>\n<span class=\"p\">}</span></pre>\n</div><p>In the kitchen, your <code>wizard</code> will call <code>levitateBroomSpell()</code>. Why sweep when you can use magic, right?</p><div class=\"action\">\n<p>\nAt the bottom of file <code>spellFunctions.js</code>, add:</p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">levitateBroomSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">say</span><span class=\"p\">(</span><span class=\"s2\">\"Levi broomi!\"</span><span class=\"p\">);</span>\n  <span class=\"nx\">broom</span><span class=\"p\">.</span><span class=\"nx\">levitate</span> <span class=\"o\">=</span> <span class=\"o\">!</span><span class=\"nx\">broom</span><span class=\"p\">.</span><span class=\"nx\">levitate</span><span class=\"p\">;</span>\n<span class=\"p\">}</span></pre>\n</div><p>This spell uses the <code>!</code> (bang) to toggle the boolean <code>true</code> / <code>false</code> value of <code>broom.levitate</code>.</p><div class=\"info\">\n<p>\nAdding <code>!</code> in front of a boolean value will return the opposite value.</p>\n<pre><span class=\"kd\">var</span> <span class=\"nx\">bangTrue</span> <span class=\"o\">=</span> <span class=\"o\">!</span><span class=\"kc\">true</span><span class=\"p\">;</span> <span class=\"c1\">// false</span>\n<span class=\"kd\">var</span> <span class=\"nx\">bangFalse</span> <span class=\"o\">=</span> <span class=\"o\">!</span><span class=\"kc\">false</span><span class=\"p\">;</span> <span class=\"c1\">// true</span></pre>\n</div><p>So if <code>broom.levitate</code> is currently <code>true</code>, it will be assigned to <code>false</code>, and vice versa.</p><div class=\"action\">\n<p>\nCreate the <code>inKitchen()</code> helper function at the bottom of <code>sketch.js</code></p>\n</div><!--  --><div class=\"action\">\n<p>\nAdd a new <code>else if</code> inside of <code>updateCurrentSpell()</code> and assign <code>wizard.currentSpell</code> to <code>levitateBroomSpell</code> when <code>inKitchen()</code> is <code>true</code></p>\n</div><p>Now your <code>wizard</code> has the power to levitate and move the <code>broom</code> with the mouse.</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/levitate_up.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/levitate_up.png\" alt=\"levitate broom up\" title=\"levitate broom up\">\n        </a> <a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/levitate_down.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/levitate_down.png\" alt=\"levitate broom down\" title=\"levitate broom down\">\n        </a></p><div class=\"challenge\">\n<p>\nCheck out the <code>drawBroom()</code> function in <code>drawFunctions.js</code> to better understand the effects of changing the value of <code>broom.levitate</code>.</p>\n</div><p>Lastly, in the Great Room, your <code>wizard</code> will practice transforming your <code>pet</code> into different creature forms.</p><div class=\"action\">\n<p>\nAt the bottom of <code>spellFunctions.js</code>, add:</p>\n<pre><span class=\"kd\">function</span> <span class=\"nx\">transformPetSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">say</span><span class=\"p\">(</span><span class=\"s2\">\"Switcha petta!\"</span><span class=\"p\">);</span>\n\n  <span class=\"kd\">var</span> <span class=\"nx\">petTypes</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">\"cat\"</span><span class=\"p\">,</span>\n    <span class=\"s2\">\"frog\"</span><span class=\"p\">,</span>\n    <span class=\"s2\">\"ghost\"</span>\n  <span class=\"p\">]</span>\n\n  <span class=\"kd\">var</span> <span class=\"nx\">newType</span> <span class=\"o\">=</span> <span class=\"nx\">random</span><span class=\"p\">(</span><span class=\"nx\">petTypes</span><span class=\"p\">);</span>\n  <span class=\"kd\">var</span> <span class=\"nx\">newColor</span> <span class=\"o\">=</span> <span class=\"nx\">randomColor</span><span class=\"p\">();</span>\n\n  <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">type</span> <span class=\"o\">=</span> <span class=\"nx\">newType</span><span class=\"p\">;</span>\n  <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">color</span> <span class=\"o\">=</span> <span class=\"nx\">newColor</span><span class=\"p\">;</span>\n<span class=\"p\">}</span></pre>\n</div><p>Previously you used <code>random</code> to select a number value from a range, but it can also be used to randomly select an item from a list - an <code>Array</code> object JavaScript.</p><div class=\"info\">\n<p>\n<code>Array</code>s are created by putting values inside of square brackets: <code>var array = [1, 2, 3]</code></p>\n</div><p><code>petTypes</code> is an array of names of the possible <code>pet</code> types.</p><p>One final step to finish adding the ability to cast the fourth spell.</p><div class=\"action\">\n<p>\nCreate the <code>inGreatRoom()</code> helper at the bottom of <code>sketch.js</code></p>\n</div><!--  --><div class=\"action\">\n<p>\nAdd a new <code>else if</code> inside of <code>updateCurrentSpell()</code> to use <code>transformPetSpell</code> when <code>inGreatRoom()</code> is <code>true</code>.</p>\n</div><p>Have fun transforming your pet! (I'm pretty sure it doesn't hurt...)</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/pet_1.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/pet_1.png\" alt=\"transforming pet 1\" title=\"transforming pet 1\">\n        </a> <a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/pet_2.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P04-Cast-Your-Spells/assets/pet_2.png\" alt=\"transforming pet 2\" title=\"transforming pet 2\">\n        </a></p><h2>Check</h2><div class=\"solution\">\n<p></p>\n<pre><span class=\"c1\">// in sketch.js, after mousePressed()</span>\n\n<span class=\"c1\">// &lt;--- start</span>\n<span class=\"kd\">function</span> <span class=\"nx\">updateCurrentSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">inBedroom</span><span class=\"p\">())</span> <span class=\"p\">{</span>\n    <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span> <span class=\"o\">=</span> <span class=\"nx\">changeOutfitSpell</span><span class=\"p\">;</span>\n\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">inStudy</span><span class=\"p\">())</span> <span class=\"p\">{</span>\n    <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span> <span class=\"o\">=</span> <span class=\"nx\">readScrollSpell</span><span class=\"p\">;</span>\n\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">inKitchen</span><span class=\"p\">())</span> <span class=\"p\">{</span>\n    <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span> <span class=\"o\">=</span> <span class=\"nx\">levitateBroomSpell</span><span class=\"p\">;</span>\n\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">inGreatRoom</span><span class=\"p\">())</span> <span class=\"p\">{</span>\n    <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span> <span class=\"o\">=</span> <span class=\"nx\">transformPetSpell</span><span class=\"p\">;</span>\n\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">currentSpell</span> <span class=\"o\">=</span> <span class=\"nx\">noSpell</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">inBedroom</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">&lt;</span> <span class=\"nx\">width</span><span class=\"o\">/</span><span class=\"mi\">2</span> <span class=\"o\">&amp;&amp;</span> <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">y</span> <span class=\"o\">&lt;</span> <span class=\"nx\">height</span><span class=\"o\">/</span><span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"k\">return</span> <span class=\"kc\">true</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"k\">return</span> <span class=\"kc\">false</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n<span class=\"kd\">function</span> <span class=\"nx\">inStudy</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">&gt;</span> <span class=\"nx\">width</span><span class=\"o\">/</span><span class=\"mi\">2</span> <span class=\"o\">&amp;&amp;</span> <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">y</span> <span class=\"o\">&lt;</span> <span class=\"nx\">height</span><span class=\"o\">/</span><span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"k\">return</span> <span class=\"kc\">true</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"k\">return</span> <span class=\"kc\">false</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">inKitchen</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">&lt;</span> <span class=\"nx\">width</span><span class=\"o\">/</span><span class=\"mi\">2</span> <span class=\"o\">&amp;&amp;</span> <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">y</span> <span class=\"o\">&gt;</span> <span class=\"nx\">height</span><span class=\"o\">/</span><span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"k\">return</span> <span class=\"kc\">true</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"k\">return</span> <span class=\"kc\">false</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">inGreatRoom</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">x</span> <span class=\"o\">&gt;</span> <span class=\"nx\">width</span><span class=\"o\">/</span><span class=\"mi\">2</span> <span class=\"o\">&amp;&amp;</span> <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">y</span> <span class=\"o\">&gt;</span> <span class=\"nx\">height</span><span class=\"o\">/</span><span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"p\">{</span>\n    <span class=\"k\">return</span> <span class=\"kc\">true</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span> <span class=\"k\">else</span> <span class=\"p\">{</span>\n    <span class=\"k\">return</span> <span class=\"kc\">false</span><span class=\"p\">;</span>\n  <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n<span class=\"c1\">// &lt;--- end</span></pre>\n<pre><span class=\"c1\">// spellFunctions.js</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">noSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">say</span><span class=\"p\">(</span><span class=\"s2\">\"Hmmm...\"</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">changeOutfitSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">say</span><span class=\"p\">(</span><span class=\"s2\">\"Changicus!\"</span><span class=\"p\">);</span>\n\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">wandColor</span> <span class=\"o\">=</span> <span class=\"nx\">randomColor</span><span class=\"p\">();</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">hatColor</span> <span class=\"o\">=</span> <span class=\"nx\">randomColor</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">robeColor</span> <span class=\"o\">=</span> <span class=\"nx\">randomColor</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">skinColor</span> <span class=\"o\">=</span> <span class=\"nx\">randomColor</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">magicalNameColor</span> <span class=\"o\">=</span> <span class=\"nx\">randomColor</span><span class=\"p\">();</span> <span class=\"c1\">// &lt;---</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// &lt;--- start</span>\n<span class=\"kd\">function</span> <span class=\"nx\">readScrollSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">say</span><span class=\"p\">(</span><span class=\"s2\">\"Presto inko!\"</span><span class=\"p\">);</span>\n  <span class=\"nx\">magicScroll</span><span class=\"p\">.</span><span class=\"nx\">inkVisibility</span> <span class=\"o\">=</span> <span class=\"mi\">255</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">levitateBroomSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">say</span><span class=\"p\">(</span><span class=\"s2\">\"Levi broomi!\"</span><span class=\"p\">);</span>\n  <span class=\"nx\">broom</span><span class=\"p\">.</span><span class=\"nx\">levitate</span> <span class=\"o\">=</span> <span class=\"o\">!</span><span class=\"nx\">broom</span><span class=\"p\">.</span><span class=\"nx\">levitate</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n\n<span class=\"kd\">function</span> <span class=\"nx\">transformPetSpell</span><span class=\"p\">()</span> <span class=\"p\">{</span>\n  <span class=\"nx\">wizard</span><span class=\"p\">.</span><span class=\"nx\">say</span><span class=\"p\">(</span><span class=\"s2\">\"Switcha petta!\"</span><span class=\"p\">);</span>\n\n  <span class=\"kd\">var</span> <span class=\"nx\">petTypes</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">\"cat\"</span><span class=\"p\">,</span>\n    <span class=\"s2\">\"frog\"</span><span class=\"p\">,</span>\n    <span class=\"s2\">\"ghost\"</span><span class=\"p\">,</span>\n  <span class=\"p\">]</span>\n\n  <span class=\"kd\">var</span> <span class=\"nx\">newType</span> <span class=\"o\">=</span> <span class=\"nx\">random</span><span class=\"p\">(</span><span class=\"nx\">petTypes</span><span class=\"p\">);</span>\n  <span class=\"kd\">var</span> <span class=\"nx\">newColor</span> <span class=\"o\">=</span> <span class=\"nx\">randomColor</span><span class=\"p\">();</span>\n\n  <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">type</span> <span class=\"o\">=</span> <span class=\"nx\">newType</span><span class=\"p\">;</span>\n  <span class=\"nx\">pet</span><span class=\"p\">.</span><span class=\"nx\">color</span> <span class=\"o\">=</span> <span class=\"nx\">newColor</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n<span class=\"c1\">// &lt;--- end</span></pre>\n</div>"}]},"next":{"id":"T0E6OlBhZ2UtMTQ4OQ==","slug":"expand-powers","title":"Expand Your Powers"},"previous":{"id":"T0E6OlBhZ2UtMTQ4OQ==","slug":"expand-powers","title":"Expand Your Powers"}},{"id":"T0E6OlBhZ2UtMTQ4OQ==","title":"Expand Your Powers","slug":"expand-powers","sections":{"nodes":[{"id":"T0E6OlNlY3Rpb24tNjAwOA==","title":"Expand Your Powers","htmlContent":"<p><a href=\"https://code.org/api/hour/finish_makeschool_wizard.png\" target=\"_blank\">\n          <img src=\"https://code.org/api/hour/finish_makeschool_wizard.png\" alt=\"hour of code tracking pixel\" title=\"Hour of Code Tracking Pixel\">\n        </a></p><p>Congratulations, you've done it! You've completed the first steps on your Code Wizard journey.</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P05-Expand-Your-Powers/assets/final_castle.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P05-Expand-Your-Powers/assets/final_castle.png\" alt=\"completed castle\" title=\"completed castle\">\n        </a></p><h2>Review</h2><p>In this tutorial, you've worked with many of the fundamental building blocks of programming:</p><ul>\n<li>variables</li>\n<li>objects</li>\n<li>functions</li>\n<li>conditional logic</li>\n<li>if statements</li>\n<li>loops</li>\n</ul><p>Want to view the full project solution?</p><div class=\"solution\">\n<p>\nView at <a href=\"https://repl.it/@MakeSchoolRAMP/CodeWizardCastleSolution\" target=\"_blank\">Code Wizard Castle Solution</a></p>\n</div><p>You are well on your way to becoming a Master Code Wizard.</p><p>Best of luck in your future code adventures!</p><h2>Other p5.js Resources</h2><p>These will help as you tackle the extra challenges below or head off into new programming territory to further grow your code magic skills.</p><ul>\n<li><a href=\"https://p5js.org/reference/\" target=\"_blank\">p5.js Library Reference</a></li>\n<li><a href=\"https://www.youtube.com/playlist?list=PLRqwX-V7Uu6Zy51Q-x9tMWIv9cueOFTFA\" target=\"_blank\">Video tutorial playlist by The Coding Train</a></li>\n</ul><h2>Bonus Challenges</h2><p>You've completed the tutorial, but can you complete all of the bonus challenges below?</p>"},{"id":"T0E6OlNlY3Rpb24tNjAwOQ==","title":"Challenge 1 (Easy)","htmlContent":"<p>Make the <code>pet</code> change directions <strong>before</strong> it runs in the edge of the canvas so it doesn't look like it's walking into the walls.</p>"},{"id":"T0E6OlNlY3Rpb24tNjAxMA==","title":"Challenge 2 (Easy)","htmlContent":"<p>Further customize the appearance of your castle by modifying more functions in <code>drawFunctions.js</code></p>"},{"id":"T0E6OlNlY3Rpb24tNjAxMQ==","title":"Challenge 3 (Hard)","htmlContent":"<p>Add a new <code>pet</code> type by adding it to the array in <code>transformPetSpell()</code>, creating a new <code>drawName()</code> function for it, and modifying the <code>if</code> statement in <code>drawPet()</code> to call your new function</p>"},{"id":"T0E6OlNlY3Rpb24tNjAxMg==","title":"Challenge 4 (Hard)","htmlContent":"<p>You may have noticed that if you levitate the broom and then leave the kitchen area that the broom stays levitated while you cast other spells.</p><p>Modify <code>updateCurrentSpell()</code> so that whenever <code>broom.levitate</code> is <code>true</code> the <code>.currentSpell</code> stays assigned to <code>levitateBroomSpell()</code>. That way you can drop the <code>broom</code> even if you move between rooms.</p>"},{"id":"T0E6OlNlY3Rpb24tNjAxMw==","title":"Challenge 5 (Hardest)","htmlContent":"<p>Come up with your own totally unique customization of the Code Wizard Castle and share it with us!</p><p>Send us a link to your custom code and a short description of your changes: <a href=\"make.sc/hoc_custom\" target=\"_blank\">Email Us</a></p><p>We can't wait to see what you'll create!</p>"}]},"next":null,"previous":null}]}},"page":{"id":"T0E6OlBhZ2UtMTQ4OQ==","title":"Expand Your Powers","slug":"expand-powers","sections":{"nodes":[{"id":"T0E6OlNlY3Rpb24tNjAwOA==","title":"Expand Your Powers","htmlContent":"<p><a href=\"https://code.org/api/hour/finish_makeschool_wizard.png\" target=\"_blank\">\n          <img src=\"https://code.org/api/hour/finish_makeschool_wizard.png\" alt=\"hour of code tracking pixel\" title=\"Hour of Code Tracking Pixel\">\n        </a></p><p>Congratulations, you've done it! You've completed the first steps on your Code Wizard journey.</p><p><a href=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P05-Expand-Your-Powers/assets/final_castle.png\" target=\"_blank\">\n          <img src=\"https://cdn.jsdelivr.net/gh/MakeSchool-Tutorials/Code-Wizard-Castle-Tutorial@master/P05-Expand-Your-Powers/assets/final_castle.png\" alt=\"completed castle\" title=\"completed castle\">\n        </a></p><h2>Review</h2><p>In this tutorial, you've worked with many of the fundamental building blocks of programming:</p><ul>\n<li>variables</li>\n<li>objects</li>\n<li>functions</li>\n<li>conditional logic</li>\n<li>if statements</li>\n<li>loops</li>\n</ul><p>Want to view the full project solution?</p><div class=\"solution\">\n<p>\nView at <a href=\"https://repl.it/@MakeSchoolRAMP/CodeWizardCastleSolution\" target=\"_blank\">Code Wizard Castle Solution</a></p>\n</div><p>You are well on your way to becoming a Master Code Wizard.</p><p>Best of luck in your future code adventures!</p><h2>Other p5.js Resources</h2><p>These will help as you tackle the extra challenges below or head off into new programming territory to further grow your code magic skills.</p><ul>\n<li><a href=\"https://p5js.org/reference/\" target=\"_blank\">p5.js Library Reference</a></li>\n<li><a href=\"https://www.youtube.com/playlist?list=PLRqwX-V7Uu6Zy51Q-x9tMWIv9cueOFTFA\" target=\"_blank\">Video tutorial playlist by The Coding Train</a></li>\n</ul><h2>Bonus Challenges</h2><p>You've completed the tutorial, but can you complete all of the bonus challenges below?</p>"},{"id":"T0E6OlNlY3Rpb24tNjAwOQ==","title":"Challenge 1 (Easy)","htmlContent":"<p>Make the <code>pet</code> change directions <strong>before</strong> it runs in the edge of the canvas so it doesn't look like it's walking into the walls.</p>"},{"id":"T0E6OlNlY3Rpb24tNjAxMA==","title":"Challenge 2 (Easy)","htmlContent":"<p>Further customize the appearance of your castle by modifying more functions in <code>drawFunctions.js</code></p>"},{"id":"T0E6OlNlY3Rpb24tNjAxMQ==","title":"Challenge 3 (Hard)","htmlContent":"<p>Add a new <code>pet</code> type by adding it to the array in <code>transformPetSpell()</code>, creating a new <code>drawName()</code> function for it, and modifying the <code>if</code> statement in <code>drawPet()</code> to call your new function</p>"},{"id":"T0E6OlNlY3Rpb24tNjAxMg==","title":"Challenge 4 (Hard)","htmlContent":"<p>You may have noticed that if you levitate the broom and then leave the kitchen area that the broom stays levitated while you cast other spells.</p><p>Modify <code>updateCurrentSpell()</code> so that whenever <code>broom.levitate</code> is <code>true</code> the <code>.currentSpell</code> stays assigned to <code>levitateBroomSpell()</code>. That way you can drop the <code>broom</code> even if you move between rooms.</p>"},{"id":"T0E6OlNlY3Rpb24tNjAxMw==","title":"Challenge 5 (Hardest)","htmlContent":"<p>Come up with your own totally unique customization of the Code Wizard Castle and share it with us!</p><p>Send us a link to your custom code and a short description of your changes: <a href=\"make.sc/hoc_custom\" target=\"_blank\">Email Us</a></p><p>We can't wait to see what you'll create!</p>"}]},"next":null,"previous":null}}},"staticQueryHashes":[]}