Speak: Jag är [OHÖRBAR]. Och jag är en senior på Leverett House. Jag studerar datavetenskap, och jag är en TF för CS50. Som en nybörjare, jag visste inte ens har en bärbar dator eller en smartphone. Jag hade ingen erfarenhet av programmering. CS50 var den mest minnesvärda kurs som Jag tog på Harvard eftersom det var en kamp, ​​men det var en riktigt kul kamp samtidigt. Och jag gjorde en hel del fantastiska, permanent vänner och jag lärde mig en hel del riktigt tillämpliga färdigheter. Jag är bara så glad att jag inte lät min brist på bakgrunden vara en ursäkt för mig inte ta CS50. Jag är [OHÖRBAR]. Jag är en senior på Leverett Hus, klassificera av 2014. Och jag tog CS50. DAVID MALAN: Så detta är CS50. Detta är slutet på veckan noll. Och minns när vi började förra gången, var med dessa lampor, som var så populär att vi gick och köpte lite mer idag. Så jag tror att detta kommer att bli vår sak i år - bordslampor om du kommer upp på scenen, åtminstone tills vi kör ut. Men vi använde dessa minns, att införa grunderna för representation av data. Vi behövde sätt att börja representerar informationen insidan av en dator. Och det enklaste sättet att göra det var med en ingrediens, el. Och den enklaste sak du kan göra med el slå på och av den. Låt elektronerna flödar eller inte. Och med hjälp av dessa två grundläggande tillstånd, av och på, eller falskt och sant, eller noll och en, började vi att se att vi skulle kunna bygga upp, i detta fall, med ljus lökar, fler nummer än bara noll och ett. Vi räknas som högt som sju, till exempel, förra gången. Men allt vi behöver göra är att fortsätta slänga fler och fler glödlampor på att problem och, egentligen, kan vi representera valfritt antal som vi kanske eventuellt vill. Tja, övergick vi snabbt därefter på Onsdag till detta byte av volontärer. 8 bitar är vad vi i allmänhet kallar en byte, så här hade vi åtta volontärer på onsdag som tillsammans var representerande åtta bitar. Och när deras händer gick upp, de var en man. Och när deras händer var ner, fanns det en nolla. Och vi hade dessa folks komma upp på scenen varför? Vad vi kan göra med denna sekvens av bitar? För att skapa ett alfabet. Vi kunde bygga på toppen av det tidigare lärdom och faktiskt börjar göra mer intressant information som är åtminstone mer bekant för oss människor. Och detta kommer att bli en återkommande tema i hela 50, men även dator vetenskapen mer generellt, denna idé om skiktning, där, i slutet av dag, om du började verkligen grunderna med en dator, ja, det är ettor och nollor. Och under att det är bara elektricitet. Men vi mycket snabbt börja ta dem låg nivå detaljer för beviljat och börja lager ovanpå tidigare arbetat göras så att vi i slutändan genom I slutet av terminen och, egentligen, mer allmänt som datavetare och programmerare, kan göra några riktigt kraftfulla saker genom att utnyttja arbete som vi själva har gjort och även står på axlarna av andra. Nu har vi övergått snabbt på onsdag från bara behöva representera information att vilja att göra något med det. Så vad gjorde vi definierar en algoritm som? En serie instruktioner. Så det är en serie instruktioner, en antal steg som du, en människa, eller en dator, mer typiskt, skulle exekvera den ena efter den andra för att att uppnå något mål. Och vi hade några mål förra gången, varav en var att räkna personer i rummet. Och annat sådant exempel var att hitta Mike Smith i en telefonbok. Så du kanske minns att jag slet en telefon bok i hälften mot detta hamnar hitta Mike Smith. Syftet med det visuella var att visar, återigen, att vi var bokstavligen riva detta problem i halv, på mitten, på mitten, och mycket snabbt gå från liknande 1.000 sidor att bara en enda sida. De av er som missade detta på Onsdag, trodde jag att vi skulle spela upp några bilder av vad du missade. Låt oss ta en titt. [VIDEO SPELA] -Där går vi. 1500 sidor, Nice clean linje, legitima tår. [END VIDEOAVSPELNING] DAVID MALAN: Så det var onsdag. Vi övergång, men på onsdag nu att vilja representera algoritmer på något något standardiserat sätt, inte bara beskriver dem verbalt, men försöker uttrycka dem i skrift eller på en datorskärm så att vi kunde börja förbättra och modifiera dem, och, så småningom, faktiskt analysera hur korrekt eller hur snabbt de var. Så vi introducerade detta begrepp av pseudokod, som i lekmannaspråk, är vad? OK, ord. Låt oss gå lite djupare än så. Engelska, säker, är utan mot vilket syfte? Ord som att skapa eller att representera algoritmer. Så det finns ingen ett språk känt som pseudokod i världen. Det är precis som du, på engelska, eller Oavsett din talspråk är, använd en sorts ytlig notation att förmedla en idé mycket kortfattat. Men vi får se det, förvisso med en Engelska pseudokod, och det visar sig de flesta programmeringsspråk själva är derivat av engelska själv, vi kommer att upptäcka att det finns en viss standard sätt att representera pseudokod och också programmeringskod. Så när du börjar att se även den enklaste exempel idag, inser dessa Samma mönster återkommer nästa vecka. Så pseudokod var något slags av språket liknar ett programmeringsspråk. Och det första exemplet vi såg visuellt nedskrivna var här. Det var bara en tre steg program, mål var att räkna antalet av människor i ett studentrum för som video på onsdag. Men det fanns några intressanta aspekter av detta enklaste programmet. Och detta kommer att vara återkommande teman. Så för dem som är obekanta med detta, en, introducerade vi en variabel. Och förmodligen alla i det här rummet är bekant med en variabel i ramen för algebra. Men här i programmering, variabler är, en, kan vara heter vad vi vill. Vi har använt n som en räknare. Men vi skulle kunna använda ordet disken, eller, som du ser, de flesta någon fras som du kanske gillar så länge det är beskrivande, men det är egentligen bara en förvaringsbehållare. Det är en bit av minnet, ett visst antal bitar, och det varierar från dator, hur många bitar som finns att komponera den variabeln. Men vi kan sätta värden i det. Hittills har vi satt bara siffror. Men vi kan sätta faktiska ord. Vi kan sätta punkt. Vi kan sätta bilder - någonting, egentligen, kan vi representera med nollor och ettor, kan vi sätta in denna högre nivå begrepp av en variabel. Så ganska rakt fram där. Och det är linje ett. Men vi mycket snabbt gått från line en att faktiskt göra något med den variabeln. Och i linje tre, uppdaterade vi N. Vi ökas N. Och vi kunde skriva detta ett antal olika sätt. Men kanske det mest uppenbara är bara säga, ställa N till oavsett N är plus 1. Så det var vår ökning. Samtidigt fanns det en slinga. Och här också, är förmodligen ganska intuitiv. En slinga är bara något i ett program det händer igen och igen, några typ av cykel. Och denna nyckelfras här, för varje, är faktiskt mycket vanligt under större delen programmeringsspråk, inklusive som vi ser i kursen. När som helst du ser det ord för det vanligtvis förmedlar tanken att en slinga, något cyklisk, är på väg att hända. Men det är värt att notera en annan syntaktisk detalj. Det faktum att tredje raden finns faktiskt indragen med ha drabbat space bar några gånger är avsiktlig. Eftersom mänsklig konvention är sådan att, när du gör något nytt och igen, i en slinga, som börjat på rad två, du strecksats något som tillhörde till att slingan bara för att klargöra att det är linje tre och inte, till exempel, linje fyra eller fem, om det fanns linjer för eller fem, som är del av som loopar. Så här enkla indrag förmedlar den grundläggande idén. Så vi tillämpat denna algoritm, nu, till några exempel. Och även detta enkla exempel i den verkliga världen. Men det kommer att vara representativ för hur skulle du gå om att testa din äger allt mer komplexa program. Du försöker några scenarier, vissa representanter ingångar, och se om du få önskade resultat. Så här exemplet hade två personer sitter i studentrummet. Till vänster är samma pseudo-kod. Och detta är en skärmdump av den mycket sista steget i tillämpningen av denna algoritm på dessa resurser, där var två personer i rummet och, minns, när vi kliver genom ledningarna man, och två, och tre, och två och tre och gjort - i slutet av denna algoritm, hade vi faktiskt räknade de två män som är i rummet. Så då försökte vi ett annat exempel. Och vi sa att tänk om det finns noll personer i rummet? Är denna kod fortfarande korrekt? Och faktiskt var det. Det råkar vara så att linje två och sålunda, rad tre eller inte går att verkställa. De kommer inte att hända alls eftersom de är bara inte om Det finns noll personer i rummet. Men inte en big deal. Rad ett initierade N till noll, så även om endast en rad av detta Programmet slutar faktiskt upp att vara användbar, den ger fortfarande rätt svar, som framgår av den orange noll vid botten. Men sedan bestämde vi att var typ av en dum algoritm. Det var ganska långsam. Visst, kan jag göra två, fyra, sex, åtta, tio, när räkna människor i ett rum. Så vi tweaked algoritmen, den pseudokod, att säga, nu i linje två, för varje par av människor i rummet, vidare till, i linje tre, ökning in av två på varje iteration. Så det skulle ha fungerat här detta par personer i rummet. Men sedan, om man börjar tänka på detta, och det tar inte lång tid att inse, vänta en minut det är kommer att bryta, bryter det på vad enkelt fall? Om det finns tre personer i rummet eller, mer generellt, när det finns ett udda antal personer i rum, inklusive en. Vi skulle missa den personen här eftersom det finns inga sådana par. Så vi riktar snabbt genom att istället införa vilka ytterligare programmering konstruktioner till pseudokod. Så ett tillstånd, som kallas vi det, eller en filial. Och det är tänkt att förmedla, visuellt, det tanken på gren, ett vägskäl där du kan antingen göra detta eller, kanske, något annat. Och faktiskt, bemöter vi det här problemet genom att lägga linje 4, genom att säga, egentligen, på slutet, om en person kvar, sedan gå vidare och räkna dem speciella. Så du sortera av specialfall dem, så att tala, så att vi nu kan hantera både ett jämnt antal människor och ett udda antal människor. Nu finns det ett antal olika sätt vi kunde ha uttryckt detta. Och ärligt talat, jag kunde ha varit ännu mer nit kräsen när det kom till mitt val av Engelska för pseudokoden. Men åtminstone den anda av idén förmedlas. Om du lämnade denna kod till en vän som inte är i CS, eller har aldrig tagit CS, oddsen är att de kan räkna ut, gett tre personer i rummet, hur man räkna dem baserade folk på dessa instruktioner. Och det är allt vi verkligen vill uppnå med pseudokod, på något sätt standardisera hur vi ska om företräder idéer så att vi kan börja göra mer komplicerade sak stilla. Så det leder oss då, idag, till faktiska koden. Vi börjar programmera i dag, om än i en trevlig miljö. Och då vi övergången mycket snabbt till en mer svårbegripliga syntax, men en som du ser är i grunden densamma som idéerna kommer se manifesteras med detta andra språk idag. Det kommer bara att titta lite annorlunda. Så snarare än att bara ringa detta nummer, jag kommer att vara lite mer exakt och säger, hädanefter, när du skriver ett program, du skriver källkod. Det är ungefär som pseudokod. Men vi får se det är inte typ av löst när det gäller att välja orden som du använder. När programmering i ett språk, måste du att använda ord, fraser, syntax, att andra människor har beslutat utgör att visst språk. Så pseudocodes är upp till dig. En verklig programmeringsspråk som C, som vi så småningom se, är standardiserat av andra människor. Så hur går vi om att skriva några källkoden? Jo jag ska gå vidare och göra det. Jag kommer att gå vidare och öppna upp ett fönster här. Mer om detta nästa vecka. Men detta är en enhet som kallas den CS50 apparaten. Jag kör en mjukvara på min Mac, men du kan göra samma sak På en Windows-dator, är det som ger mig illusionen kör en annan operativsystem helt rätt här i ett fönster på min Mac. Jag har bara fullt skärmad det så att du inte faktiskt se Mac OS just nu. Detta är ett operativsystem heter Linux. Det är väldigt populärt. Det är väldigt snabbt. Det är väldigt fritt, vilket har gjort det mycket övertygande, särskilt i kommersiella världen. Och mer om det mot slutet av termin då vi använder Linux ganska lite för webbprogrammering och hosting av faktiska webbplatser och projekt. Så nu, vet bara att det är en stationär som är tänkt att se ut vagt bekant för Windows och Mac OS. Det finns bara några olika namn och ikoner för saker. Men detta är den så kallade CS50 apparat, en virtuell maskin som, börjar nästa vecka, kommer ni kör inne i ett fönster på din egen Mac eller PC. För idag, kommer jag att öppna upp den enklaste av programmen. Det kallas gedit. Och detta är bara en grafisk editor. Det är ungefär som Microsoft Word, men enklare. Det är ungefär som text redigera eller anteckningsblock. Det är bara ett mycket enkelt program med som att skriva ord på skärmen. Det bara så vad händer att om jag sparar filer som jag skapar när det här programmet i en särskild anknytning som. c, i stället av. doc eller. xls, eller vad du är bekant med, kan jag faktiskt skapa program som använder även denna enkla textredigerare. Så låt mig göra det. Låt mig gå vidare och spara fil första som hej.c. Och återigen, denna användargränssnitt kommer bekanta till dig snabbt. Men för nu, jag skriver bara i ett filnamn. Jag ska spara den till min John Harvard hemkatalog. Och nu har jag den här fliken som indikerar Jag är verkligen redigering en fil som heter hej.c. Så inget alltför intressant ännu. Och nu kommer det att bli ganska kryptiskt. Jag kommer att zooma in, precis så det är mer synliga. Och jag ska börja skriva inkludera stdio.h, int main, tomrum, öppen lockigt stag, en, två, tre, fyra platser av indrag, print f, för utskrift något formaterad, citationstecken unquote, "Hello, world" backslash, n, stäng citationstecken, sluten parentes, semikolon, Ange backsteg, backspace, backspace, backsteg, stängde klammerparentes - Jag har programmerat. Okej så detta är en super enkel program, verkligen, det program som någon börjar programmering med. Och allt den gör, för all dess komplexitet, är att skriva ut på skärm, gissa vad? Hej världen. Men det är inte tillräckligt precis att skriva ett program. Så det här är koden. Detta är källkod i ett språk som kallas c. Det sparas närvarande i en fil som heter hej.c. Titta nu på botten av skärmen här. Mer om detta, återigen, i de kommande veckorna. Men detta är vad vi kallar ett terminalfönster. Det är en blinkande, svart och vit prompt. Det är typ av en gammal skola gränssnitt till en dator som i allmänhet inte använda musen eller annan grafiska element. Den använder bara tangentbordet. Och jag kan skriva kommandon vid detta blinkande prompt. Och för dagens ändamål, jag är bara kommer att skriva följande - gör hej. Och det programmet gör är bara en program som, i den verkliga världen dessa dagar, skulle vi dubbelklicka på. Men i det här gränssnittet för idag, vi kommer att skriva sitt namn på denna prompt. gör hej är bokstavligen kommer att göra mig ett program som heter hej. Och det kommer att göra det genom att titta för en fil, bara genom standard, kallad hej.c. Det kommer att ta Jag vill ha ett C-program som på grund av hur den här datorn är konfigurerad. Så jag gå vidare och tryck enter. Jag ser några kryptiska utgång, men detta kommer att bli alltför bekant snart. Detta råkade köra en kompilator, mer om det i ett ögonblick, som kallas klang. Men nu, jag har bara en annan blinkande prompten. Och jag kan gå vidare nu och skriv prick slash, för ointressanta skäl som vi kommer komma tillbaka till nästa vecka - hej. Så allt detta arbete hittills bara skriva den enklaste av program som, så fort jag slog in, gör det. Så jag har skrivit min första programmet. Så jag medvetet narr på denna mycket enkla program för ett par anledningar. Ett, är det svårt att bli upphetsad om att ta en klass om detta är slutet spelet. Men mer än så, det finns en många distraktioner här uppe. Första gången du lär dig till programmet, för er mindre bekväm, och även jag, tillbaka i dag, när jag först såg något så här - du kan typ av figur som, okej, detta är en utskrift hej världen. Men det finns så mycket distraktion. Det finns så mycket syntax på skärmen att det blir i vägen för mycket enkla, annars enkla, idéer. Så vad vi ska göra i dag är att vi är kommer att lägga undan C och komma tillbaka till det på måndag. Och vi kommer att använda ett grafiskt programmeringsspråk som kallas Scratch. Detta är ett programmeringsspråk, som jag hänvisade till på onsdag, är det som kommer att tillåta oss att göra samma typ av saker men blundar, för idag, till klammerparenteser, parenteserna, de semikolon, och alla dessa dumma distraktioner som kommer i vägen, i denna första dag, i vissa grundläggande, nätt intressanta idéer. Så mot det slut, kommer jag att gå tillbaka till mitt skrivbord hit och introducera dig till alternativ till det Programmet, som kommer att se en little något ljus här. Det är hur vi ska genomföra det Samma program idag - två pussel bitar som, när de griper in i varandra och klickade på, kommer att säga till världen, hallå världen. Så låt oss faktiskt gå dit. Så jag kommer att gå vidare och öppna en webbplats kallas scratch.mit.edu. Och detta leder mig till denna hemsida här. I förväg, jag har loggat in här hemsida och de första problemen som kommer att gå igenom några av dessa steg. Jag ska gå vidare och klicka på min scratch mapp här. Och detta kommer att visa mig vissa projekt som jag ve faktiskt skapas i förväg. Och det visar sig att denna grafiska programmeringsspråk inte bara går att låta oss program genom att dra och släppa dessa pusselbitarna, du inte ens behöver särskild programvara. Allt är inbäddat i en webbläsare så att du kan göra detta, i teorin, på dina datorer just nu, som en del av er kan mycket väl vara, utan att ens behöva programvara som CS50 apparaten, som kommer nästa vecka. Så jag kommer att gå upp till det övre hörnet här och klicka på Skapa. Och i ett ögonblick jag kommer att få en tom skärm via vilken jag kan börja programmering i denna grafiska programmering miljö. Men den här gången, det kommer att bli mycket, mycket enklare att faktiskt göra det. Så på bara ett ögonblick, då Wi-Fi samarbetar vi nu har den här skärmen. Så en snabb verbala turné, men jag vågar säga, säkert när du dyka in i första problemet set, får du hitta allt detta mycket lättillgänglig och ganska intuitiv. Men låt oss måla en mental bild för bara ett ögonblick. Så under denna prompt säger save förändringar, är du på väg att se scratch. Detta är en sprite. Det är ett tecken. Och han lever på vad vi kallar ett steg, denna stora vita rektangeln på som han kan flytta upp, ner, vänster, rätt, och gör, egentligen, andra typer av åtgärder. Under tiden, i mitten av denna användare gränssnitt, har vi en hel massa pusselbitar. Och du kommer att se att de säger saker som flytta 10 steg, vände 15 grader, punkt i en viss riktning. Men det finns kategorier av blockerar upp här också. Så om jag går till utseende, ser du att det finns andra pusselbitar som tydligen kommer att berätta detta cit till säga hej, att tänka, att visa själv, gömma sig. Om jag går ner till Sounds, visar det sig finns det sätt att spela låter som jamar, att stoppa alla ljud, för att spela en trumma. Så lång historia kort, det finns en hel massa pusselbitar som gör att du att berätta denna katt, eller valfritt antal andra tecken, hur man gör. Men för att göra allt detta hända dig behöver för att börja programmera. Och denna stora vita rutan, eller grå rutan, på höger sida, det är där Jag ska faktiskt dra och släppa de pusselbitar. Det är min blank text Fönstret motsvarande. Så jag kommer att gå vidare och klicka Kontroll i mitten. Eller snarare, låt mig börja upp enligt Events. Under Evenemang bänk, kommer du att märka en några saker som är medvetet krökt på toppen på ett sådant sätt att de förmodligen inte kompletterar varandra, inte på toppen av pusselbitar. Och det är eftersom de Demark starten av ett program, i början av en manus, så att säga. Så om jag går vidare och dra, när grönt flagga klickade hit, och då jag vill att denna katt att säga något i början. Så jag kommer att gå under det ser panelen. Och jag kommer att gå vidare och ta tag i säga hej blocket, och dra och släpp, och släppa så att den automatiskt låser det. Och sedan märker jag kan Klicka på texten. Och jag kan åsidosätta det att bli mer specifik gillar, säger, hej världen. Och nu har vi program som jag hävdar är ekvivalent med att mycket mer svårbegripliga program jag genomfört i C för en stund sedan. Om jag går över nu till den vänstra sidan, märker att det finns en stor stoppskylt och en stor grön flagga. Låt mig zooma in för tydlighetens skull. Och när jag nu klicka här gröna flaggan, du kan nog gissa vad det här första Programmet kommer nu att göra. Så även där vi programmering, men vi faktiskt inte att köra fast i vissa av dessa syntaktiska, små detaljer. Men låt oss prova något lite mer intressant. Låt mig gå in i min Scratch mapp här. Och faktiskt, låt mig så låt mig öppna upp ett separat program här för bara en ögonblick, Maximera fönstret, Arkiv Öppna, och jag kommer att gå in i dagens källkatalog. Som alltid hittar du, dag och framåt, att alla dagens exempel är tillgängliga inne i kursens hemsida. Och jag ska gå vidare här och plocka upp lite något annorlunda. Detta här, för vilka Jag behöver en frivillig. Vem skulle vilja ha en skrivbordslampa idag? OK, vad sägs om någon lite - är du på slutet? Kom ner. Nu, vill du delta, eller bara säga börja med skrivbordslampa? VANESSA: [OHÖRBAR]. DAVID MALAN: OK. Utmärkt, vad du heter? Vanessa? David. Trevligt att träffas. Så kom den upp och Vanessas gå att ta kontroll över min tangentbord för bara ett ögonblick. Och vad jag har gjort här, bara för tiden är skull, som jag har insett Wi-Fi var lite långsam, Scratch, den programmering miljö som vi är användning, kan också laddas ned och kör på den lokala datorn. Så vad jag gjorde innan föreläsningen, i fall det händer, är jag hämtat alla filer som vi är på väg att spela med så att de kan köra lite mer snabbt här på min laptop. Så det är därför nu ser jag ett Mac-specifika gränssnittet. Så jag kommer att gå vidare och öppna upp denna en. Jag ska gå vidare nu och helskärm fönstret. Och som du ser, kan vi mycket snabbt, eftersom detta elev gjorde, en av era föregångare, går från hallå världen till ett mycket mer övertygande ansökan. Så här är instruktionerna. Åh, och vi har en annan sak. Jag trodde det skulle vara kul, eftersom, Normalt kommer vi att filma kameror på detta sätt. Jag trodde det skulle vara kul om, Vanessa, vi kunde se världen genom dina ögon. Så här har vi några Google Glass. [Förvånad flämtar] DAVID MALAN: Vi kommer endast att ge bort skrivbordslampor idag. [SKRATT] Så låt mig cue upp detta. Okej, så tryck här. OK, glas, spela in en video. Okej, Vanessa? Nu, som en parentes som har fått något att göra med Scratch, om du ser något uppåt och till höger ser du bokstavlig glas, och du bör ser lite rektangulärt fönster. Du bör se alla dina klasskamrater filmas just nu? Ja. VANESSA: Ja. DAVID MALAN: OK. Så det är bra. Vi släpper denna filmen senare. För nu, vänd din uppmärksamhet till skärmen här. Och vad din föregångare har gjort är sätta några instruktioner på skärmen bara genom att använda ett ritprogram. Så du kommer att, i ett ögonblick, tryck på mellanslagstangenten för att starta. Och sedan några pusselbitar går att börja röra sig uppåt på skärmen. Och du vill träffa piltangenterna, precis som i verkliga DDR, i enlighet med saker kö med dessa pilar. VANESSA: OK. DAVID MALAN: Du har spela här innan. VANESSA: Yeah. DAVID MALAN: Okej, Vanessa, gå vidare och ta bort det. [MUSIK - Kayne WEST, "starkare"] [Applåder] DAVID MALAN: Så låt oss nu ta ett steg från det. Så klart, det är den avgörande matchen. Slutet Spelet är inte hej världen. Men du behöver inte nödvändigtvis göra saker som är så interaktivt. Du kan också göra animationer. Så till exempel, en annan av dina efterträdare gjorde detta program här, som berättar en historia mer än det gör genomfört en lek. Så låt mig gå vidare och öppna upp här en program i vår samma källa katalog från och med idag. Detta ett samtal, och låt oss börja med, en cookie kärlekshistoria. Och att inte göra detta alltför akademisk, men, som du tittar på den här, tror att själv vilken av dessa enkla programmering begrepp vi har pratat om hittills - variabler och loopar och villkor, har din företrädare använder nog bara att genomföra några av visualiseringar. Du ser här. Så jag ger dig en story kaka kärlek. [MUSIK - GREEN DAY, "SEMESTER"] [CRASH] [MUSIK - sköldpaddorna, "Happy Together"] DAVID MALAN: Okej, så där, Vi hade en story kaka kärlek. Men även där - [Applåder] DAVID MALAN: Okej, även där, tänka på, eftersom dessa hjärtan gick från botten till toppen av skärmen, Det var faktiskt lite av slumpmässighet pågår. Och faktiskt, vi får se att även i enklaste av miljöer, t ex Scratch, som i C, kan du skapa slumptal, eller illusionen av slumptal, så att spelet är en lite mer intressant än det kanske vara om du hade absolut hårdkodade allt. I den rörelse som ni ser, det det finns någon form av respons. Så snart pepparkakor mannen vidrör pepparkakor kvinnan, hon verkar röra sig bort. Och så, i sanning, kan du implementera, i de flesta programmeringsspråk, begreppet av händelser, där om en hand berör däremot som kan utlösa vissa av din källkod till faktiskt utför. Du kan lyssna efter sådant saker på skärmen. Så låt oss ta en snabb tur, då, om några av de byggstenar vi kan använda att uppnå vissa av dessa mål. Så här är vad vi ska hädanefter ringa ett uttalande. Ett uttalande råkar vara lila i Scratch, en liten sak som denna, men det är godtyckligt. Ett uttalande är bara en pusselbit eller, mer allmänt, en instruktion, som talar om för datorn att göra något, ett uttalande. Så här är ett enkelt prov. Säg hej världen. En annan kan vara vänta en sekund. Så här pusselbit, som stöds i Scratch, kommer vi att meddela din tecken paus för vissa antal sekunder. Detta är också bara ett uttalande. Här intill har vi en annan mer intressant, lek ljud jamar, och den lilla pilen betyder att i Scratch, Detta är en rullgardinsmeny. Så du kan importera ljud. Du kan spela in ljud och göra andra roliga saker i början. Och det också, men i slutet av dagen, är bara ett uttalande. Men nu ska vi införa en mer intressant pjäs, som kallas en Booleskt uttryck. Capital B, uppkallad efter en man vid namn Bool. Och ett booleskt uttryck är bara ett pusselbit eller, mer allmänt, en bit information som är antingen sant eller falskt - ett eller noll, ja eller nej. Så det är bara en av dem två motsatser. Så en sådan booleskt uttryck i värld av Scratch ser ut så här blå pusselbit. Och det är att ställa en fråga, mus ner, och som antingen kan vara, av Naturligtvis, sant eller falskt. Så med denna pusselbit i Scratch, väl, kommer du att kunna upptäcka om ett pussel om musen är, i själva verket är hålls nere av den mänskliga interagerande med ditt program. Den här är lite mer abstrakt, men dessa två vita lådor är bara för siffror. Så du kan göra saker som är här nummer mindre än den andra? Och om så är fallet, kommer Scratch beter ett eller annat sätt. Detta är en lite mer grafisk. Det är om spriten, om katten, för exempel, är faktiskt vidrör muspekaren. Så om den lilla pilen huvudet svävar över katten, då detta pusselbit utvärderar till sant. Det kommer att vara sant, i vilket fall, om man Använd denna booleskt uttryck, eftersom vi kommer se i ett ögonblick, i en gren, kan du antingen göra detta, eller så kan du göra det, ungefär som vi hade ett tillstånd som kontrolleras, finns det en mer sista personen i rummet? Om så, lägga till en. Annars, oroa dig inte längre. Så ett booleskt uttryck kan också vara och-ed tillsammans eller eller-ed tillsammans. Så du kan kombinera booleska uttryck och säger detta och detta måste vara sant för det hela för att vara sant. Och här är en mer verklig värld exempel. Om du har använt CS50 Kurser för att göra kursen shopping, dessa kryssrutor där, där om du kontrollerar att rutan bredvid till kurser, kommer att säga, ja, bara visa mig kurser för vilka Q-värdet är 4,5 eller högre. Om du avmarkerar det, nej, gör inte oroa sig. Eller på liknande sätt, till höger, fungerar inte Konflikt med kurser jag tar, som är antingen sant eller falskt. Det är bara ett booleskt uttryck. Så hela den här tiden när du har använt webbplatser med kryssrutor, du är bara växla motsvarande en Boolean uttryck på och av. Så i vilken form använder du dessa? Tja, i Scratch, vi får se om en stund att det finns förutsättningar att se ut så här. Och det är ganska klokt eftersom mycket som i pseudokod, indragen vi den typ av U-formade pusselbitar, menar att något insidan av att U är kommer att utföra, eller inte, beroende på var den är. Så om booleskt uttryck, då vad är inne kommer att få utföras. Samtidigt finns det en if / else blocket. Så om du vill ha en gren som går här sätt eller att Scratch ger oss det. Och genom denna logik, nu, även om det pusselbit är alldeles för liten att kila något annat inne i det, scratch pusselbitar, de är bara kommer att växa. När du drar och släpper över något, Det kommer bara att växa för att passa vad det är du försöker göra. Så vi kan ta två av dessa saker och göra en trevägs vägskäl så att du antingen göra detta, eller det, eller denna andra sak bara genom att kapsla dem på det sättet. Självklart, om du gör det också mycket, börjar det att bli fult. Men på den punkten, är du faktiskt förmodligen inte programmering mycket väl. Och så det kommer att vara återkommande tema, också det av stil. Precis hur bra faktiskt formatera din kod? Eller hur väl du designa din kod? Men mer om det i framtiden. Och nu har vi slingor. Det finns en trevlig forever loop i Scratch vilket betyder bokstavligen att - göra vad är inne i det här igen, och igen, och igen. Du kan vara mer konkret och säga, göra följande sak 10 gånger. Du kan också använda variabler. Du kan komma med något namn i den Lite ner och säga, ge mig en variabel som heter n och definieras det är lika med ett visst värde. Och sedan kan du få funktioner. Men mer om dem på bara ett ögonblick. Låt mig gå tillbaka till min Scratch gränssnittet. Och låt mig gå vidare den här gången. Och låt oss gå vidare och öppna upp, låt oss säga, ett exempel från - som är lite mer intressant. Låt mig gå vidare, och, faktiskt, Låt mig bara göra det själv. Jag behöver inte öppna denna. Låt mig gå till Arkiv, Nytt. Jag ska gå till Evenemang. Jag ska gå till när grön flagg klickade, och jag kommer att gå till Sound. Och jag kommer att dra och släppa det här pusselbit, spela upp ljud jamar. Det spärrarna ihop. Och nu, när jag klickar på den gröna flaggan - [JAMA SOUND] DAVID MALAN: Adorable. OK, så nu ska vi göra något lite mer logiskt bara för att visa att Vi kan, för nu. Jag kommer att låsa detta från den killen. Jag kommer att gå till Kontrollpanelen. Och jag ska ta ett villkor. Så om något då. Så det är hur det ser ut där. Så jag behöver ett booleskt uttryck. Och låt mig gå vidare och säga, låt mig gå till operatörer. Jag ska göra något lite Mathy, bara för sparkar. Jag kommer att gå in här och säga, om något är mindre än något annat, gå vidare och göra något. Så nu vet du vad, en slumpmässig blocket. Så märker hur, om jag hovrar över detta sak här, det kommer att knäppa på det. Så nu, varsel, jag börjar att göra något som redan mer logiskt intressant. Om ett slumptal mellan 1 och 10 är mindre än, låt oss säga sex. Om jag väljer sex, som i huvudsak medel, göra följande med 50% sannolikhet. Det är som att vända ett mynt. Nu, kan jag göra något villkorligt. Och att något jag kommer göra är att spela upp ljudet. Så nu, när jag klickar på skärmen flagga, det är som att singla slant. [JAMA SOUND] DAVID MALAN: Det var heads eller allt där. Låt oss göra det igen. [JAMA SOUND] DAVID MALAN: Heads igen. [JAMA SOUND] DAVID MALAN: Heads igen. Phew, OK. Svansar den tiden. Så 50% av tiden, om vi gör detta oändligt lång, kommer vi att få 50% meows och 50% tystnader. Så där, bara en grundläggande byggnad block som låter oss göra det. Men detta är typ av tråkiga att jag har att fortsätta att klicka på den knappen. Så låt oss bara dra och kasta alla av dem bort. Om du drar dem till mitten, de ska bara bort sig själva. Låt mig gå upp för att styra. Låt mig gå evigt. Och den här gången kommer jag att göra något minorly irriterande. [SKRATT] DAVID MALAN: Och låt mig gå vidare och göra kontroll. Vänta en sekund, bara så det är inte för rivning. [JAMA SOUND] DAVID MALAN: Det är inte naturligt. OK. [JAMA SOUND] DAVID MALAN: Och varsel vad, trevligt om Scratch, för de av er som har tidigare programmering erfarenhet, du behöver inte starta och stoppa. Du behöver inte kompilera. Du ändrar bara det, och programmet kommer att anpassa sig dynamiskt. Så detta blir en lite intressant. Men låt oss ta det ett steg längre. Låt mig gå vidare och få bli av det programmet. [JAMA SOUND] DAVID MALAN: Det är vad vi ska kalla en bugg i Scratch. Han borde inte fortsätta att göra det ljudet. Så vi ska vi säga till honom att sluta. Okej, så nu är jag kommer att gå in i - Jag ska låta MIT veta. Vi går hit för att för evigt. Och nu vill jag göra något igen och igen. Jag kommer att gå in i Kontrollpanelen. Och låt oss se, jag kommer att dra min om tillstånd finns. Så nu märker logiken. När den gröna flaggan är tryckt, gör något evigt, utan bara göra det något om denna andra sak är sant. Jag ska gå till, låt oss säga, avkänning. Och jag ska gå vidare och välja röra och släpp den där. Det är ett booleskt uttryck. Och nu, märker, i detta släpp menyn finns vissa fördefinierade värden. Så jag kan säga, du vidrör kanten av skärmen? Eller är du röra muspekaren, pilen på skärmen? Så jag ska göra det. Och i så fall, så jag ska gå framåt och spela upp ljud mjau. Så nu jag har typ av den början av ett spel - en bedårande spel. [JAMA SOUND] DAVID MALAN: OK, en bedårande, buggy spel. Låt mig vänta, låt oss säga, en sekund där. Nu spela igen, genom att klicka den gröna flaggan. [JAMA SOUND] DAVID MALAN: Så nu är det som petting en katt. [JAMA SOUND] DAVID MALAN: Okej, nu detta en jag gjorde i förväg. Mycket sent, blir det slags lätt att göra dumma saker. Så låt mig gå in här. Låt oss säga, som klappa katten. Låt oss nu öppna inte klappa katten. Nu, om vi spelar här, du kan gissa, om du är tittar på skärmen - [JAMA SOUND] DAVID MALAN: Nu, om jag klappa katten [Lejons rytande] DAVID MALAN: Så egentligen inte klappa katten i det fallet. Så nu har vi bara ett exempel på ett gren som händer i två riktningar. Låt mig nu gå vidare och öppna ytterligare en här. Detta, även bland vår källa kodfiler för dagen. Så låt mig gå tillbaka till min källa katalog och gå in i, låt oss välja den här killen här och se vad som är annorlunda. Wow, okej, så nu det blir lite mer komplex. Och innan vi ser vad den här killen gör, låt oss försöka sluta, från programmet på den högra sidan. Och nu scratch tydligt låter oss har flera skript, flera program som är associerade med en sprite, med ett tecken, och, tydligen, de är båda kommer att köra i takt. Eftersom båda dessa program startar med när grön flagg klick, är detta antyder en mer avancerad ämne, med som vissa av er kanske känner, känd som gängning, eller multi-threading. Visar sig, lång historia kort, datorer idag kan i princip göra flera saker samtidigt. Eller de kan göra en sak i taget så snabbt att du inte ens märker att det faktiskt gör en sak i taget. Men för nu, låt oss anta att båda dessa program kommer att köras på samtidigt. Och varsel, båda har forever pusselbitar. Så de båda kommer att hålla igång tills jag träffade röd stoppskylt. Så vad ska de göra? På vänster sida, jag är tydligen deklarera en variabel som heter dämpad. Så jag inte kalla det något liknande tråkigt som N. Jag kallade det avstängt detta tid att förmedla innebörd. Jag satt det lika med noll. Låt oss tänka på det som falskt, eller Låt oss tänka på det som False. Nu, för alltid göra följande. Om tangentbordets mellanslag trycks, sedan om dämpad är lika med noll, sedan ändra dämpad till lika en. Else, som dämpat till noll. Så logiskt, även om det är en helt massa pusselbitar som är säger bara, när jag slår på mellanslagstangenten, vad ska jag göra för variabeln kallas avstängt? Ändra det från ett till noll, eller noll till ett. Det är allt. Så det är som att vända en strömbrytare på eller av och minnas, med en variabel, som jag har gjort det. Under tiden på den högra sidan, i lekmannaspråk, vad är syftet med skriptet till höger? STUDENT: Att spela sjölejon ljudet. DAVID MALAN: Att spela Sea Lion ljud, om han inte är avstängt, genom karaktär den variabeln. Så vi delar staten, så att säga, dela information över dessa två skript eftersom, märker här, är vi alltid göra följande. Om avstängt är noll, så om det inte är avstängt - Om avstängt är falskt, sedan spela Detta sjölejon ljud. Och tänk dig själv, hi, hi, hi, för två sekunder, vänta en stund, och sedan kolla igen. Så om vi går nu över här till vänster, där den här killen är, och slå gröna flaggan, [SJÖLEJONET SOUND] DAVID MALAN: Vid vilken punkt detta bli riktigt irriterande? Eftersom detta kommer bara att fortsätta för evigt. Så ibland, oändliga loopar, så att säga, är avsiktlig. Men i detta fall, så fort jag tryck på mellanslagstangenten, slutar han. Nu programmet inte har slutat. Det är fortfarande körs i dessa slingor. Men om jag får mellanslagstangenten igen - [SJÖLEJONET SOUND] DAVID MALAN: Han kommer att plocka upp där han slutade. Så det är ett sätt för oss att göra något om och om igen utan att tid, bara villkorligt. Nåväl, när vi ändå är i denna anda av att göra saker om och om igen, låt mig gå in i ett annat sådant exempel här. Den här vi kallar räkna får. Och märker vad den här killen gör. Det är faktiskt lite mer som pseudokod vi spelade med på Onsdag, varvid han ställer vissa räknare, tänker på det som N igen, till noll, gör han alltid följande. Han säger räknarens värde för en andra, väntar en sekund, och sedan ändrar räknaren med ett. Och i detta sammanhang, som bara innebär steg det. Så tillägger han en till det. Så detta är bokstavligen - det är inte riktigt vad vi tycker av så räkna får. Det är fåren gör rösträkningen, evigt, upp från noll. Så vi kan göra liknande saker det, logiskt. Men nu ska vi försöka att rengöra några av dessa saker upp. Låt mig gå vidare nu till en enkel exempel där vår katt är bara att börja hosta. Okej, så här har vi hosta 0 - datavetare startar räkna från 0. Så här katten är bara att gå att hosta tre gånger. Och här är hur jag genomfört det. När gröna flaggan är tryckt, hosta, vänta, hosta, vänta, hosta, vänta. Och jag gjorde detta genom att bara dra och släppa pusselbitarna. Eller om du börjar mixtra med Scratch, ser du att du faktiskt kan duplicera bitar så att du kan göra saker snabbare utan att dra och släppa till leda. Men vi är inte på den bästa vägen här. För hur gör jag honom hosta en fjärde gång? Tja, jag kunde sortera på gå ner hit. Jag kunde duplicera och sedan klistra in det. Hur gör jag honom hosta en femte gång? Tja, kopiera och klistra in igen. Eller dra släpp igen. Och mycket snabbt, börjar detta program att bli riktigt, riktigt överflödig, riktigt lång, men egentligen ointressant. Men det finns ett sätt att städa upp detta. Vad är det självklara sättet att städa upp detta? OK, så vi kunde faktiskt verkligen gå ut och, när du träffar utrymme bar, ha honom hosta. Men om jag bara vill göra något repetitivt, minns att vi har viss kontroll konstruktioner. Låt mig gå ut ur vägen, gå under kontroll. Låt mig bara göra en upprepning, säga, tre gånger. Och nu vill jag stjäla några av dessa pusselbitar. Låt mig knäppa detta här. Låt mig kasta dessa bort helt och hållet. Och nu har jag en bättre utformat program. Varför? Om jag vill ändra antalet gånger Denna katt hostar, allt jag har att göra är att ändra en variabel, eller ett värde, snarare från tre till fyra, eller fem eller sex. Eller jag kunde göra någonting villkorligt, även, med utrymmet bar om jag ville. Så detta är en allmän princip. När du börjar kopiera och klistra in koden, oavsett om det är i början, eller i C, du gör något fel, mest troligt. Eller åtminstone, när du har överskridit vissa rimligt antal kopior och pastor, är du förmodligen gör något fel. Men vet du vad? Jag gillar inte det här. Detta är inte den renaste designen. Jag önskar att det fanns en pusselbit kallas hosta för då skulle jag inte måste genomföra detta själv, på gammaldags sätt, genom har att säga, och vänta - Tänk om de bara var en hosta pusselbit. Tja, kan jag faktiskt göra det. Låt mig gå under fler block, klicka på Gör ett block, och nu får jag detta fönster här. Jag kommer att kalla denna sak hosta. Jag ska gå vidare och klicka på OK. Och nu varsel, får jag en ny start pjäs som är böjd på toppen. Och vad jag ska göra med detta, är jag kommer att bara stjäla dessa block. Jag ska sätta dem här. Och nu, med dessa tre stycken, har jag genomfört vad jag ska ringa en funktionen, eller ett förfarande, eller vissa av du kanske känner det som en metod. Små skillnader mellan orden. Men för nu, låt oss bara kalla detta en funktion. Detta är bara en ny pusselbit. Nu genomförs så här. Men märker att Scratch har gett oss en fysisk representation av det hela blockera hit. Så nu kan jag bara dra det över här, säga, upprepa tre gånger, och vad som kommer att hända nu, när jag spelar detta script, är bara ett program körs åt gången. Det finns bara en då grön flagga klickade. Men det lila blocket kallas hosta är effektivt träffande Scratch, varje gång du ser att pusselbit, faktiskt utföra dessa steg som jag hända att genomföra manuellt. Så det är ganska snyggt. Men nu, antar att jag bestämde, jag gör inte vill att denna katt bara att hosta. Jag vill att han ska kunna att nysa också. Nå, hur skulle vi gå om genomförande nysning? Jo jag kunde ganska mycket göra samma sak. Jag kunde göra annat block. Jag skulle kalla detta nysning, klickar du på OK. Då, här kunde jag faktiskt ha, låt mig duplicera detta - och det är där du ska känna sig som du förmodligen inte göra något i på bästa sätt. Jag skulle kunna säga något i stil med, achoo, under en sekund. Vänta en sekund. Nu har jag ett nytt block som heter nysa. Och ja, det är det. Men även detta borde börja känna - kanske inte den första veckan i klassen, men av den andra - bara lite överflödig. Klart det finns viss redundans här. Så låt mig föreslå istället att vi förfina denna definition enligt följande. Låt mig gå upp till min fil menyn. Jag kommer inte att spara den här versionen. Jag kommer att gå in i en av mina premade filer här. Och jag ska gå vidare och öppna upp hosta 2. Hoppsan det var hosta 2. Låt mig gå vidare och öppna upp hosta 3, vilket är denna källa katalogen. Hosta 3 och märker - Åh, sa jag berättelsen i fel ordning. Låt mig återhämta sig från denna historia. Berättelsen jag tänkt att berätta ändar med hosta 4 - det är det. Så vad händer om jag istället definiera en större pusselbit kallas definiera, säger ordet n gånger. Nysningar är precis, som synes, i Scratch, Achoo. Så vi uttrycka det som ett ord, bara för att det är begränsning av programmet. Och en hosta är [COUGH], men hosta, C-O-U-G-H. Så det är bara två olika ord gör, i huvudsak, samma sak. Så jag kan egentligen göra en nytt block som denna. Jag använde inte detta menyalternativ innan. Men när du klickar på Gör Block, Du kan välja vissa alternativ. Och du kan säga att detta block faktiskt tar några ingångar, annars känd som argument, eller parametrar, så att du kan ändra beteende för ditt kvarter. Så vad jag gjorde för en stund sedan var Jag kallade detta block Berätta. Och då sa jag, det tar en sträng ingång. Och nu märker, som standard, Det säger sträng 1. En sträng är bara ett ord, eller en fras, för våra ändamål. Men jag ska bara sätta några platshållartext där, precis som i en hemsida, när du ser användarnamn, eller lösenord, och sedan försvinner när du börjar skriva. Det är allt som är. Och nu ska jag lägga till ett nummer ingång. Och jag kommer att kalla denna N - men det är ganska godtyckligt. Och sedan bara en etikett, för att bara göra detta block lite mer själv förklarande - gånger, det är vad jag just gjorde. Och slutresultatet är att jag får ett block som ser ut så här. Och nu märker, jag använder en upprepning blocket. Men snarare än hård kodning tre, jag dra och släppa n på det så jag kan parametrisera funktionen. Jag kan göra denna funktion gör något ett annat antal gånger baserat på det värdet. Och märker, säger, detta är vad jag gjorde här, om jag drar ord, kan jag inte säga ett hårdkodade ord, men oavsett leds i under en sekund. Under tiden, hur jag ånyo verkställa hosta? Jag definierar istället hosta som säger hosta n gånger. Så kort sagt, jag går igenom detta snabbt, men den grundläggande idén är snarast när du börjar se i ditt program att, vänta lite, jag har gjort något ganska så här innan, kan jag räkna ut några vanliga funktionalitet? Kan jag bryta ner vad jag gör in några grundläggande idéer? Det är vad vi gör här. Och jag har staplat de här sakerna, visuellt, ovanpå varandra eftersom det är ett bevis på att idén om börjar med binära, gå till ASCII, göra grafiska program, typ av skiktning alltmer komplexa idéer om ovanpå varandra. Samma idé här. Jag startade från noll, genomföra hosta, sedan insåg hosta är egentligen bara säga något. Så låt mig istället genomföra begreppet säger något. Och på toppen av det, kan jag genomföra achoo, eller hosta? Och vi kunde göra mer sådant varianter fortfarande. Så från denna grundläggande princip, vi kan börja göra allt mer komplexa program. Låt mig öppna upp den här. Vi kan faktiskt ha flera sprites interagera på skärmen samtidigt. Om jag går in i min källa katalog och ta en kallas Trådar, minns att en tråden är bara riktigt förmågan av två skript körs sida vid sida på samma gång. Lägg märke till nu, har båda en fågel sprite och en katt sprite, som båda har sina egna manus. Så varsel, när jag klickar på katt, får jag dessa skript. När jag klickar på fågeln, Jag får dessa skript. Så var och en av dessa killar har sina egna program. När jag nu klicka på den gröna flaggan, märker att vad detta program gör är har katten, otroligt långsamt, jaga fågeln. Men katten har fördelen av att ha har programmerats på ett sådant sätt att oavsett var fågeln är, går katten mot honom. Vi kan spela det spelet mycket snabbare. Så om jag är på katten, märker att jag är hjälp, låt oss säga flytta ett steg. Vi har honom att flytta fem steg vid en tid, så fem punkter i taget. Låt mig klickar på play. [Lejons rytande] DAVID MALAN: Okej, nu kan vi verkligen ge katten fördel. 10 steg i taget. [Lejons rytande] DAVID MALAN: Okej, så mycket snabbt, det blir en liten fördel för katten. Men jag ska vinka min hand på några av detaljerna. Men skälet till att den vägen är starta lite olika varje gång är att jag gör lite av slumpmässighet. Jag är faktiskt pekar katten i en annan riktning beroende på var jag vill att han ska börja så att varje gång spelet, eller animeringen är en lite annorlunda. Nu, låt mig presentera en andra konstruktionen här. Så i det här fallet hade vi fungerar. Det är också att vara en pusselbit känd som en array, eller en lista, som gör att du kan lagra flera värden inne i en variabel. Vi såg trådar, och nu Det finns händelser. Så här är en händelse med dessa två killar här. Och om jag öppnar upp filen som heter Händelser från dagens exempel, kommer vi se ett program som ser lite såhär. Och nu märker den här killen - så märker jag ha den blå Muppet klickade - han gör bara följande. Han har inte en av dem grön flagg pusselbitar. Han har en när jag får händelsen - så några godtyckliga ord. Jag skrev bara ut händelsen där - Han kommer att säga, Polo, i två sekunder. Så de av er som är bekanta med detta spel kanske vet om detta kommer. Om jag nu klicka på den orange Muppet, hans program gör detta. Forever, om tangentbordet mellanslagstangenten undertrycks, kommer han att säga, Marco, i två sekunder på skärmen. Men han kommer också att använda detta snyggare blockera kallas broadcast. Han kommer att sända citat unquote, "händelse." Samtidigt är den blå killen, minns, lyssna för offert unquote, "händelse." Så på något sätt, nu kan vi ha två sprites interagera. Och när vi kommer till webbprogrammering, senare på sikt, på samma sätt kommer detta vara fördelaktigt att ha din hemsida göra något som svar på, till exempel, ett klick på tangentbordet. Så låt mig gå vidare och tryck på mellanslagstangenten. Orange kille säger Marco. Blue kille säger Polo. Om jag gör det igen apelsin kille säger Marco, säger blå kille polo. Så låt oss ta detta ett steg längre. Denna gång ska vi gå, förmodligen, bara några minuter här. Har vi - skrivbordslampa, kom ner. Du är rätt på slutet. OK, kan du både komma upp. Vi har skrivbordslampor för alla. Kom igen. Jag vet inte om vi kan hålla denna löjliga gag upp hela terminen, men. Okej, kom ner. Och under tiden har vi följande exempel för att dra upp, bara för att påskynda saker nu, så att vi har en manifestation från en annan föregångare till dig som använder samma grundläggande byggstenar. Vad är ditt namn? JOHN: John. DAVID MALAN: John. Snäll mot mig dig. Och? Setz: Setz. DAVID MALAN: Setz, snäll mot mig dig. John, om du skulle vilja komma upp först, detta är en gammal skola spel som heter Frogger. Du använder tangentbordet för detta också. Och målet är att komma över gatan och vatten. [FROGGER MUSIK OCH Spelar ljud] DAVID MALAN: Jag är ledsen, ingen skrivbordslampa för dig idag. Okej, Setz, skulle du vilja komma vidare upp? Okej, låt oss göra det igen. Setz: Använder jag pilarna? DAVID MALAN: Bara piltangenterna. Upp, ner, vänster, höger. [FROGGER MUSIK OCH Spelar ljud] DAVID MALAN: Vi kallar dem tröstpris idag, då, mycket bra gjort. Här, för er båda, John och Setz. Grattis, okej. Så återigen, eftersom detta spel spelas, tänka på vad som händer? Ett, det finns helt klart en hel del motion. Men vi har sett hur, med katten och fågel exempel hur du kan göra illusion av rörelse genom att bara flytta några antalet pixlar och om igen. Och om du har ett evigt kvarter, du kan ha dessa bilar gör detta för alltid. Vi har förmågan att ha viss slumpmässighet. Så detta spel inte behöver vara exakt samma varje gång. Dessa stockar, dessa bilar, kan börja på något olika tidpunkter, så att Spelet i sig är mer intressant med varje spel. Och tiden har vi sett möjligheten att lyssna på mellanslagstangenten. Men helt klart, i grunden, kan du också lyssna för upp, ner, vänster, höger, och verkligen någon tangent på tangentbordet. Och du kan också göra en del andra saker. Låt mig gå vidare och gå tillbaka till webbversionen. Låt mig gå in i vår samling av exempel här. Och enligt min studio, video som är i huvudsak en mapp på scratch.mit.edu. Vi har web-versioner av alla dessa projekt. Och låt oss se om jag kan få min dator att samarbeta här. Detta är skrivet av en av våra vänner på MIT, som kallas Flytta Butterfly. Och när detta öppnar upp den, detta kommer att faktiskt använda mer av datorns maskinvara. Scratch råkar genomföras med Flash. Flash kan prata med din webbkamera, om du har en. Så om jag går vidare och helskärm här här, klicka på den gröna flaggan, varsel att Flash säkerhet budskap säger, vill du möjligt att använda min webbkamera? Normalt sett bör du nog säga Neka. Men i det här fallet, ska vi säga tillåter. Sedan kommer jag att berätta för Chrome för att tillåta detta. Och nu, i ett ögonblick, du ser mig, yep, mig. Och om min hand går upp - Jag måste inte flytta min huvud på samma gång. Det finns också en reflektion på skärmen. Kom igen, det går vi - du kan flytta den på skärmen eftersom det finns också pusselbitar - Åh, du vet vad det är, det är därför du också se projektorns skärm bakom mig. Så vi har en liten oändlig sak händer där. Okej, så jag ska spela här nere. Där vi går. Så det finns också en pusselbit som säger, när du ser rörelse under en av de sprites, kan du få det gå upp, ner, vänster, höger eller liknande. Så vi har en bit av virtuell verklighet händer här också, allt inom gränserna för min webbläsare, bara Här använder min webbkamera. Så vad är då på horisonten. Det första problemet set, som du ser, eller webbplatsen kommer gå online senare ikväll på cs50.net, är ganska mycket kommer att vara öppet slut. Och genomföra en Scratch projekt av intresse för dig, ett spel, en interaktion, något konstnärligt, och utmana dig själv att använda valfritt antal av dessa pusselbitar. Och det kan antingen vara interaktiv på detta sätt. Eller det kan vara något mer medvetet gjord för att berätta en historia. Och faktiskt, det är där vi ska hamna utanför idag, med ett sista exempel. Låt mig gå in Scratch lokalt. Låt mig gå vidare och öppna det, och spela en sista program skrivet av en av era föregångare, nämligen att man här. Bra, höja volymen för detta. [Musik Spela] Berättare: Vid nästa CS50, David bjuder en volontär på scenen. DAVID MALAN: För denna demonstration, vi kommer att behöva en volontär. Vill du komma ner? Vad är ditt namn? Går vidare.