SPEAKER: Jeg er [uhørlig]. Og jeg er en senior på Leverett House. Jeg studerer datalogi, og jeg er en TF for CS50. Som freshman, jeg ikke selv har en bærbar computer eller en smartphone. Jeg havde ingen erfaring med programmering. CS50 var den mest mindeværdige kursus, Jeg tog på Harvard, fordi det var en kamp, ​​men det var en virkelig sjov kamp samtidig. Og jeg lavet en masse fantastiske, permanent venner, og jeg lærte en masse virkelig anvendelige færdigheder. Jeg er bare så glad for, at jeg ikke lod min manglende baggrunden være en undskyldning for mig ikke tage CS50. Jeg [uhørlig]. Jeg er en senior på Leverett House, klasse af 2014. Og jeg tog CS50. DAVID MALAN: Så dette er CS50. Dette er slutningen af ​​ugen nul. Og huske, hvor vi startede sidste gang, var med disse lamper, som var så populær, at vi gik og købte nogle flere i dag. Så jeg tror, ​​det vil være vores ting i år - bordlamper, hvis du kommer op på scenen, i det mindste indtil vi løber tør. Men vi brugte disse tilbagekaldelse, at indføre det grundlæggende i repræsentation af data. Vi havde brug måde at starte repræsentere oplysninger inde i en computer. Og den enkleste måde at gøre det var med én ingrediens, elektricitet. Og den enkleste ting du kan gøre med elektricitet tænde den og det off. Lad elektronerne flow eller ej. Og ved hjælp af disse to grundlæggende tilstande, off og på eller falsk og sandt, eller nul og én, begyndte vi at se, at vi kunne bygge op, i dette tilfælde, med lys pærer, flere tal end bare nul og en. Vi tælles så højt som syv, for eksempel tid sidste. Men alt, hvad vi skal gøre, er at holde smide flere og flere pærer på det problem og virkelig, at vi kan repræsentere vilkårligt antal, vi eventuelt ønsker. Nå, vi skiftet hurtigt derefter Onsdag til denne byte af frivillige. 8 bit er, hvad vi normalt kalder en byte, så her havde vi otte frivillige onsdag der tilsammen var repræsenterer otte bits. Og når deres hænder gik op, de var en én. Og når deres hænder var ned, der var et nul. Og vi havde disse folk komme op på scenen hvorfor? Hvad vi er i stand til at gøre med denne sekvens af bits? Hvis du vil oprette et alfabet. Vi var i stand til at bygge videre på toppen af ​​det forrige lektion lærte og faktisk begynde at gøre mere interessant oplysninger, der er i det mindste mere velkendt for os mennesker. Og det vil være en tilbagevendende tema i hele 50, men også computer videnskab mere generelt, denne idé om lagdeling, hvor der ved udgangen af dag, hvis du virkelig startede basics med en computer ja, Det er nuller og ettaller. Og under det er bare elektricitet. Men vi meget hurtigt begynde at tage dem lavt niveau detaljer for givet og begynde at lag oven på tidligere arbejdede gøres, så vi i sidste ende ved slutningen af ​​semestret og virkelig, mere generelt som dataloger og programmører kan gøre nogle rigtig kraftfulde ting ved at udnytte arbejdet som vi selv har gjort, og også stående på skuldrene af andre. Nu vi hurtigt skiftet på onsdag fra blot at skulle repræsentere information til at ville at gøre noget med det. Så hvad gjorde vi definerer en algoritme, som? En serie instruktioner. Så det er en række instruktioner, en Antallet af trin, du, et menneske, eller en computer, mere typisk, ville udføre efter hinanden i rækkefølge at opnå en vis mål. Og vi havde et par mål sidste gang, hvoraf den ene var at tælle personer i rummet. Og en anden sådant eksempel var at finde Mike Smith i en telefonbog. Så du kan huske, at jeg rev en telefon bog i halvdelen mod denne ende finde Mike Smith. Formålet med denne visuelle var at demonstrere igen, at vi var bogstaveligt rive dette problem halvdelen i halve, i halve, meget og hurtigt går fra ligesom 1.000 sider til blot én enkelt side. De af jer, der gik glip af dette på Onsdag Jeg troede, vi ville afspille nogle optagelser af, hvad du gik glip af. Lad os tage et kig. [VIDEO AFSPIL] -Der går vi. 1500 sider, Nice clean linje, legitim tåre. [END VIDEOAFSPILNING] DAVID MALAN: Så det var onsdag. Vi overgang, selvom, onsdag nu at ville repræsentere algoritmer i nogle lidt standard måde, ikke bare beskriver dem verbalt, men prøver at udtrykke dem skriftligt eller på en computerskærm, så vi kunne begynde at forbedre på, og ændre dem, og i sidste ende faktisk analysere, hvor korrekt eller hvor hurtigt de var. Så vi introducerede dette begreb af pseudokode, som i lægmandssprog, er hvad? OK, ord. Lad os gå lidt dybere end det. Engelsk, sikker på, er, men retning af, hvad ende? Ord med til at skabe eller at repræsentere algoritmer. Så der er ingen kendte sprog som pseudokode i verden. Det er bare, at du på engelsk eller uanset din talesprog er, brug en slags overfladisk notation til at formidle en idé meget kortfattet. Men vi vil se, at, i hvert fald med et Engelsk pseudokode, og det viser sig de fleste programmeringssprog selv er afledt af engelsk selv, finder vi, at der er nogle standard måder at repræsentere pseudokode og også programkode. Så når du begynder at se selv de simpleste eksempler i dag, realisere disse samme mønstre vil gentage sig i næste uge. Så pseudokode var en slags sprog ligner et programmeringssprog. Og det første eksempel så vi visuelt nedskrevet var denne. Det var kun en tre trins-programmet, mål var at tælle antallet mennesker i et kollegieværelse til at video på onsdag. Men der var et par interessante aspekter af dette enkleste program. Og det vil være tilbagevendende temaer. Så for dem, der ikke er bekendt med dette, man introducerede vi en variabel. Og sandsynligvis alle i dette rum er bekendt med en variabel i forbindelse med algebra. Men her i programmeringen, variabler er, en, kan være kaldes noget, vi ønsker. Vi har brugt n som en tæller. Men vi kunne bruge ordet counter, eller som du kan se, de fleste helst sætning, du måske gerne, så længe det er beskrivende, men det er egentlig bare en opbevaringsbeholder. Det er en luns af hukommelse, nogle antallet af bits, og det varierer fra computeren, hvordan mange bit der er at komponere denne variabel. Men vi kan sætte værdierne i det. Hidtil har vi kun sætte tal. Men vi kan sætte konkrete ord. Vi kan sætte stykker. Vi kan sætte billeder - noget, virkelig, at vi kan repræsentere med nuller og ettaller, kan vi sætte i dette højere niveau begreb af en variabel. Så ret ligetil der. Og det er linie et. Men vi meget hurtigt flyttede fra line den ene til rent faktisk at gøre noget med denne variabel. Og i tråd tre, opdaterede vi N. Vi øges N. Og vi kunne skrive dette en række forskellige måder. Men måske den mest oplagte er bare for at sige, sæt N lig med uanset N er plus 1. Så det var vores tilvækst. I mellemtiden var der en løkke. Og denne, også er formentlig temmelig intuitiv. En løkke er bare noget i et program det sker igen og igen, nogle slags cyklus. Og denne centrale sætning her, for hver, er faktisk meget almindeligt i det meste programmeringssprog, herunder dem, vi vil se i løbet. Anytime du ser ordet for det typisk formidler idéen om, at en løkke, noget cyklisk, er ved at ske. Men det er værd at bemærke en andre syntaktiske detalje. Det faktum, at tredje linje er faktisk indrykket ved at have ramt mellemrumstasten par gange er bevidst. Da humant konvention er således, når du laver noget igen, og igen i en løkke, begyndt som på linje to, du led noget, der tilhørte til loop bare for at gøre det klart, at det er linie tre og ikke, for eksempel, linie fire eller fem, hvis der var linjer for eller fem, som er del af denne sløjfer. Så dette simple indrykning formidler det grundlæggende idé. Så vi anvendte denne algoritme, nu, at et par eksempler. Og også dette simpelt eksempel i den virkelige verden. Men det kommer til at være repræsentative for hvordan du ville gå om at teste din ejer mere komplekse programmer. Du prøver et par scenarier, nogle repræsentanter indgange, og se om du få de ønskede resultater. Så dette eksempel havde to personer sidder i kollegieværelse. Til venstre er den samme pseudo-kode. Og dette er et skærmbillede af den meget sidste trin af anvendelsen af ​​denne algoritme til disse input, hvor der var to personer i rummet, og huske, da vi træder gennem linjerne én, og to, og tre, og to og tre og gjort - ved udgangen af ​​denne algoritme, vi havde faktisk tælles de to fellows, der er i rummet. Så vi prøvede et andet eksempel. Og vi sagde, hvad hvis der er nul personer i rummet? Er denne kode stadig korrekt? Og faktisk var det. Det bare så sker det, at linje to og dermed linie tre eller ikke kommer til at udføre. De kommer ikke til at ske på alle fordi de er bare ikke, hvis Der er nul personer i lokalet. Men ikke en big deal. Line den ene initialiseret N til nul, så selvom kun én linje af dette program faktisk ender med at være nyttig, det stadig giver det korrekte svar, som angivet ved den orange nul ved bunden. Men så besluttede vi, at var slags dum algoritme. Det var temmelig langsomme. Sikkert, jeg kan gøre to, fire, seks, otte, ti, når optælling personer i et rum. Så vi sammenknebne algoritmen, den pseudokode, for at sige, nu på linje to, for hvert par af mennesker i rummet, videre til på linje tre, tilvækst i ved to på hver iteration. Så det ville have fungeret her dette par personer i rummet. Men så, hvis du begynder at tænke over dette, og det tager ikke lang tid at indser, vent et øjeblik er det vil bryde, det bryder på, hvad simpel sag? Hvis der er tre personer i rummet, eller mere generelt, når der er en ulige antal personer i værelse, herunder en. Vi ville brænde den person her, fordi der ikke findes sådanne par. Så vi hurtigt behandlet af stedet indføre hvilke yderligere programmering konstruktioner til pseudokode. Så en tilstand, der kaldes vi det, eller en filial. Og det er meningen at formidle visuelt, at idé filial, en gaffel i vejen hvor du kan enten gøre dette eller, måske, noget andet. Og ja, vi tager fat på dette problem ved tilføjer linje 4, ved at sige, virkelig, at allersidst, hvis én person tilbage, derefter gå videre og tælle dem specielle. Så du sortere i særlige tilfælde dem, så til at tale, så vi nu kan håndtere både et lige antal mennesker og et ulige antal mennesker. Nu er der en række forskellige måder vi kunne have udtrykt dette. Og helt ærligt, kunne jeg har været endnu mere nit picky når det kom til mit valg af Engelsk til pseudokode. Men i det mindste ånden i ideen føres. Hvis du udleveret denne kode til en ven der er ikke i CS, eller har aldrig taget KS, odds er, de kunne regne ud, givet tre personer i rummet, hvordan tælle dem, der bygger folk på disse vejledninger. Og det er alt vi virkelig ønsker at opnå med pseudokode, på en måde standardisere hvordan vi går om repræsenterer idéer, så vi kan begynde at gøre mere kompliceret ting stadig. Så det fører os derefter, i dag, til den faktiske kode. Vi begynder at programmere i dag, omend i et venligt miljø. Og så har vi overgangen meget hurtigt en mere mystisk syntaks, men en, du vil se, er grundlæggende de samme som ideerne vil se manifesteret med dette andet sprog i dag. Det er bare at kigge lidt anderledes. Så snarere end blot kalde denne kode, jeg er kommer til at være lidt mere præcis og sige, fremover når du skriver en program, du skriver kildekode. Det er lidt ligesom pseudokode. Men vi vil se det er ikke slags løs når det kommer til at vælge de ord, , du bruger. Når programmering på et sprog, du har til at bruge de ord, de sætninger, den syntaks, at andre mennesker har besluttet udgør det pågældende sprog. Så pseudocodes er op til dig. En egentlig programmeringssprog som C, da vi i sidste ende vil se, er standardiseret af andre mennesker. Så hvordan kan vi gå om at skrive nogle kildekoden? Jamen jeg har tænkt mig at gå videre og gøre dette. Jeg har tænkt mig at gå videre og åbne et vindue her. Mere om dette i næste uge. Men dette er en enhed kaldet Den CS50 apparatet. Jeg kører et stykke software på min Mac, selvom du kan gøre det samme på en Windows-computer, er, at give mig illusionen kører med et andet operativsystem helt ret her i et vindue på min Mac. Jeg har bare fuld screenet det, så du ikke faktisk se Mac OS lige nu. Dette er et operativsystem kaldet Linux. Det er meget populært. Det er meget hurtigt. Det er meget frit, hvilket har gjort det meget overbevisende, især i kommercielle verden. Og mere om det i slutningen af semester, når vi bruger Linux ganske lidt for web programmering og hosting af faktiske hjemmesider og projekter. Så nu, bare vide, at det er en desktop der er beregnet til at se vagt kender til Windows og Mac OS. Det bare har nogle forskellige navne og ikoner for ting. Men dette er den såkaldte CS50 apparat, en virtuel maskine, der, starter næste uge, vil du fyre kører inde i et vindue på din egen Mac eller pc. For i dag, vil jeg åbne op den enkleste af programmerne. Det hedder gedit. Og dette er blot en grafisk editor. Det er lidt ligesom Microsoft Word, men enklere. Det er lidt ligesom tekst redigere eller notesblok. Det er bare en meget simpel program med til at skrive ord på skærmen. Det bare så hvad sker der, hvis jeg gemmer filer, som jeg skaber, når dette program i en særlig forlængelse ud. c, i stedet af. doc, eller. xls, eller hvad du er fortrolig med, kan jeg faktisk skabe programmer ved hjælp selv dette simple teksteditor. Så lad mig gøre det. Lad mig gå videre og gemme denne fil først som hello.c. Og igen, denne brugergrænseflade bliver bekendt for dig hurtigt. Men for nu, jeg bare skrive i et filnavn. Jeg har tænkt mig at gemme det ind i min John Harvard hjemmebibliotek. Og nu har jeg denne fane, der angiver Jeg faktisk redigering en fil kaldet hello.c. Så intet også interessant alligevel. Og nu er det kommer til at få temmelig kryptisk. Jeg har tænkt mig at zoome ind, bare så det er mere synligt. Og jeg har tænkt mig at begynde at skrive omfatte stdio.h, int main, ugyldig, åben krøllet klampe, en, to, tre, fire rum af indrykning, print f, for print noget formateret, citat citat slut, "Hej, verden" omvendt skråstreg, n, close citerer, lukket parentes semikolon, indtaste backspace, backspace, backspace, backspace, lukket klammeparentes - Jeg har programmeret. Okay så dette er en super enkel program, virkelig, det program, nogen starter programmering med. Og alt det gør, for al sin kompleksitet, er udskrive på skærm, gæt hvad? Hej Verden. Men det er ikke nok blot at skrive et program. Så dette er kode. Dette er kildekoden i et sprog kaldet ca. Det er gemt i øjeblikket en fil kaldet hello.c. Nu se nederst af skærmen her. Mere om dette, igen, i de kommende uger. Men dette er, hvad vi vil kalde et terminalvindue. Det er en blinkende, sort og hvide prompt. Det er en slags en gammel skole grænseflade til en computer, der generelt ikke bruge en mus eller anden grafiske elementer. Det bare bruger dit tastatur. Og jeg kan skrive kommandoer på dette blinkende prompt. Og for nutidens formål, er jeg bare kommer til at skrive følgende - gøre hej. Og det program, gør, er bare en program, der i den virkelige verden disse dage, ville vi dobbeltklikke på. Men i denne grænseflade for i dag, er vi kommer til at skrive sit navn ved denne prompt. gøre hej bogstaveligt talt gå til gøre mig et program kaldet hej. Og det kommer til at gøre det ved at kigge efter en fil, ved blot standard, kaldet hello.c. Det kommer til at antage, jeg vil have et C-program ved karakter af, hvordan denne computer er konfigureret. Så jeg går videre og tryk enter. Jeg ser nogle kryptiske output, men dette vil blive alt for velkendt inden længe. Dette skete for at køre en compiler, mere om det i et øjeblik, kaldet Clang. Men nu har jeg fået bare en anden blinke bede. Og jeg kan gå videre nu, og skriv dot slash, for uinteressante grunde vil vi komme tilbage til næste uge - hej. Så alt i denne indsats hidtil blot at skriver den enkleste af programmer, der, så snart jeg trykker på Enter, gør det. Så jeg har skrevet min første program. Så jeg bevidst grin på dette meget simpelt program for et par grunde. One, det er svært at blive ophidset om at tage en klasse, hvis dette er enden spillet. Men mere end det, er der en masser af distraktioner heroppe. Første gang du lærer at programmere, for dem af jer mindre komfortabel, og selv jeg, tilbage i dag, da jeg først så noget som dette - du kan slags af tal, der, okay, det er i en print hej verden. Men der er så meget distraktion. Der er så meget syntaks på skærmen at det bliver i vejen for meget enkle, ellers enkle, idéer. Så det, vi kommer til at gøre i dag, er vi kommer til at lægge C og kommer tilbage til det på mandag. Og vi kommer til at bruge en grafisk programmeringssprog kaldet Scratch. Dette er et programmeringssprog, som jeg hentydet til på onsdag, er, at gå at tillade os at gøre det samme slags ting men vender det blinde øje, for i dag, til de krøllede parenteser, parenteser, de semikolon og alle disse dumme distraktioner, der kommer i vejen, i denne første dag i nogle grundlæggende, smukke interessante idéer. Så mod denne ende, jeg kommer til at gå tilbage til mit skrivebord herover og introducere dig til alternativ til at program, som kommer til at se en lidt noget lys dette. Det er, hvordan vi kommer til at gennemføre denne samme program i dag - to puslespil stykker, når sammenføjningsanordninger og klikkede på, vil sige til verden, hej verden. Så lad os faktisk gå der. Så jeg har tænkt mig at gå videre og åbne en websted, kaldet scratch.mit.edu. Og det vil føre mig til denne hjemmeside her. På forhånd har jeg logget ind i dette hjemmeside og de første problemer, der vil lede dig gennem nogle af disse trin. Jeg har tænkt mig at gå videre og klik på på min scratch mappe her. Og det kommer til at vise mig nogle projekter, som jeg har faktisk skabt på forhånd. Og det viser sig, at denne grafiske programmeringssprog ikke kun kommer at lade os program ved at trække og droppe disse puslespilsbrikker, du behøver ikke engang speciel software. Det hele er indlejret i en browser, så at du kan gøre dette, i teorien, om dine computere lige nu, som nogle af jer kan meget vel være, uden selv at skulle software som CS50 apparat, som vil komme i næste uge. Så jeg har tænkt mig at gå op til det øverste hjørne her og klik på Opret. Og i et øjeblik jeg har tænkt mig at få en blank skærm via som jeg kan begynde programmering i denne grafiske programmering miljø. Men denne gang, det vil være meget, meget enklere at rent faktisk gør det. Så i bare et øjeblik, hvor Wi-Fi samarbejder, vi nu har denne skærm. Så en hurtig verbal tour, men jeg tør sige, sikkert, når du dykke ned i første problem sæt, vil du finder dette alt sammen meget tilgængelig og temmelig intuitiv. Men lad os male et mentalt billede for bare et øjeblik. Så under denne prompt siger save ændringer, du er ved at se bunden. Dette er en sprite. Det er et tegn. Og han bor på, hvad vi vil kalde en scene, denne store hvide rektangel på som han kan bevæge sig op, ned, venstre, ret, og gør, virkelig, andre typer af handlinger. I mellemtiden, i midten af ​​denne bruger interface, har vi en hel masse puslespilsbrikker. Og du vil se, at de siger ting som flytte 10 trin, vendte 15 grader, punkt i en bestemt retning. Men der er kategorier af blokke op her også. Så hvis jeg går til udseende, vil du se, at der er andre brikker, der tilsyneladende vil fortælle dette cit til sige goddag, til at tænke, for at vise selv, skjule sig. Hvis jeg går ned til Sounds, viser det sig der er måder at spille lyder som mjave, at stoppe alle lyde, til at spille en tromme. Så lang historie kort, er der en hel bundt af puslespilsbrikker, der giver dig at fortælle denne kat, eller en række af andre figurer, hvad de skal gøre. Men for at gøre alt dette ske dig nødt til at starte programmeringen. Og denne store hvide boks eller grå boks på højre side, det er her Jeg har tænkt mig at rent faktisk trække og droppe dem puslespilsbrikker. Det er min blank tekst vindue tilsvarende. Så jeg har tænkt mig at gå videre og klik på Kontrol i midten. Eller rettere, lad mig starte op under Events. Under Events bænk, vil du bemærke en nogle ting, der er bevidst buet på toppen på en sådan måde, at de sandsynligvis ikke interlock på toppen af ​​puslespilsbrikker. Og det er fordi de Demark start af et program, starten på en script, så at sige. Så hvis jeg gå videre og trække, når grøn flag klikkede herovre, og så er jeg ønsker denne kat til at sige noget i første omgang. Så jeg har tænkt mig at gå under ser panelet. Og jeg har tænkt mig at gå videre og få fat i sige goddag blok, og træk og slip, og slip, så den automatisk sammenlåser der. Og så bemærker jeg kan klikke på teksten. Og jeg kan tilsidesætte den til at være mere specifik gerne sige, hej verden. Og nu har vi det program, jeg hævder svarer til, at meget mere mystiske program jeg implementeret i C for et øjeblik siden. Hvis jeg går forbi nu til den venstre side, bemærke at der er en stor stop-skilt og et stort grønt flag. Lad mig zoome ind for klarhed. Og når jeg nu klikke denne grønne flag, kan du sikkert gætte, hvad denne første program er nu vil gøre. Så der også, vi programmerer, men vi faktisk ikke at køre fast i nogle af disse syntaktiske, mindste detaljer. Men lad os prøve noget lidt mere interessant. Lad mig gå ind i min Scratch folder her. Og faktisk, lad mig så lad mig åbne op et særskilt program her til blot en øjeblik, Maksimer vinduet, Fil Open, og jeg har tænkt mig at gå ind i nutidens source bibliotek. Som altid finder du, dag og og fremefter, at alle nutidens eksempler er tilgængelige inde i kursets hjemmeside. Og jeg har tænkt mig at gå videre her og pick op lidt noget andet. Denne ene her, som Jeg har brug for en frivillig. Hvem ønsker en bordlampe i dag? OK, hvordan om en person lidt - er du på enden? Kom ned. Nu vil du gerne deltage, eller bare sige starte med bordlampe? VANESSA: [uhørlig]. DAVID MALAN: OK. Fremragende, hvad er dit navn? Vanessa? David. Hyggeligt at møde dig. Så kom op og Vanessa kommer at tage kontrol over min tastatur til bare et øjeblik. Og hvad jeg har gjort her, bare for tidens skyld, som jeg har indset den Wi-Fi var lidt langsomme, Scratch, den programmering miljø, som vi er bruger, kan også downloades og køre på din lokale computer. Så hvad jeg gjorde i forvejen foredrag i sag, der sker, er jeg downloadet alle de filer, vi er ved at lege med således at de kan køre lidt mere hurtigt lige her på min bærbare computer. Så det er derfor nu ser jeg en Mac-specifik grænseflade. Så jeg har tænkt mig at gå videre og åbne denne ene. Jeg har tænkt mig at gå videre nu, og fuld skærm vinduet. Og som du kan se, kan vi meget hurtigt, som denne elev gjorde, en af Deres forgængere, gå fra hej verden til en meget, meget mere overbevisende ansøgning. Så her er de instruktioner. Åh, og vi har en anden ting. Jeg troede det ville være sjovt, da normalt, vil vi filme kameraer på denne måde. Jeg troede, det ville være sjovt, hvis Vanessa, vi kunne se verden gennem dine øjne. Så her har vi nogle Google Glass. [Forbavset gisp] DAVID MALAN: Vi vil kun give væk bordlamper i dag. [Latter] Så lad mig cue dette op. Okay, så røre ved dette. OK, Glass, optage en video. Okay, Vanessa? Nu, som en sidebemærkning, der har fået noget at gøre med Scratch, hvis man ser lidt op og til højre, vil du se den bogstavelige glas, og du bør se et lille rektangulært vindue. Du bør se alle dine klassekammerater bliver filmet lige nu? Ja. VANESSA: Ja. DAVID MALAN: OK. Så det er fint. Vi frigive denne optagelserne senere. For nu, vende din opmærksomhed til skærmen her. Og hvad Deres forgænger har gjort, er sætte nogle instruktioner på skærmen blot ved hjælp af en maling program. Så du kommer til at, i et øjeblik, trykke på mellemrumstasten for at starte. Og så nogle puslespilsbrikker går at begynde at bevæge sig på skærmen. Og du ønsker at ramme piletasterne, bare ligesom i det virkelige DDR, i overensstemmelse med ting foring op med disse pile. VANESSA: OK. DAVID MALAN: Du har spillet det før. VANESSA: Ja. DAVID MALAN: Okay, Vanessa, gå videre og tage det væk. [MUSIC - Kayne WEST, "stærkere"] [Applaus] DAVID MALAN: Så lad os nu tage et skridt fra der. Så tydeligt, det er slutningen spillet. Enden Spillet er ikke hej verden. Men du behøver ikke nødvendigvis at gøre ting, der er så interaktivt. Du kan også gøre animation. Så for eksempel, en anden af ​​dine efterfølgere gjorde dette program her, som fortæller en historie mere end det gør implementeret et spil. Så lad mig gå videre og åbne op her en program i vores samme kilde bibliotek fra i dag. Denne ene opkald, og lad os starte med en cookie kærlighedshistorie. Og ikke for at gøre dette for akademisk, men som du ser dette, tænke at dig selv, hvilke af disse simple programmering begreber vi har talt om hidtil - variabler, og løkker og betingelser, har din forgænger formentlig bruge bare at gennemføre nogle af visualiseringer. Du ser her. Så jeg giver dig En cookie kærlighedshistorie. [MUSIC - GREEN DAY "FERIE"] [CRASH] [MUSIC - skildpadder, "Happy Together"] DAVID MALAN: Okay, så der, vi havde en cookie kærlighedshistorie. Men selv der - [Applaus] DAVID MALAN: Okay, selv der, tænke, da disse hjerter gik fra bunden til toppen af ​​skærmen, der var faktisk en smule tilfældighed foregår. Og ja, vil vi se, at selv i enkleste af miljøer, ligesom Scratch, som i C, kan du generere tilfældige tal, eller illusionen om tilfældige tal, så spillet er et lidt mere interessant end det måske være, hvis du havde absolut hårdt kodet alt. I den bevægelse, du ser, er der er en vis form for lydhørhed. Så snart kagemand rører honningkager kvinde, hun synes at bevæge sig væk. Og så, ja, kan du implementere i de fleste programmeringssprog, begrebet af begivenheder, hvor Hvis en hånd rører den anden side, der kan udløse nogle af din kildekode til faktisk at gennemføre. Du kan lytte til en sådan ting på skærmen. Så lad os tage en hurtig tur, så med nogle af de byggesten, vi kan bruge at opnå nogle af disse mål. Så her er, hvad vi vil fremover kalde en erklæring. En erklæring sker for at være lilla i Scratch, lidt noget som dette, men det er vilkårlige. En erklæring er bare et brik, eller, mere generelt, en instruktion, der fortæller computeren til at gøre noget, en erklæring. Så her er en simpel prøve. Sig hej verden. En anden kunne være vente et sekund. Så dette brik, der er støttet i Scratch, vil vi lade din tegn pause for nogle antal sekunder. Også dette er blot en erklæring. Her næste, vi har en anden mere interessant, play lyd miaver og den lille pil betyder, at i Scratch, dette er en drop down menu. Så du kan importere lyde. Du kan optage lyde og gøre andet sjove ting i bunden. Og det også selvom i slutningen af dagen, er bare en erklæring. Men lad os nu indføre en mere interessant stykke, der er kendt som en Boolske udtryk. Capital B, opkaldt efter en fyr ved navn Bool. Og en boolesk udtryk er bare en brik eller mere generelt, en stykke information, der er enten sand eller falsk - en eller nul, ja eller nej. Så det er bare en af ​​dem to modsætninger. Så en sådan Boolske udtryk i verden af ​​Scratch ligner denne blå brik. Og det er at stille et spørgsmål, mus ned, og det kan enten være af Selvfølgelig sande eller falske. Så med dette puslespil brik i Scratch, godt, vil du være i stand til at opdage, hvis en puslespil om musen er, i virkeligheden, bliver holdt nede af den menneskelige interaktion med dit program. Denne ene er lidt mere abstrakt, men disse to hvide kasser er bare for tal. Så du kan gøre ting som dette er tal mindre end den anden? Og hvis ja, vil Scratch opfører ene eller den anden måde. Denne ene er lidt mere grafisk. Det er, hvis Sprite, hvis katten, for Eksempelvis er faktisk rører musemarkøren. Så hvis den lille pil hoved svæver over katten, så dette brik vil evaluere til true. Det vil være sandt, i hvilket tilfælde, hvis du bruge denne boolesk udtryk, som vi vil se i et øjeblik, i en filial, kan du enten gøre dette, eller du kan gøre det, meget ligesom vi havde en betingelse, at markeret, er der endnu et sidste person i rummet? Hvis ja, tilføje en. Ellers, så fortvivl ikke yderligere. Så en boolesk udtryk kan også være and-ed sammen eller or-ed sammen. Så du kan kombinere booleske udtryk og sige dette, og det skal være sandt for det hele til at være sandt. Og her er en mere virkelig verden eksempel. Hvis du har brugt CS50 Kurser til at gøre kurset shopping, disse afkrydsningsfelter der, hvor, hvis du kontrollere, at feltet ved siden af til kurser, vil der siger ja, kun vise mig kurser, hvor Q-værdien er 4,5 eller højere. Hvis du fjerne markeringen af ​​det, nej, gør ikke bekymre sig om det. Eller på lignende måde, på højre, Mener ikke Konflikt med kurser jeg tager, det er enten sande eller falske. Det er bare en boolesk udtryk. Så al den tid, når du har brugt hjemmesider med afkrydsningsfelter, du bare skifte svarer til en Boolean ekspression og slukkes. Så i hvilken form bruger du dem? Tja, i Scratch, vil vi se på et øjeblik at der er forhold, se sådan ud. Og der er slags fornuftigt, fordi meget ligesom i pseudokode, indrykket vi den slags U-formede puslespilsbrikker, betyder at noget inde i at U er vil udføre, eller ikke, afhængigt om, hvor det er. Så hvis Boolske udtryk, så hvad der er indeni, vil blive henrettet. I mellemtiden er der en hvis / andet blok. Så hvis du ønsker en gren, der går denne måde, eller at Scratch giver os det. Og ved denne logik, nu, selv om det brik er tydeligvis for lille at kile noget andet inde i det, scratch puslespilsbrikker, de er bare at vokse. Når du trækker og slipper over noget, det vil bare vokse til at passe hvad det er du forsøger at gøre. Så vi kan tage to af disse ting, og lave en tre-vejs gaffel i vejen, så at du enten gøre dette, eller at, eller denne anden ting bare ved indlejring dem på denne måde. Selvfølgelig, at hvis du gør alt meget, det begynder at blive grimt. Men på dette punkt, er du faktisk sandsynligvis ikke programmering meget godt. Og så der vil være tilbagevendende tema også, at af stil. Hvor godt kender faktisk formatere din kode? Eller hvor godt kender du designe din kode? Men mere om det i fremtiden. Og nu har vi sløjfer. Der er en dejlig evigt loop i Scratch som bogstaveligt betyder, at - gøre hvad der er inde i det igen, og igen og igen. Du kan være mere konkret og sige, gøre følgende ting 10 gange. Du kan også bruge variabler. Du kan komme op med noget navn i den lidt drop ned og sige, giv mig et variabel kaldet n og sæt det svarer til en vis værdi. Og så kan du have funktioner. Men mere på dem i bare et øjeblik. Lad mig gå tilbage til min Scratch grænseflade. Og lad mig gå videre denne gang. Og lad os gå videre og åbne op, lad os sige, et eksempel fra - der er lidt mere interessant. Lad mig gå videre, og faktisk, lad mig bare gøre det selv. Jeg behøver ikke at åbne denne ene. Lad mig gå til Fil, Ny. Jeg har tænkt mig at gå til Events. Jeg har tænkt mig at gå til, når grønt flag klikket på, og jeg har tænkt mig at gå til Sound. Og jeg har tænkt mig at trække og slippe det brik, afspille lyd miaver. Det låsene sammen. Og nu, hvis jeg klikker på den grønne flag - [MEOW SOUND] DAVID MALAN: Adorable. OK, så lad os nu gøre noget lidt mere logisk bare at vise, at vi kan, for nu. Jeg har tænkt mig at frigøre dette fra den fyr. Jeg har tænkt mig at gå til Control. Og jeg har tænkt mig at få fat i en betingelse. Så hvis noget dengang. Så det er hvordan det ser ud der. Så jeg har brug for en boolesk udtryk. Og lad mig gå videre og sige, lad mig gå til Operatører. Jeg har tænkt mig at gøre noget lidt Mathy, bare for sjov. Jeg har tænkt mig at gå ind her og sige, at hvis noget er mindre end noget andet, gå videre og gøre noget. Så nu ved du hvad, en tilfældig blok. Så læg mærke til hvordan, hvis jeg svæver over dette ting her, som vil snappe derinde. Så nu, varsel, jeg begynder at gøre noget allerede mere logisk interessant. Hvis et tilfældigt tal mellem 1 og 10 er mindre end, lad os sige seks. Hvis jeg vælger seks, der hovedsagelig betyder, gøre følgende med 50% sandsynlighed. Det er som at bladre en mønt. Nu kan jeg gøre noget betinget. Og at noget jeg har tænkt mig at gøre, er at spille lyden. Så nu, når jeg klikker på skærmen flag, det er ligesom at kaste en mønt. [MEOW SOUND] DAVID MALAN: Det var hoveder eller whatnot der. Lad os gøre det igen. [MEOW SOUND] DAVID MALAN: Heads igen. [MEOW SOUND] DAVID MALAN: Heads igen. Pyha, OK. Haler pågældende tidspunkt. Så 50% af tiden, hvis vi gør det uendeligt længe, ​​vil vi få 50% mijaver og 50% tavshed. Så der, bare en grundlæggende bygning blok, der lader os gøre det. Men det er lidt kedelig, at jeg har at holde klikke på denne knap. Så lad os bare trække og kaste alle dem væk. Hvis du slæbte dem til midten, de vil bare slette sig selv. Lad mig gå op til kontrol. Lad mig gå til evigt. Og denne gang vil jeg gøre noget minorly irriterende. [Latter] DAVID MALAN: Og lad mig gå videre og gøre kontrollen. Vent et sekund, bare så det er ikke for rist. [MEOW SOUND] DAVID MALAN: Det er ikke naturligt. OK. [MEOW SOUND] DAVID MALAN: Og bemærk, hvad der er, nice om Scratch, for dem af jer, der have forudgående programmering erfaring, du behøver ikke at starte og stoppe. Du behøver ikke at kompilere. Du skal bare ændre det, og programmet vil tilpasse sig dynamisk. Så dette er at få en lidt interessant. Men lad os tage det et skridt videre. Lad mig gå videre og få slippe af programmet. [MEOW SOUND] DAVID MALAN: Det er, hvad vi vil kalde en fejl i Scratch. Han burde ikke holde gør den lyd. Så vi vil vi fortælle ham at stoppe. Okay, så nu er jeg gå i - Jeg lader MIT vide. Vi vil gå over her i Forever. Og nu, jeg ønsker at gøre noget igen og igen. Jeg har tænkt mig at gå ind i Kontrolpanel. Og lad os se, jeg kommer til at trække min hvis tilstand der. Så nu mærke til logik. Når det grønne flag er klikket, skal du gøre noget evigt, men kun gøre det, noget, hvis denne anden ting er sandt. Jeg har tænkt mig at gå til, så lad os sige, sansning. Og jeg har tænkt mig at gå videre og vælge rørende og drop det der. Det er en boolesk udtryk. Og nu, mærke, i dette fald down menu, er der nogle foruddefinerede værdier. Så jeg kan sige, er du rører kanten af ​​skærmen? Eller er du rører musemarkøren, pilen på skærmen? Så jeg har tænkt mig at gøre det. Og hvis ja, så jeg har tænkt mig at gå fremad og afspille lyd miaver. Så nu jeg slags har begyndelse af et spil - en yndig spil. [MEOW SOUND] DAVID MALAN: OK, en yndig, buggy spil. Lad mig vente, lad os sige, en sekunder der. Nu spille igen, ved at klikke på det grønne flag. [MEOW SOUND] DAVID MALAN: Så nu er det ligesom petting en kat. [MEOW SOUND] DAVID MALAN: Okay, nu er denne en jeg gjorde i forvejen. Meget sent, det bliver slags let at gøre dumme ting. Så lad mig gå her. Lad os sige, der var Pet Cat. Lad os nu åbne ikke Pet Cat. Nu, hvis vi spiller denne ene, du kan gætte, hvis du er man ser på skærmen - [MEOW SOUND] DAVID MALAN: Nu, hvis jeg kæler katten [Løvens ROAR] DAVID MALAN: Så faktisk ikke kæle katten i denne sag. Så nu skal vi bare et eksempel på en gren, der foregår i to retninger. Lad mig nu gå videre og åbne en anden en her. Denne ene, også blandt vores kilde kode filer for dagen. Så lad mig gå tilbage til min kilde mappe og gå ind, lad os vælge denne fyr her og se hvad der er anderledes. Wow, okay, så nu det er at få lidt mere kompliceret. Og før vi ser, hvad denne fyr gør, lad os prøve at udlede, fra programmet på højre side. Og nu scratch klart tillader os at har flere scripts, flere programmer i forbindelse med én sprite, med ét tegn, og tilsyneladende de er begge kommer til at køre i lockstep. Da begge disse programmer starter med, når grønne flag klik, er det antyde en mere avanceret emne, med som nogle af jer kan være bekendt, kendt som gevindskæring, eller multi-threading. Slår ud, lang historie kort, computere dag, kan hovedsageligt gøre multiple ting på én gang. Eller de kan gøre én ting ad gangen, så hurtigt, at du ikke engang mærke til, at det er faktisk at gøre et ting ad gangen. Men for nu, lad os antage, at begge disse programmer kommer til at udføre på samme tid. Og varsel, begge af dem har evigt puslespillet. Så de er begge kommer til at holde kørende indtil jeg ramte det røde stopskilt. Så hvad vil de gøre? På venstre side, er jeg åbenbart erklære en variabel kaldet dæmpet. Så jeg ikke kalde det noget som kedeligt ligesom N. Jeg kaldte det dæmpet dette tid til at formidle mening. Jeg sætter den lig med nul. Lad os tænke på, at så False eller lad os tænke på, at så False. Nu, for evigt gøre følgende. Hvis tastaturet er rummet bar der trykkes så hvis dæmpet lig nul, derefter ændre dæmpet til lige én. Else satte dæmpet til nul. Så logisk, selvom det er en helt flok puslespil stykker, der er siger bare, når jeg ramte Space bar, hvad skal jeg gøre for at den variable hedder slået fra? Ændre det fra en til nul, eller nul til én. Det er alt. Så det er ligesom at dreje en lyskontakt tændt eller slukket og huske, med en variabel, at jeg har gjort det. I mellemtiden, på højre side, i lægmandssprog, hvad der er formålet med scriptet til højre? STUDENT: For at spille søløve lyd. DAVID MALAN: For at afspille Sea Lion lyd, hvis han ikke er slået fra ved beskaffenheden af ​​denne variabel. Så vi deler staten, så at sige, deling af oplysninger på tværs af disse to scripts fordi bemærke her, er vi evigt gøre følgende. Hvis dæmpet er nul, så hvis det ikke er slået fra - hvis dæmpet er falsk, så spiller denne Sea Lion lyd. Og tænk på dig selv, hej, hej, hej, for to sekunder vent et øjeblik, og så tjek igen. Så hvis vi går nu over her til venstre, hvor denne fyr er, og ramte grønt flag, [SEA LION SOUND] DAVID MALAN: På hvilket tidspunkt gør dette får virkelig irriterende? Fordi det bare vil gå på evigt. Så nogle gange, uendelige løkker, så at sige, er bevidst. Men i dette tilfælde, så snart jeg ramte mellemrumstasten, han stopper. Nu har programmet ikke op. Det er stadig kører i disse sløjfer. Men hvis jeg får den plads bar igen - [SEA LION SOUND] DAVID MALAN: Han kommer til at plukke op, hvor han slap. Så der er en måde for os at gøre noget igen og igen, men at tid, kun betinget. Nå, mens vi er i denne ånd at gøre ting igen og igen, lad mig gå ind andet eksempel her. Denne ene vi kalder tælle får. Og læg mærke til, hvad denne fyr gør. Det er faktisk en smule mere som pseudokode vi spillede med på Onsdag hvorved han sætter nogle tæller, tænk på det som N igen, for at nul, han for evigt gør følgende. Han siger tælleren værdi for én sekund, venter et sekund, og derefter ændrer tælleren med én. Og i denne sammenhæng, at netop betyder intervaller det. Så tilføjer han en til det. Så dette er bogstaveligt talt - det er ikke helt, hvad vi mener af som at tælle får. Det er fårene gør optællingen, evigt, op fra nul. Så vi kan gøre lignende ting der, logisk. Men lad os nu forsøge at rense nogle af disse ting op. Lad mig gå videre nu i en simpel eksempel, hvor vores kat er bare at starte hoste. Okay, så her har vi hoste 0 - dataloger starter tælle fra 0. Så denne kat er bare at hoste tre gange. Og her er hvordan jeg implementeret det. Når grønt flag er klikket, hoste, vent, hoste, vent, hoste, vent. Og jeg gjorde det bare ved at trække og slippe puslespilsbrikker. Eller hvis du begynder at rode med Scratch, vil du se du kan faktisk duplikere stykker, så at du kan gøre tingene mere hurtigt uden at trække og slippe ad nauseum. Men vi er ikke på den bedste vej her. Fordi hvordan kan jeg gøre ham hoste en fjerde gang? Tja, jeg kunne sortere i går hernede. Jeg kunne kopiere og derefter indsæt denne derinde. Hvordan gør jeg ham hoste en femte gang? Nå, kopiere og indsætte igen. Eller træk drop igen. Og meget hurtigt, dette program starter at få virkelig, virkelig overflødig, virkelig lang, men virkelig uinteressant. Men der er en måde at rydde op. Hvad er den oplagte måde at rydde op? OK, så vi kunne faktisk rigtig go ud, og når du rammer den plads bar, få ham hoste. Men hvis jeg bare ønsker at gøre noget gentagne, minde om, at vi har vis kontrol konstruerer. Lad mig med at flytte det ud af måde gå under kontrol. Lad mig bare gøre en gentagelse, sige, tre gange. Og lad mig nu stjæle nogle af disse puslespilsbrikker. Lad mig snap dette her. Lad mig smide disse væk helt. Og nu har jeg en bedre designet program. Hvorfor? Hvis jeg ønsker at ændre det antal gange Denne kat hoster, alt hvad jeg skal behøver, er at ændre en variabel, eller én værdi, snarere fra tre til fire, eller fem eller seks. Eller jeg kunne gøre noget betinget, selv med mellemrum bar, hvis jeg ville. Så dette er et generelt princip. Når du begynder at kopiere og indsætte kode, uanset om det er i Scratch, eller C, du laver noget forkert, mest sandsynligt. Eller i det mindste, når du har overskredet nogle rimelige antal kopier og pastaer, er du sikkert gør noget forkert. Men ved du hvad? Jeg kan ikke rigtig lide det. Dette er ikke den reneste design. Jeg ville ønske der var et puslespil kaldet brik hoste, fordi så ville jeg ikke nødt til at gennemføre dette selv, den gammeldags måde, ved have sige, og vent - hvad nu hvis de var bare en hoste brik. Tja, jeg kan faktisk gøre det. Lad mig gå under flere blokke, skal du klikke Lav en Block, og nu får jeg denne Vinduet her. Jeg har tænkt mig at kalde denne ting hoste. Jeg har tænkt mig at gå videre og klik på OK. Og nu varsel, får jeg en ny start stykke, der er buet på toppen. Og hvad jeg har tænkt mig at gøre med dette, er jeg vil bare stjæle disse blokke. Jeg har tænkt mig at sætte dem her. Og nu, med disse tre stykker, har jeg implementeret, hvad jeg har tænkt mig at kalde en funktion eller en procedure, eller nogle af du måske kender det som en metode. Små forskelle mellem ordene. Men for nu, lad os bare kalde dette en funktion. Dette er blot en ny brik. Nu er det implementeret på denne måde. Men bemærk, at Scratch har givet os en fysisk repræsentation af denne helhed blokere over her. Så nu kan jeg bare trække det herovre, sige, gentag tre gange, og hvad der kommer til at ske nu, hvor jeg spiller dette script, er kun ét program kører ad gangen. Der er kun én, når grønne flag klikkede. Men at lilla blok kaldet hoste er effektivt fortæller Scratch, hver gang du ser denne brik, der faktisk udføre disse trin, som jeg ske at gennemføre manuelt. Så det er lidt pæn. Men nu, formoder, at jeg besluttede, det gør jeg ikke ønsker, at denne kat bare at hoste. Jeg vil have ham til at være i stand at nyse så godt. Nå, hvordan kan vi gå om gennemføre nyse? Jamen jeg kunne temmelig meget gøre det samme. Jeg kunne gøre en anden blok. Jeg kunne kalde denne nys, skal du klikke på OK. Så herovre jeg kunne faktisk have, lad mig gentage det - og der er, hvor du skal føle du sandsynligvis ikke gør noget den bedste måde. Jeg kunne sige noget lignende, Achoo, i et sekund. Vent et sekund. Nu har jeg en ny blok kaldet nyse. Og ja, der er det. Men også dette skulle begynde at føle - måske ikke den første uge af klasse, men ved den anden - bare lidt overflødig. Det er klart, der er nogle redundans her. Så lad mig foreslå i stedet, at vi forfine denne definition som følger. Lad mig gå op til min fil-menuen. Jeg har ikke tænkt at redde denne version. Jeg har tænkt mig at gå ind i en af mine premade filer her. Og jeg har tænkt mig at gå videre og åbne op hoste 2.. Hovsa der var hoste 2. Lad mig gå videre og åbne op hoste 3, som er denne kilde mappe. Hoste 3 og mærke - oh, jeg fortalte historien i den forkerte rækkefølge. Lad mig komme sig efter denne historie. Den historie, jeg mente at fortælle ender med hoste 4 - der er det. Så hvad nu hvis jeg i stedet definere en større puslespil kaldet stykke definere, sige ord n ​​gange. Nysen er bare, tilsyneladende, i Scratch. Achoo Så vi udtrykke det som et ord, bare fordi det er den begrænsning af programmet. Og en hoste er [hoste], men hoste, C-O-U-G-H. Så det er blot to forskellige ord gør væsentlige, det samme. Så jeg kan faktisk gøre en ny blok som dette. Jeg ikke bruge dette menupunkt før. Men når du klikker Make Block, kan du vælge nogle valgmuligheder. Og du kan sige, at denne blok faktisk tager nogle inputs, ellers kendt som argumenter, eller parametre, så at du kan ændre adfærd din blok. Så hvad jeg gjorde for et øjeblik siden var Jeg kaldte denne blok Sig. Og så sagde jeg, det tager en streng indgang. Og nu mærke til, som standard, det siger string 1.. En streng er bare et ord eller en sætning, til vores formål. Men jeg bare at sætte nogle pladsholdertekst der, ligesom i en hjemmeside, når du ser brugernavn eller adgangskode og derefter forsvinder, når du begynder at skrive. Det er alt, der er. Og nu vil jeg tilføje et nummer input. Og jeg har tænkt mig at kalde denne n - men det er temmelig vilkårlig. Og så bare en etiket, at bare gøre denne blok lidt mere selv forklarende - gange, det er hvad jeg lige gjorde. Og slutresultatet er, at jeg får en blok, der ligner dette. Og nu mærke, jeg bruger en gentagelse blok. Men i stedet for hårde kodning tre, jeg er trække og slippe n derinde, så jeg kan parametrize funktionen. Jeg kan gøre denne funktion at gøre noget et andet antal gange baseret på denne værdi. Og mærke, siger, det er hvad jeg gjorde her hvis jeg trækker ordet, kan jeg sige ikke en hårdt kodet ord, men uanset hvad er gået ind for et sekund. I mellemtiden, hvordan jeg på ny at gennemføre hoste? Jeg stedet definere hoste sige hoste n gange. Så kort sagt, vil jeg gennem denne hurtigt, men den grundlæggende idé er, så snart som du begynder at se i dit program at, vent et øjeblik, jeg har gjort noget helt lignende før, kan jeg faktor nogle fælles funktionalitet? Kan jeg nedbrydes, hvad jeg gør ind i nogle grundlæggende ideer? Det er, hvad vi laver her. Og jeg har stablet disse ting, visuelt, oven på hinanden fordi det er bevis på, at ideen om begyndende med binær, går til ASCII, gør grafiske programmer slags lagdeling mere komplekse ideer på oven på hinanden. Samme idé her. Jeg startede fra bunden, gennemføre hoste, så indså hoste er egentlig bare at sige noget. Så lad mig i stedet at gennemføre begrebet siger noget. Og oven i det, kan jeg gennemføre Achoo eller hoste? Og vi kunne gøre mere sådan varianter stadig. Så fra dette grundprincip, kan vi begynde at gøre Stadig mere komplekse programmer. Lad mig åbne op denne ene. Vi kan faktisk have flere sprites interagere på skærmen på én gang. Hvis jeg går ind i min kilde mappe og Grib en kaldet Threads, minde om, at en tråd er bare virkelig evnen af to scripts til at køre ved siden af side på samme tid. Bemærk nu, har både en fugl sprite og en kat sprite, som begge har deres egne scripts. Så varsel, når jeg klikker på kat, jeg får disse scripts. Når jeg klikker på fuglen, Jeg får disse scripts. Så hver af disse fyre har hans egne programmer. Når jeg nu klikke på den grønne flag, mærke at hvad dette program gør, er har katten, utroligt langsomt, jage fuglen. Men katten har den fordel at have blevet programmeret på en sådan måde at uanset hvor fuglen er, katten går imod ham. Vi kan spille det spil meget hurtigere. Så hvis jeg er på katten, bemærke, at jeg er hjælp, lad os sige flytte et trin. Lad os få ham til at bevæge fem trin på en tid, så fem prikker ad gangen. Lad mig klikker lege. [Løvens ROAR] DAVID MALAN: Okay, nu kan vi virkelig give katten fordel. 10 trin ad gangen. [Løvens ROAR] DAVID MALAN: Okay, så meget hurtigt, det bliver lidt fordel for katten. Men jeg vil vinke min hånd på nogle af detaljerne. Men grunden til, at denne vej er starter lidt anderledes, hver gang er, at jeg gør en smule tilfældighed. Jeg er faktisk peger kat i en anden retning er baseret på, hvor jeg vil have ham til at begynde, så hver gang spillet, eller animation, er en lidt anderledes. Nu, lad mig introducere en andre konstruere her. Så i dette tilfælde havde vi funktioner. Der er også kommer til at være en brik kendt som en matrix eller en liste der giver dig mulighed for at gemme flere værdier indeni en variabel. Vi så tråde, og nu Der er arrangementer. Så her er en hændelse ved hjælp disse to fyre her. Og hvis jeg åbner filen hedder Arrangementer fra dagens eksempler vil vi se et program, der ser lidt ligesom dette. Og nu mærke til denne fyr - så mærke jeg har den blå Muppet klikket - han kun gør følgende. Han har ikke en af ​​dem Grønt Flag puslespilsbrikker. Han har en, når jeg modtager begivenhed - så nogle vilkårlige ord. Jeg har lige skrevet ud begivenhed der - han kommer til at sige, Polo, i to sekunder. Så dem af jer der kender med dette spil måske kender hvor dette foregår. Hvis jeg nu klikke på det orange Muppet, hans program gør dette. Forever, hvis tastaturet mellemrumstasten undertrykt, vil han sige, Marco, i to sekunder på skærmen. Men han er også vil bruge denne amatør blokere kendt som broadcast. Han kommer til at udsende citat citat slut, "begivenhed". I mellemtiden, den blå fyr, tilbagekaldelse, er lytte efter citat citat slut, "begivenhed". Så en eller anden måde, nu kan vi have to sprites interagere. Og når vi kommer til web programmering, senere i udtrykket, vil ligeledes dette være en fordel at have din hjemmeside gøre noget som reaktion på, for Eksempelvis et klik på tastaturet. Så lad mig gå videre og tryk på mellemrumstasten. Orange fyr siger Marco. Blå fyr siger Polo. Hvis jeg gør det igen appelsin fyr siger Marco, blå fyr siger polo. Så lad os tage et skridt videre. Denne gang, vil vi gå, sandsynligvis blot et par minutter mere her. Har vi - bordlampe, kom ned. Du er rigtigt på enden. OK, du kan begge komme op. Vi har bordlamper for alle. Kom. Jeg ved ikke, om vi kan holde denne latterlige gag op al semester, selv om. Okay, kom ned. Og i mellemtiden har vi efter eksempler til at trække op, bare for at fremskynde tingene nu, således at vi have en manifestation fra en anden forgænger jeres hjælp af samme grundlæggende byggesten. Hvad er dit navn? JOHN: John. DAVID MALAN: John. Rart for mig dig. Og? Setz: Setz. DAVID MALAN: Setz, rart at mig, du. John, hvis du gerne vil komme først op, dette er en gammel school spil opkaldt Frogger. Du bruger tastaturet for det så godt. Og målet er at komme på tværs gaden og vand. [Frogger musik og lyd PLAYS] DAVID MALAN: Undskyld, ingen bordlampe til dig i dag. Okay, Setz, ville du gerne komme videre op? Okay, lad os gøre det igen. Setz: Har jeg brug pilene? DAVID MALAN: Bare piletasterne. Op, ned, venstre, højre. [Frogger musik og lyd PLAYS] DAVID MALAN: Vi kalder dem trøstepræmier i dag, da meget godt klaret. Her for jer begge, John og Setz. Tillykke, okay. Så igen, som dette spil spiller, tænke over, hvad der foregår? Én, der er klart en masse bevægelse. Men vi har set, hvordan, med katten og fugl eksempel hvordan du kan gøre illusion af bevægelse ved blot at flytte nogle antal pixels igen og igen. Og hvis du har en evigt blok, kunne du have disse biler gør dette for evigt. Vi har evnen til at har nogle tilfældighed. Så dette spil ikke behøver at være nøjagtig den samme hver gang. Disse logs, disse biler, kan starte på lidt forskellige tidspunkter, således at Spillet i sig selv er mere interessant med hvert spil. Og I mellemtiden har vi set muligheden til at lytte til den plads bar. Men det er klart, i bunden, kan du også lytte til op, ned, venstre, højre og virkelig en tast på tastaturet. Og du kan også gøre nogle andre ting. Lad mig gå videre og gå tilbage til web-versionen. Lad mig gå ind i vores kollektion eksempler her. Og under Mit studie, hvilken video er det væsentlige, en mappe på scratch.mit.edu. Vi har web versioner af alle disse projekter. Og lad os se om jeg kan få min computer til at samarbejde her. Dette er skrevet af en af ​​vores venner på MIT, kaldet Flyt Butterfly. Og når dette åbner op, dette er kommer til rent faktisk at bruge mere af min computers hardware. Scratch sker for at blive gennemført med Flash. Flash kan tale med dit webcam, hvis du har en. Så hvis jeg går videre og fuld skærm dette her, så klik på den grønne flag, varsel at Flash sikkerhed budskab siger, vil du gør det muligt at bruge mit webcam? Normalt bør du nok sige Afvis. Men i dette tilfælde, vil vi sige tillade. Så jeg har tænkt mig at fortælle Chrome at tillade det så godt. Og nu, i et øjeblik, du ser mig, jep, mig. Og hvis min hånd går op - I got ikke flytte min hoved på samme tid. Der er også en refleksion på skærmen. Kom, der går vi - du kan flytte det på skærmen, da der er også puslespilsbrikker - oh, du vide, hvad det er, det er fordi du også se projektoren skærmen bag mig. Så vi har en lidt uendelig ting foregår dér. Okay, så jeg vil spille hernede. Der går vi. Så der er også en brik, der siger, når du ser bevægelse beneath en af ​​sprites, kan du få det gå op, ned, venstre, højre eller lignende. Så vi har lidt af virtual reality foregår her så godt, alt sammen inden for rammerne af min browser, bare her ved hjælp mit webcam. Så hvad er så i horisonten. Det første problem sæt, som du kan se, eller hjemmesiden vil gå online senere aften på cs50.net, er temmelig meget kommer til at være åben sluttede. Og gennemføre en Scratch projekt af interesse for dig, et spil, et interaktion, noget kunstnerisk og udfordre dig selv til at bruge et vilkårligt antal af disse puslespilsbrikker. Og det kan enten være interaktive på denne måde. Eller det kan være noget mere bevidst lavet til at fortælle en historie. Og ja, det er hvor vi ender off i dag, med en sidste eksempel. Lad mig gå ind i Scratch lokalt. Lad mig gå videre og åbne denne og afspille en sidste program skrevet af en af Deres forgængere, nemlig at man her. Godt, hæve lydstyrken for denne ene. [MUSIC Playing] Fortæller: På det næste CS50, David inviterer en frivillig på scenen. DAVID MALAN: Til denne demonstration, vi kommer til at bruge en frivillig. Kunne du tænke dig at komme ned? Hvad er dit navn? Bevæger sig på.