SPEAKER: Jeg er [uhørlig]. Og jeg er en senior på Leverett House. Jeg studerer informatikk, og jeg er en TF for CS50. Som førsteårsstudent, jeg visste ikke engang har en bærbar PC eller en smarttelefon. Jeg hadde ingen erfaring med programmering. CS50 var den mest minneverdige kurs som Jeg tok på Harvard fordi det var en kamp, ​​men det var en virkelig fun sliter på samme tid. Og jeg har gjort mye fantastisk, permanent venner, og jeg har lært mye av virkelig relevant kompetanse. Jeg er bare så glad for at jeg ikke la min mangel på bakgrunn være en unnskyldning for meg ikke ta CS50. Jeg er [uhørlig]. Jeg er en senior på Leverett Hus, klasse av 2014. Og jeg tok CS50. DAVID MALAN: Så dette er CS50. Dette er slutten av uken null. Og husker hvor vi startet den siste tiden, var med disse lampene, som var så populært at vi gikk og kjøpte litt mer i dag. Så jeg tror dette vil være våre ting i år - bordlamper hvis du kommer opp på scenen, i hvert fall inntil vi kjører ut. Men vi brukte disse tilbakekalling, for å introdusere det grunnleggende om representasjon av data. Vi trengte måte å starte representerer informasjon inne i en datamaskin. Og den enkleste måten å gjøre det var med én ingrediens, elektrisitet. Og den enkleste ting du kan gjøre med strøm er å slå den på og den av. La elektronene flyter eller ikke. Og ved hjelp av disse to grunnleggende tilstander, off og på, eller falsk og ekte, eller null og en, begynte vi å se at vi kunne bygge opp, i dette tilfellet, med lyset pærer, flere tall enn bare null og én. Vi telles så høyt som syv, for eksempel, siste gang. Men alt vi trenger å gjøre er å fortsette å kaste flere og flere lyspærer at problem og, egentlig, kan vi representere et tall som vi kanskje muligens. Vel, overført vi raskt deretter på Onsdag til denne byte av frivillige. 8 bits er det vi vanligvis kaller en byte, så her hadde vi åtte frivillige på onsdag som til sammen var som representerer åtte bits. Og når hendene gikk opp, var de ett. Og når deres hender var ned, var det et null. Og vi hadde disse folkene komme opp på scenen hvorfor? Hva vi kan gjøre med denne sekvens av biter? Å skape et alfabet. Vi var i stand til å bygge på toppen av det forrige leksjon lært og faktisk begynne å gjøre mer interessant informasjon som er minst mer kjent for oss mennesker. Og dette kommer til å være et tilbakevendende tema gjennom 50, men også datamaskinen vitenskap mer generelt, denne ide lagdeling, hvor, ved enden av den dag, hvis du virkelig startet grunnleggende med en datamaskin, ja, det er nuller og enere. Og under at det er bare elektrisitet. Men vi svært raskt begynne å ta dem lavt nivå detaljer for gitt og begynner å lag på toppen av tidligere jobbet gjort slik at vi til slutt, etter slutten av semesteret og, egentlig, mer generelt som dataforskere og programmerere, kan gjøre noen virkelig kraftige ting ved å utnytte arbeid at vi selv har gjort og også stå på skuldrene til andre. Nå er vi raskt overført på onsdag fra bare måtte representerer informasjon til å ville å gjøre noe med det. Så hva gjorde vi definere en algoritme som? En rekke instruksjoner. Så det er en rekke instruksjoner, en antall trinn som du, et menneske, eller en datamaskin, mere typisk ville utføre den ene etter den annen i rekkefølgen å oppnå noen mål. Og vi hadde et par mål forrige gang, hvorav den ene var å telle personer i rommet. Og et annet slikt eksempel var å finne Mike Smith i en telefonkatalog. Så du husker kanskje at jeg rev en telefon bok i halvparten mot dette ende opp finne Mike Smith. Hensikten med den visuelle var til demonstrere, igjen, at vi var bokstavelig talt rive dette problemet i halvparten, i to, i to, og veldig raskt kommer fra som 1000 sider til bare én enkelt side. De av dere som gikk glipp av dette på Onsdag, jeg trodde vi skulle spille tilbake noen bilder av hva du gikk glipp av. La oss ta en titt. [VIDEOAVSPILLING] -Det vi går. 1500 sider, Nice clean linje, legitim tåre. [END VIDEOAVSPILLING] DAVID MALAN: Så det var onsdag. Vi overgangen, men på onsdag nå til å ville representere algoritmer på noen noe standard måte, ikke bare beskriver dem verbalt, men prøver å uttrykke dem skriftlig eller på en dataskjerm, slik at vi kunne begynne å forbedre og modifisere dem, og, til slutt, faktisk analysere hvor riktig eller hvor fort de var. Så vi innførte dette begrepet av pseudokode, som i lekmann vilkår, er hva? OK, ord. La oss gå litt dypere enn det. Engelsk, sikker, er bare mot hva end? Ord som å opprette eller å representere algoritmer. Så det er ingen språk kjent som pseudokode i verden. Det er bare at du, på engelsk, eller uansett talespråk er, så bruk en slags overfladisk notasjon å formidle en idé veldig konsist. Men vi får se det, sikkert med en Norsk pseudokode, og det viser seg de fleste programmeringsspråk selv er avledet av engelsk i seg selv, vi vil finne at det er noen standard måter å representere pseudokode og også programmeringskode. Så når du begynner å se selv de enkleste eksempler i dag, innser disse samme mønstrene vil gjenta seg neste uke. Så pseudokode var en slags av språk som likner et programmeringsspråk. Og det første eksempelet vi så visuelt skrevet ned var denne. Det var bare en tre trinns program, den målet var å telle antallet av mennesker i en hybel for at video på onsdag. Men det var noen interessante aspekter av denne enkleste programmet. Og dette vil være tilbakevendende tema. Så for de som er ukjent med dette, en, innførte vi en variabel. Og sannsynligvis alle i dette rommet er kjent med en variabel i sammenheng med algebra. Men her i programmering, variabler er, en, kan bli heter noe vi ønsker. Vi har brukt n som en teller. Men vi kunne bruke ordet teller, eller, som du ser, de fleste enhver setning som du kanskje har lyst så lenge det er beskrivende, men det er egentlig bare en beholderen. Det er en del av minne, et antall biter, og det varierer fra datamaskinen, hvordan mange biter det er at komponere den variabelen. Men vi kan sette verdier i det. Så langt har vi bare sette tall. Men vi kan sette faktiske ord. Vi kan sette avsnitt. Vi kan sette bilder - noe, egentlig, kan vi representere med nuller og enere, kan vi sette i dette høyere nivået forestillingen av en variabel. Så ganske rett frem der. Og det er én. Men vi svært raskt flyttet fra linjen en å faktisk gjøre noe som variabelen. Og i linje tre, oppdaterte vi N. Vi økes N. Og vi kunne skrive denne en rekke måter. Men kanskje det mest åpenbare er bare for å si, sett N lik hva N er pluss en. Så det var vår tilvekst. Samtidig var det en løkke. Og dette også, er trolig ganske intuitivt. En løkke er bare noe i et program det skjer igjen og igjen, noen slags syklus. Og denne nøkkelen setning her, for hver, faktisk svært vanlig i det meste programmeringsspråk, inkludert de vi får se på kurset. Hver gang du ser ordet for, det typisk formidler ideen om at en loop, noe syklisk, er i ferd med å skje. Men det er verdt å merke seg en andre syntaktisk detalj. Det faktum at det tredje linje er faktisk innrykket av å ha truffet space bar noen ganger er bevisst. Fordi menneskelig konvensjonen er slik at, når du gjør noe nytt og igjen, i en sløyfe, som har begynt på linje to, du rykke noe som tilhørte til at løkken bare for å gjøre det klart at det er tre linjer, og ikke, for eksempel, linje fire eller fem, hvis det var linjer for eller fem, som er En del av det looper. Så dette enkle innrykk formidler at grunnleggende ideen. Så vi søkte denne algoritmen, nå, til et par eksempler. Og også dette enkle eksemplet i den virkelige verden. Men det kommer til å være representative for hvordan du vil gå om testing eier stadig mer komplekse programmer. Du prøver noen scenarier, noen representanter innganger, og se om du få de ønskede utganger. Så dette eksempelet hadde to personer sitter i hybel. På venstre er det samme pseudo-kode. Og dette er et skjermbilde av de aller Siste trinn i anvendelsen av denne Algoritmen til disse innganger, hvor det var to personer i rommet og, husker, som vi går gjennom linjene ett, og to og tre, og to og tre og gjort - innen utgangen av denne algoritmen, hadde vi faktisk telte to karer som er i rommet. Så da vi prøvde et annet eksempel. Og vi sa hva om det er null personer i rommet? Er denne koden fortsatt er riktig? Og det var faktisk. Det bare skjer, slik at linje to og, således, linje eller tre ikke kommer til å utføre. De kommer ikke til å skje i det hele tatt fordi de er bare ikke til anvendelse dersom det er null personer i rommet. Men ikke en stor avtale. Linje en initialisert N til null, så selv om bare én linje av denne Programmet avsluttes faktisk opp med å bli nyttig, det gir fortsatt det riktige svaret, som Knappene er orange null ved bunnen. Men da vi besluttet at det var slag av en dum algoritme. Det var ganske treg. Sannelig, det kan jeg gjøre to, fire, seks, åtte, ti, når telle mennesker i et rom. Så vi forskjøvet algoritmen, den pseudokode, å si, nå på linje to, for hvert par av mennesker i rommet, fortsett til, på linje tre, tilvekst i av to på hver iterasjon. Så det ville ha jobbet her i denne par personer i rommet. Men så, hvis du begynner å tenke på dette, og det tar ikke lang tid å realisere, vent litt dette er kommer til å bryte, bryter det på hva enkel sak? Hvis det er tre personer i rommet, eller, mer generelt, når det er en odde antall personer i rom, inkludert en. Vi ville savne den personen her fordi det ikke er noen slike par. Så vi raskt løses ved stedet introdusere det ekstra programmering konstruerer til pseudo-kode. Så en tilstand, kalte vi det, eller en gren. Og det er ment å formidle, Visuelt, ide av gren, en gaffel i veien Her kan du enten gjøre dette eller, kanskje, noe annet. Og ja, tar vi dette problemet ved legge linje 4, ved å si, egentlig, på Helt til slutt, hvis en person gjenstår, så gå videre og telle dem spesielle. Så du liksom spesielt tilfelle dem, så å snakke, slik at vi nå kan håndtere både et likt antall mennesker og et odde antall mennesker. Nå er det en rekke måter vi kunne ha uttrykt dette. Og ærlig talt, jeg kunne har vært enda mer nit kresen når det kom til mitt valg av Engelsk for pseudokode. Men minst ånd ideen formidles. Hvis du levert denne koden til en venn som ikke er i CS, eller har aldri tatt CS, oddsen er at de kunne finne ut, gitt tre personer i rommet, hvordan telle dem basert på disse instruksjonene. Og det er alt egentlig vi ønsker å oppnå med pseudokode, liksom standardisere hvordan vi skal om som representerer ideer, slik at vi kan begynne å gjøre mer komplisert ting fortsatt. Så det fører oss da, i dag, til selve koden. Vi begynner å programmere i dag, om enn i et vennlig miljø. Og da vi overgangen svært raskt å en mer uforståelige syntaks, men en som du vil se er fundamentalt den samme som ideene vil se manifestert med denne andre språk i dag. Det er bare kommer til å se litt annerledes. Så heller enn å bare ringe denne koden, jeg kommer til å være litt mer presis og si fra nå, når du skriver en programmet, du skriver kildekoden. Det er typen som pseudokode. Men vi vil se det er ikke slags løs når det gjelder å velge de ordene som du bruker. Når programmering i et språk, må du å bruke ordene, fraser, syntaksen, at andre mennesker har bestemt representere det aktuelle språket. Så pseudocodes er opp til deg. En faktisk programmeringsspråk som C, som vi vil til slutt se, er standardisert av andre mennesker. Så hvordan går vi om å skrive noen kildekoden? Vel jeg kommer til å gå videre og gjøre dette. Jeg kommer til å gå videre og åpne opp et vindu her. Mer om dette i neste uke. Men dette er en enhet som kalles den CS50 apparatet. Jeg kjører et stykke programvare på min Mac, men du kan gjøre det samme på en Windows-maskin, er at det å gi meg illusjonen kjører en annen operativsystemet helt rett her i et vindu på min Mac. Jeg har bare full vist det slik at du ikke faktisk se Mac OS akkurat nå. Dette er et operativsystem kalt Linux. Det er veldig populært. Det er veldig fort. Det er veldig fri, noe som har gjort det svært overbevisende, spesielt i kommersielle verden. Og mer om det mot slutten av semester når vi bruker Linux ganske mye for web programmering og hosting av faktiske nettsteder og prosjekter. Så nå, bare vet at dette er en stasjonær som er ment å se vagt kjent for Windows og Mac OS. Den har bare noen forskjellige navn og ikoner for ting. Men dette er den såkalte CS50 apparat, en virtuell maskin som, starter neste uke, vil dere kjøre innsiden av et vindu på din egen Mac eller PC. For i dag, jeg kommer til å åpne opp den enkleste av programmer. Det kalles gedit. Og dette er bare en grafisk editor. Det er typen som Microsoft Word, men enklere. Det er typen som tekst edit eller notepad. Det er bare et veldig enkelt program med som å skrive ord på skjermen. Det bare så hva skjer at hvis jeg sparer filer som jeg lager når dette programmet i en spesiell forlengelse som. c, i stedet av. doc, eller. xls, eller hva du er kjent med, kan jeg faktisk lage programmer som bruker selv denne enkle teksteditor. Så la meg gjøre det. La meg gå videre og lagre denne fil først som hello.c. Og igjen, dette brukergrensesnittet vil bli kjent med deg raskt. Men for nå er jeg bare å skrive i et filnavn. Jeg kommer til å spare det inn i min John Harvard hjemmeområde. Og nå har jeg denne kategorien som indikerer Jeg er faktisk redigering en fil som heter hello.c. Så ingenting så interessant ennå. Og nå kommer det til å bli ganske kryptisk. Jeg kommer til å zoome inn, bare så det er mer synlig. Og jeg kommer til å begynne å skrive omfatte stdio.h, int main, ugyldig, åpen krøllete spenne, en, to, tre, fire plasser av innrykk, print f, for print noe formatert, sitat unquote, "Hello, World" backslash, n, nær sitat, lukket parentes, semikolon skriv backspace, backspace, backspace, backspace, lukket klammeparentes - Jeg har programmert. Greit, så dette er en super enkel program, egentlig, programmet som noen starter programmering med. Og alt den gjør, for all sin kompleksitet, er skrive ut på skjermen, gjett hva? Hei verden. Men det er ikke nok bare å skrive et program. Så dette er koden. Dette er kildekoden i et språk som heter c. Den er lagret for tiden i en fil som heter hello.c. Nå ser på bunnen av skjermen her. Mer om dette, igjen, i ukene som kommer. Men dette er hva vi kaller en terminal vindu. Det er en blinkende, svart og hvit prompt. Det er liksom en gammel skole grensesnitt til en datamaskin som vanligvis ikke bruke en mus eller andre grafiske elementer. Den bruker bare tastaturet. Og jeg kan skrive kommandoer på Dette blinker hurtig. Og for dagens formål, jeg er bare kommer til å skrive følgende - gjøre hallo. Og det programmet, gjør, er bare en program som, i den virkelige verden disse dager, ville vi dobbeltklikker på. Men i dette grensesnittet for i dag, er vi kommer til å skrive sitt navn på dette spørsmålet. gjøre hallo er bokstavelig talt skal gjør meg et program som heter hei. Og det kommer til å gjøre det ved å se for en fil, bare ved standard, kalt hello.c. Det kommer til å anta jeg vil ha en C-program etter arten av hvordan denne maskinen er konfigurert. Så jeg gå videre og trykk enter. Jeg ser noen kryptiske utgang, men dette vil bli altfor kjent før lenge. Dette skjedde til å kjøre en kompilator, mer om det i et øyeblikk, kalt Clang. Men nå har jeg fått bare en annen blinkende be. Og jeg kan gå videre nå og skriver dot slash, for uinteressante grunner vi vil komme tilbake til neste uke - hallo. Så alt av dette forsøk hittil bare for å skrive de enkleste programmene som, så snart jeg trykker på Enter, gjør det. Så jeg har skrevet min første program. Så jeg bevisst poking moro på dette veldig enkelt program for et par grunner. One, er det vanskelig å bli begeistret om å ta en klasse dersom Dette er slutten spillet. Men mer enn det, det er en masse distraksjoner her oppe. Den første gangen du lærer å programmere, for de av dere mindre komfortable, og selv jeg, tilbake i dag, når jeg først så noe som dette - du kan slags av figuren at, greit, dette er i en print hello world. Men det er så mye distraksjon. Det er så mye syntaks på skjermen at det blir i veien for meget enkle, ellers enkel, ideer. Så hva vi skal gjøre i dag er at vi er kommer til å sette til side C og komme tilbake til det på mandag. Og vi kommer til å bruke en grafisk programmeringsspråk som heter Scratch. Dette er et programmeringsspråk, som jeg hentydet til onsdag, som kommer å tillate oss å gjøre det samme type ting men snu det blinde øyet til, for i dag, til de klammeparentes, parentes, de semikolon, og alle disse dumme distraksjoner som kommer i veien, i denne første dagen, for noen grunnleggende, ganske interessante ideer. Så mot dette målet, jeg kommer til å gå tilbake til skrivebordet mitt over her og introdusere deg til alternativ til det programmet, som kommer til å se en litt noe lys dette. Det er hvordan vi skal gjennomføre det samme programmet i dag - to puslespill stykker som, når den låste og klikket på, vil si til verden, hello world. Så la oss faktisk gå dit. Så jeg kommer til å gå foran og åpne en nettside kalt scratch.mit.edu. Og dette vil føre meg til denne nettsiden her. På forhånd har jeg logget inn i dette hjemmeside og de første problemene som vil lede deg gjennom noen av disse trinnene. Jeg kommer til å gå videre og klikk på min scratch mappe her. Og dette kommer til å vise meg noen prosjekter som jeg har faktisk laget på forhånd. Og det viser seg at dette grafisk programmeringsspråk ikke bare kommer å la oss program ved å dra og slippe disse brikkene, du ikke engang trenger spesiell programvare. Det er alle integrert i en nettleser så at du kan gjøre dette, i teorien, på datamaskinene akkurat nå, som noen av dere kan godt være, uten engang å måtte programvare som CS50 apparatet, som vil komme neste uke. Så jeg kommer til å gå opp mot krysset her og klikk på Opprett. Og i et øyeblikk jeg kommer til å få en blank skjermen via der jeg kan begynne programmering i denne grafiske programmering miljø. Men denne gangen kommer det til å være mye, mye enklere å faktisk gjøre det. Så i løpet av et øyeblikk, når Wi-Fi samarbeider, har vi nå denne skjermen. Så en rask verbal tur, men jeg tør si, sikkert når du dykke inn i første problemet sett, vil du finner alt dette veldig tilgjengelig og ganske intuitivt. Men la oss male et mentalt bilde for bare et øyeblikk. Så under denne meldingen sier redning endringer, er det om å se bunnen av. Dette er en sprite. Det er et tegn. Og han bor på det vi vil kalle en scene, denne store hvite rektangelet på som han kan flytte opp, ned, til venstre, riktig og gjøre, egentlig, andre typer handlinger. I mellomtiden, i midten av denne brukeren grensesnitt, har vi en hel haug med puslebiter. Og du vil se at de sier ting som flytte 10 trinn, viste 15 grader, punkt i en bestemt retning. Men det er kategorier av blokker opp her også. Så hvis jeg går til utseende, vil du se at det er andre brikkene som tilsynelatende vil fortelle dette cit til si hei, å tenke, å vise seg, skjule seg. Hvis jeg går ned til Lyder, viser det seg det er måter å spille høres ut som mjaue, for å stoppe alle lyder, for å spille en tromme. Så, lang historie kort, det er en hel haug med puslespillbiter som lar deg å fortelle denne katten, eller en rekke andre tegn, hva du skal gjøre. Men for å gjøre alt dette skje deg trenger for å starte programmering. Og denne store hvite boksen, eller grå boks, på høyre side, dette er hvor Jeg skal faktisk dra og slippe disse brikkene. Det er min blank tekst vindu tilsvarende. Så jeg kommer til å gå videre og klikk Kontroll i midten. Eller rettere sagt, la meg starte opp under Events. Under Hendelser benk, vil du merke en få ting som er bevisst i bue på toppen på en slik måte at de sannsynligvis ikke sperre på toppen av brikkene. Og det er fordi de Demark starten av et program, starten på en script, så å si. Så hvis jeg går videre og dra, når grønn flagg klikket over her, og da jeg vil denne katten å si noe først. Så jeg kommer til å gå under det ser panel. Og jeg kommer til å gå videre og ta tak i si hei blokk, og dra og slipp, og la gå slik at den automatisk interlocks der. Og så merker jeg kan klikk på teksten. Og jeg kan overstyre det å være mer spesifikke liker, si, hallo verden. Og nå har vi programmet som jeg hevder er ekvivalent til den mye mer uforståelige program jeg implementert i C for et øyeblikk siden. Hvis jeg går over nå til venstre side, merker det er en stor stoppskilt og et stort grønt flagg. La meg zoome inn for klarhet. Og når jeg nå klikker på denne grønne flagget, du kan sikkert gjette hva dette først Programmet er nå kommer til å gjøre. Så der også, vi programmerer, men vi faktisk ikke å bli sugd ned i noen av disse syntaktiske, minutt detaljer. Men la oss prøve noe litt mer interessant. La meg gå inn i min Scratch mappe her. Og faktisk, la meg så la meg åpne opp et eget program her for bare en øyeblikk, Maksimer dette vinduet File Open, og jeg kommer til å gå inn i dagens kilde-katalog. Som alltid, finner du, i dag og videre, at alle dagens eksempler er tilgjengelige innsiden av kursets hjemmeside. Og jeg kommer til å gå videre her og plukke opp litt noe annet. Denne her, for hvilken Jeg trenger en frivillig. Hvem ønsker en bordlampe i dag? OK, hva med noen litt - er du på slutten? Kom ned. Nå ønsker du å delta, eller bare si starte med bordlampe? VANESSA: [uhørlig]. DAVID MALAN: OK. Utmerket, hva du heter? Vanessa? David. Hyggelig å treffe deg. Så kom igjen opp og Vanessas kommer å ta kontroll over min tastaturet for bare et øyeblikk. Og hva jeg har gjort her, bare for tids skyld, som jeg har innsett Wi-Fi var litt treg, Scratch, den programmering miljø som vi er bruker, kan også lastes ned og kjøre på din lokale maskin. Så det jeg gjorde i forkant av foredraget, i tilfelle det skjer, er jeg lastet ned alle filene vi er i ferd med å spille med slik at de kan kjøres litt mer raskt rett her på min laptop. Så det er derfor nå jeg ser en Mac-spesifikke grensesnitt. Så jeg kommer til å gå videre og åpne opp denne. Jeg kommer til å gå videre nå og full skjerm vinduet. Og som du ser, kan vi meget raskt, som denne elev gjorde, en av dine forgjengere, gå fra hello world til en mye mer overbevisende programmet. Så her er instruksjonene. Oh, og vi har en annen ting. Jeg trodde det ville være morsomt, siden, normalt, vi skal filme kameraer på denne måten. Jeg trodde det ville være morsomt hvis, Vanessa, vi kunne se verden gjennom dine øyne. Så her har vi noen Google Glass. [Forbauset gisper] DAVID MALAN: Vi vil bare være å gi unna bordlamper i dag. [Latter] Så la meg cue opp dette. Greit, så berører dette. OK, Glass, spille inn en video. Greit, Vanessa? Nå, som en side som har fått noe å gjøre med Scratch, hvis du ser litt opp og til høyre, vil du se bokstavelig glass, og du bør se litt rektangulært vindu. Du skal se alle dine klassekamerater blir filmet akkurat nå? Ja. VANESSA: Ja. DAVID MALAN: OK. Så det er fint. Vi vil slippe dette opptaket senere. For nå, vend oppmerksomheten til skjermen her. Og hva din forgjenger har gjort er sette noen instruksjoner på skjermen bare ved hjelp av en maling program. Så du kommer til, i et øyeblikk, Trykk space for å begynne. Og så noen brikkene kommer å begynne å bevege seg oppover på skjermen. Og du ønsker å treffe piltastene, bare som i det virkelige DDR, i samsvar med ting kø med disse pilene. VANESSA: OK. DAVID MALAN: Du har spille dette før. VANESSA: Yeah. DAVID MALAN: All right, Vanessa, gå videre og ta det bort. [MUSIC - Kayne WEST, "sterkere"] [APPLAUSE] DAVID MALAN: Så la oss nå ta et skritt fra det. Så klart, det er sluttspillet. Slutten spillet er ikke hello world. Men du trenger ikke å nødvendigvis gjøre ting som er så interaktiv. Du kan også gjøre animasjon. Så for eksempel, en annen av din etterfølgere gjorde dette programmet her, som forteller en historie mer enn det gjennomført et spill. Så la meg gå videre og åpne opp her en program i vår samme kilde katalog fra i dag. Dette en samtale, og la oss starte med en cookie kjærlighetshistorie. Og ikke å gjøre dette for akademisk, men, som du ser denne, tror til selv hvilke av de enkle programmering konsepter vi har snakket om så langt - variabler, og løkker og betingelser, gjorde din forgjenger sannsynligvis bruke bare å gjennomføre noen av visualiseringer. Du ser her. Så jeg gir deg En cookie kjærlighetshistorie. [MUSIC - GREEN DAY, "FERIE"] [CRASH] [MUSIC - skilpadder, "Happy Together"] DAVID MALAN: All right, så det, vi hadde en cookie kjærlighetshistorie. Men selv der - [APPLAUSE] DAVID MALAN: All right, selv der, tenke på, som de hjertene gikk fra bunnen til toppen av skjermen, det var faktisk litt av tilfeldigheten skjer. Og ja, vi får se at selv i enkleste av miljøer, som Scratch, som i C, kan du generere tilfeldige tall, eller illusjonen av tilfeldige tall, slik at spillet er en litt mer interessant enn det kanskje være hvis du hadde absolutt hardkodet alt. I bevegelsen som du ser, er det det er noen form for respons. Så snart pepperkaker mann berører pepperkaker kvinne, hun ser ut til å bevege seg bort. Og så, ja, du kan implementere i de fleste programmeringsspråk, har tanken av hendelser, der hvis en hånd berører den annen side, som kan utløse noen av kildekoden til faktisk utføre. Du kan lytte til en slik ting på skjermen. Så la oss ta en rask tur, da, noen av de byggesteinene vi kan bruke å oppnå noen av disse målene. Så her er hva vi vil heretter kalle en uttalelse. En uttalelse skjer for å være lilla i Scratch, litt noe sånt som dette, men det er vilkårlig. En uttalelse er bare et puslespill brikke eller, mer generelt, en instruksjon, som vil maskinen gjøre noe, en uttalelse. Så her er en enkel prøve. Si hei verden. En annen kan vente ett sekund. Så dette puslespill brikke, som støttes i Scratch, vil vi la tegn pause for noen antall sekunder. Også dette er bare en uttalelse. Her neste, har vi en annen mer interessant, spille lyd mjaue, og den lille pilen betyr at i Scratch, Dette er en rullegardinmeny. Slik at du kan importere lyder. Du kan ta opp lyder og gjøre andre morsomme ting i bunnen av. Og det også, men på slutten av dagen, er bare en uttalelse. Men nå skal vi innføre en mer interessant stykke, som er kjent som en Boolsk uttrykk. Capital B, oppkalt etter en kar ved navn Bool. Og en boolsk uttrykk er bare en puslespill brikke eller, mer generelt, en stykke informasjon som er enten sant eller usant - én eller null, ja eller nei. Så det er bare en av dem to motpoler. Så et slikt Boolsk uttrykk i verden av Scratch ser slik ut blå puslespill brikke. Og det stiller et spørsmål, mus ned, og som enten kan være, av Selvfølgelig, sant eller usant. Så med dette puslespillet brikke i Scratch, vel, vil du være i stand til å oppdage om en puslespillet om musen er, faktisk, å være holdes nede ved det menneskelige vekselvirkende med programmet. Denne er en litt mer abstrakt, men de to hvite bokser er bare for tall. Så du kan gjøre ting som dette rekke mindre enn den andre? Og hvis så, vil Scratch oppføre ene eller den andre. Denne er en litt mer grafisk. Det er hvis sprite, hvis katten, for eksempel, er faktisk å berøre musepekeren. Så hvis den lille pilen hode er hovering over katten, da dette puslespill brikke vil vurdere å true. Det vil være sant, i så fall, hvis du bruke denne boolsk uttrykk, som vi vil se i et øyeblikk, i en gren, kan du enten gjøre dette, eller du kan gjøre det, mye som vi hadde en tilstand som kontrolleres, er det enda en siste person i rommet? I så fall legge en. Ellers, ikke bekymre deg videre. Så en boolsk uttrykk kan også være and-ed sammen eller or-ed sammen. Så du kan kombinere boolske uttrykk og si dette, og dette må være sant for hele greia til å være sant. Og her er en mer reell verden eksempel. Hvis du har brukt CS50 kurs for å gjøre kurset shopping, disse boksene der, der hvis du sjekke at boksen ved siden av til kurs, vil det si, ja, bare vise meg emner som Q verdien er 4,5 eller høyere. Hvis du fjerner den, nei, ikke gjør det bekymre deg for det. Eller tilsvarende, på høyre side, virker ikke Konflikt med kurs jeg tar, det er enten sant eller usant. Det er bare et boolsk uttrykk. Så hele denne tiden når du har brukt nettsteder med boksene, du er bare veksling tilsvarer en boolsk uttrykk og på. Så i hvilken form bruker du disse? Vel, i Scratch, vil vi se på et øyeblikk at det er forhold som se slik ut. Og det er slags fornuftig fordi mye som i pseudokode, innrykket vi den slags U-formede biter i et puslespill, mener at noe på innsiden av at U er kommer til å utføre, eller ikke, avhengig av hvor den er. Så hvis boolsk uttrykk, deretter hva som er inni vil bli henrettet. Samtidig er det en hvis / annet blokk. Så hvis du ønsker en gren som går denne måten eller på den, gir Scratch oss det. Og ved denne logikken, nå, selv om det puslespill brikke er helt klart for lite å kile noe annet innsiden av den, scratch brikkene, de er bare kommer til å vokse. Når du drar og slipper over noe, det vil bare vokse til å passe uansett hva det er du prøver å gjøre. Så vi kan ta to av disse tingene og lage en treveis gaffel i veien så at du enten gjøre dette, eller det, eller denne annen ting bare ved å hekke dem på den måten. Selvfølgelig, hvis du gjøre det også mye, det begynner å bli stygt. Men på det punktet, er du faktisk sannsynligvis ikke programmering veldig godt. Og slik at det vil være periodisk tema også at av stil. Akkurat hvor godt egentlig formatere koden? Eller hvor godt kan du designe din kode? Men mer om det i fremtiden. Og nå har vi sløyfer. Det er en fin evig løkke i Scratch som betyr bokstavelig talt at - gjøre hva er inni denne igjen, og igjen og igjen. Du kan være mer konkret og si, gjøre følgende ting 10 ganger. Du kan også bruke variabler. Du kan komme opp med noen navn i lite falle ned og si: gi meg en variabel kalt n og sette det lik noen verdi. Og så kan du ha funksjoner. Men mer om de i bare et øyeblikk. La meg gå tilbake til min Skrap grensesnitt. Og la meg gå videre denne gangen. Og la oss gå videre og åpne opp, la oss si, et eksempel fra - som er litt mer interessant. La meg gå videre, og, faktisk, la meg bare gjøre det selv. Jeg trenger ikke å åpne denne. La meg gå til File, New. Jeg kommer til å gå til Events. Jeg kommer til å gå til når grønt flagg klikket, og jeg kommer til å gå til Sound. Og jeg kommer til å dra og slippe dette puslespill brikke, spille av lyd mjaue. Det låsene sammen. Og nå, hvis jeg klikker på den grønne flagg - [MEOW SOUND] DAVID MALAN: Adorable. OK, så nå la oss gjøre noe litt mer logisk bare for å vise at vi kan, for nå. Jeg kommer til å løsne dette fra den fyren. Jeg kommer til å gå til kontroll. Og jeg kommer til å ta en betingelse. Så hvis noe da. Så det er slik det ser ut der. Så jeg trenger en boolsk uttrykk. Og la meg gå videre og si: la meg gå til operatører. Jeg kommer til å gjøre noe litt mathy, bare for morro skyld. Jeg kommer til å gå inn her og si, hvis noe er mindre enn noe annet, gå videre og gjøre noe. Så nå vet du hva, en tilfeldig blokk. Så legg merke til hvordan, hvis jeg sveve over dette ting her, som vil smette inn der. Så nå, varsel, jeg begynner å gjøre noe som allerede er mer logisk interessant. Dersom et tilfeldig tall mellom 1 og 10 er mindre enn, la oss si seks. Hvis jeg velger seks, som i hovedsak del, gjør følgende med 50% sannsynlighet. Det er som å flippe en mynt. Nå kan jeg gjøre noe betinget. Og at noe jeg kommer å gjøre er å spille av lyden. Så nå, når jeg klikker på skjermen flagg, er det som å kaste en mynt. [MEOW SOUND] DAVID MALAN: Det var hoder eller whatnot der. La oss gjøre det igjen. [MEOW SOUND] DAVID MALAN: Heads igjen. [MEOW SOUND] DAVID MALAN: Heads igjen. Phew, OK. Haler den tiden. Så 50% av tiden, hvis vi gjør dette uendelig lang, vil vi få 50% meows og 50% stillhet. Så der, bare en enkel bygning blokk som lar oss gjøre det. Men dette er slags kjedelig at jeg har å holde klikke på den knappen. Så la oss bare dra og kaste alle disse bort. Om du trekker dem til midten, de vil bare slette seg selv. La meg gå opp å kontrollere. La meg gå til evig tid. Og denne gangen kommer jeg til å gjøre noe minorly irriterende. [Latter] DAVID MALAN: Og la meg gå videre og gjøre kontrollen. Vent ett sekund, bare så det er ikke så rist. [MEOW SOUND] DAVID MALAN: Det er ikke naturlig. OK. [MEOW SOUND] DAVID MALAN: Og legg merke til hva som er fint, om Scratch, for de av dere som har tidligere programmering erfaring, du trenger ikke å starte og stoppe. Du trenger ikke å kompilere. Du bare endre det, og programmet vil tilpasse seg dynamisk. Så dette blir en litt interessant. Men la oss ta det ett skritt videre. La meg gå videre og få kvitt det programmet. [MEOW SOUND] DAVID MALAN: Det er det vi vil ringe en bug i spillene. Han bør ikke fortsette å lage den lyden. Så vi vil vi fortelle ham å stoppe. Ok, så nå er jeg kommer til å gå inn - Jeg skal la MIT vite. Vi vil gå over her i Forever. Og nå ønsker jeg å gjøre noe igjen og igjen. Jeg kommer til å gå inn i kontroll. Og la oss se, jeg kommer til å dra min hvis tilstanden der. Så nå merke til logikken. Når det grønne flagget er klikket, gjør noe for alltid, men bare gjøre det noe om dette andre tingen er sant. Jeg kommer til å gå til, la oss si, sensing. Og jeg kommer til å gå videre og velge rørende og slipp den der. Det er en boolsk uttrykk. Og nå, legge merke til, i dette fallet down menyen, er det noen forhåndsdefinerte verdier. Så jeg kan si, er du berører kanten av skjermen? Eller er du berører musepekeren, pilen på skjermen? Så jeg kommer til å gjøre det. Og hvis så, så jeg kommer til å gå videre og spille av lyd mjaue. Så nå er jeg slags har begynnelsen av et spill - en søt spill. [MEOW SOUND] DAVID MALAN: OK, en søt, buggy spillet. La meg vente, la oss si, ett sekund der. Nå spille igjen, ved å klikke det grønne flagget. [MEOW SOUND] DAVID MALAN: Så nå er det som klappe en katt. [MEOW SOUND] DAVID MALAN: Ok, nå dette en jeg gjorde på forhånd. Veldig sent, det blir slags lett å gjøre dumme ting. Så la meg gå inn her. La oss si, som ble Pet katten. La oss nå åpne Ikke Pet katten. Nå, hvis vi spiller denne, du kan gjette, hvis du er se på skjermen - [MEOW SOUND] DAVID MALAN: Nå, hvis jeg klappe katten [LION'S ROAR] DAVID MALAN: Så ikke egentlig pet katten i så fall. Så nå er det bare et eksempel på en gren som kommer i to retninger. Nå la meg gå videre og åpne en ny en her. Denne, også blant vår kilde kode filer for dagen. Så la meg gå tilbake til Source min katalog og gå inn i, la oss velge denne fyren her og se hva som er annerledes. Wow, ok, så nå er det å få litt mer komplisert. Og før vi ser hva denne fyren gjør, la oss prøve å antyde, fra programmet på høyre side. Og nå scratch gjør klart oss til har flere skript, flere programmer forbundet med en sprite, med ett tegn, og, tilsynelatende, de er begge kommer til å kjøre i lockstep. Fordi begge disse programmene starter med når grønt flagg klikk, er dette antyder at en mer avansert tema, med som noen av dere kan bli kjent, kjent som threading, eller multi-threading. Slår ut, lang historie kort, datamaskiner i dag kan faktisk gjøre flere ting på en gang. Eller de kan gjøre én ting om gangen, slik fort at du ikke engang merke til at det er faktisk gjør en ting om gangen. Men for nå, la oss anta at begge disse programmene kommer til å kjøre på samme tid. Og legg merke til, både av dem har alltid puslebiter. Så de begge kommer til å holde i gang før jeg traff den røde stoppskiltet. Så hva skal de gjøre? På venstre side, jeg er tydeligvis erklære en variabel kalt dempet. Så jeg ikke kalle det noe sånt kjedelig som N. Jeg kalte det dempet dette tid til å formidle mening. Jeg satte den lik null. La oss tenke på det som Usann eller la oss tenke på at så False. Nå alltid gjøre følgende. Hvis tastaturet er plass bar er trykket, så hvis dempet lik null, deretter endre dempet til lik én. Else, satt dempet til null. Så logisk, selv om det er en helt haug med biter i et puslespill som er bare sier, når jeg treffer på mellomromstasten, hva skal jeg gjøre for å variabelen kalt dempet? Endre den fra en til null, eller null til en. Det er alt. Så det er som å snu en lysbryter på eller av og huske, med en variable, at jeg har gjort det. I mellomtiden, på høyre side, i lekmann vilkår, hva er hensikten med manuset til høyre? STUDENT: For å spille sjøløve lyd. DAVID MALAN: For å spille Sea Lion lyd, hvis han ikke er dempet, etter natur at variabelen. Så vi deler staten, så å si, deling av informasjon på tvers av disse to skript fordi, merke her er vi alltid gjøre følgende. Hvis dempet er null, så hvis det ikke er dempet - hvis dempet er falsk, og deretter spille Dette Sea Lion lyd. Og tenker for deg selv, hi, hi, hi, for to sekunder, vent et øyeblikk, og deretter sjekk igjen. Så hvis vi går nå over her til venstre, til hvor denne fyren er, og traff grønt flagg, [SEA LION SOUND] DAVID MALAN: På hvilket punkt gjør dette bli veldig irriterende? Fordi dette vil bare fortsette i det uendelige. Så noen ganger, uendelige løkker, så å si, er bevisst. Men i dette tilfellet, så snart jeg treffer på mellomromstasten, slutter han. Nå er programmet ikke har sluttet. Det er fortsatt kjører i disse løkkene. Men hvis jeg får plass bar igjen - [SEA LION SOUND] DAVID MALAN: Han kommer til å plukke opp der han slapp. Så det er en måte for oss å gjøre noe igjen og igjen, men at tid, bare betinget. Vel, mens vi er i denne vene å gjøre tingene igjen og igjen, la meg gå inn i et annet slikt eksempel her. Dette vil vi ringe telle sauer. Og legg merke til hva denne fyren gjør. Det er faktisk litt mer som pseudokode vi spilte med på Onsdag, der han setter noen counter, tenker på det som N igjen, for å null, gjør han alltid følgende. Han sier disken er verdi for en sekund, venter en andre, og deretter forandrer telleren ved en. Og i denne sammenheng, som bare betyr intervaller det. Så han legger man til det. Så dette er bokstavelig talt - det er ikke helt hva vi tenker av å telle sauer. Det er sauene gjør tellingen, alltid, opp fra null. Så vi kan gjøre lignende ting der, logisk. Men la oss nå prøve å rengjøre noen av disse tingene opp. La meg gå videre nå inn i en enkel eksempel der vår katt er bare kommer til starte hoste. Ok, så her har vi hoste 0 - dataforskere starter regnet fra 0. Så denne katten er bare kommer å hoste tre ganger. Og her er hvordan jeg implementert det. Når grønne flagget er klikket, hoste, vente, hoste, vent, hoste, vent. Og jeg gjorde dette bare ved å dra og slippe brikkene. Eller hvis du begynner å tinker med Scratch, vil du se at du kan faktisk duplisere brikkene slik at du kan gjøre ting raskere, uten å dra og slippe ad nauseum. Men vi er ikke på den beste veien her. Fordi hvordan gjør jeg ham hoste en fjerde gang? Vel, jeg kunne liksom gå ned her. Jeg kunne kopiere og deretter lim denne inn der. Hvordan gjør jeg ham hoste en femte gang? Vel, kopiere og lime igjen. Eller dra dråpe igjen. Og veldig raskt, starter dette programmet å bli virkelig, virkelig overflødig, veldig lang, men egentlig uinteressant. Men det er en måte å rydde opp i dette. Hva er den opplagte måten å rydde opp i dette? OK, så vi kunne faktisk virkelig gå ut, og når du treffer plass bar, ha ham hoste. Men hvis jeg bare ønsker å gjøre noe gjentagelser, husker at vi har noen kontroll konstruerer. La meg flytte dette ut av måte, gå under kontroll. La meg bare gjøre en gjentakelse, si, tre ganger. Og nå la meg stjele noen av disse brikkene. La meg knipse dette her. La meg kaste disse bort helt. Og nå har jeg en bedre utformet program. Hvorfor? Hvis jeg ønsker å endre antall ganger denne katten hoste, alt jeg har å gjøre er å endre en variabel, eller en verdi, heller fra tre til fire, eller fem, eller seks. Eller jeg kunne gjøre noe betinget, selv, med plassen bar hvis jeg ville. Så dette er et generelt prinsipp. Når du begynner å kopiere og lime inn koden, enten det er i Scratch, eller i C, du gjør noe galt, mest sannsynlig. Eller i det minste, når du har overskredet noen rimelig antall kopier og pastaer, er du sannsynligvis gjør noe galt. Men vet du hva? Jeg liker egentlig ikke dette. Dette er ikke den reneste utforming. Jeg skulle ønske det var et puslespill brikke kalt hoste fordi da ville jeg ikke nødt til å implementere dette selv, den gammeldagse måten, ved å ha si, og vent - hva om de var bare en hoste puslespill brikke. Vel, kan jeg faktisk gjøre det. La meg gå under flere blokker, klikk Lag en blokk, og nå får jeg dette vinduet her. Jeg kommer til å kalle denne tingen hoste. Jeg kommer til å gå videre og klikk på OK. Og nå varsel, får jeg en ny start stykke som er buet på toppen. Og hva jeg skal gjøre med dette, er jeg kommer til å bare stjele disse blokkene. Jeg kommer til å sette dem her. Og nå, med disse tre stykker, har jeg implementert hva jeg skal kalle en funksjon, eller en fremgangsmåte eller en rekke du kanskje kjenner det som en metode. Små forskjeller mellom ordene. Men for nå, la oss bare kaller dette en funksjon. Dette er bare et nytt puslespill brikke. Nå er implementert som dette. Men legg merke til at spillene har gitt oss en fysisk representasjon av det hele blokkere over her. Så nå kan jeg bare dra dette over her, si, gjenta tre ganger, og hva kommer til å skje nå, når jeg spiller dette skriptet, er bare ett program kjører på en gang. Det er bare én når grønt flagg klikket. Men det lilla blokken kalt hoste er forteller effektivt Scratch, hver gang du ser at puslespill brikke, faktisk utføre disse trinnene som jeg skje å gjennomføre manuelt. Så det er litt artig. Men nå, antar at jeg bestemte meg, vet jeg ikke vil denne katten bare å hoste. Jeg vil at han skal være i stand å nyse også. Vel, hvordan kunne vi gå om implementere nys? Vel jeg kunne ganske mye gjøre det samme. Jeg kunne lage en annen blokk. Jeg kunne kalle dette nys, klikker du OK. Så, her kunne jeg faktisk har, la meg kopiere denne - og det er der du skal føle deg som du sannsynligvis ikke gjør noe i på beste måte. Jeg kunne si noe sånt, Achoo, i ett sekund. Vent ett sekund. Nå har jeg en ny blokk kalt nys. Og ja, det er det. Men også dette, bør begynne å føle - kanskje ikke den første uken av klasse, men ved den andre - bare litt overflødig. Klart, det er noen redundans her. Så la meg foreslå, i stedet, at vi avgrense denne definisjonen som følger. La meg gå opp til min filmenyen. Jeg kommer ikke til å lagre denne versjonen. Jeg kommer til å gå inn i en av mine forhåndslagde filer her. Og jeg kommer til å gå videre og åpne opp hoste to. Uff da det var hoste to. La meg gå videre og åpne opp hoste tre, som er denne kilden katalogen. Hoste tre og merke - oh, fortalte jeg historien i feil rekkefølge. La meg komme seg fra denne historien. Historien jeg mente å si ender med hoste 4 - det er det. Så hva om jeg i stedet definere et større puslespill brikke kalt definere, sier ordet n ganger. Nysing er bare tilsynelatende, i Scratch, Achoo. Så vi uttrykke det som et ord, bare fordi det er den begrensningen av programmet. Og en hoste er [hoste], men hoste, C-O-U-G-H. Så det er bare to forskjellige ord gjør, i hovedsak, det samme. Så jeg kan faktisk gjøre en ny blokk som dette. Jeg brukte ikke dette menyvalget før. Men når du klikker Gjør Block, du kan velge noen alternativer. Og du kan si at denne blokken faktisk tar noen innspill, ellers kjent som argumenter, eller parametre, slik at du kan endre oppførselen til din blokk. Så det jeg gjorde for et øyeblikk siden var Jeg ringte denne blokken Si. Og så sa jeg, det tar en streng inngang. Og nå legger merke til, som standard, det står streng en. En streng er bare et ord, eller en setning, for vårt formål. Men jeg skal bare sette noen Plassholderteksten der, akkurat som i et hjemmeside, når du ser brukernavn eller passord, og deretter forsvinner når du begynner å skrive. Det er alt som er. Og nå skal jeg til legge til en rekke innspill. Og jeg kommer til å kalle dette n - men det er ganske vilkårlig. Og så bare en etikett, å bare gjøre denne blokken litt mer selvtillit forklarende - ganger, det er hva jeg nettopp gjorde. Og sluttresultatet er at jeg får en blokk som ser slik ut. Og nå legge merke til, jeg bruker en gjentakelse blokk. Men heller enn hardt koding tre, jeg dra og slippe n der så jeg kan parametrize funksjonen. Jeg kan gjøre denne funksjonen gjør noe et forskjellig antall ganger er basert på denne verdien. Og legg merke til, si, dette er hva jeg gjorde her, hvis jeg drar ord, kan jeg si ikke en hardkodet ord, men uansett er gått i ett sekund. I mellomtiden, hvordan kan jeg re-implementere hoste? Jeg i stedet definere hoste som sier hoste n ganger. Så kort sagt, jeg kommer gjennom dette hurtig, men den grunnleggende ideen er så fort som du begynner å se i programmet det, vent litt, jeg har gjort noe som dette før, kan jeg faktor ut noen felles funksjonalitet? Kan jeg separerte hva jeg gjør inn i noen grunnleggende ideer? Det er det vi gjør her. Og jeg har stablet disse tingene, visuelt, oppå hverandre fordi det er testament til at ideen om starter med binære, kommer til ASCII, lage grafiske programmer, liksom lagdeling stadig mer komplekse ideer om toppen av hverandre. Samme ideen her. Jeg startet fra scratch, implementere hoste, så innså hoste er egentlig bare si noe. Så la meg i stedet implementere oppfatningen av å si noe. Og på toppen av det, kan jeg implementere Achoo, eller hoste? Og vi kunne gjøre flere slike variantene fortsatt. Så fra dette grunnleggende prinsippet, vi kan begynne å gjøre stadig mer komplekse programmer. La meg åpne opp denne. Vi kan faktisk ha flere sprites samspill på skjermen på en gang. Hvis jeg går inn i min kilde katalog og ta en såkalte tråder, husker at en tråden er bare virkelig muligheten av to skript for å kjøre side ved side samtidig. Legg merke til nå, har både en fugl sprite og en katt sprite, som begge har sine egne skript. Så varsel, når jeg klikker på cat, får jeg disse skriptene. Når jeg klikker på fuglen, Jeg får disse skriptene. Slik at hver av disse gutta har sine egne programmer. Når jeg nå klikker det grønne flagget, merker at hva dette programmet gjør er har katten, utrolig sakte, jage fuglen. Men katten har fordelen av å ha blitt programmert på en slik måte at uansett hvor fuglen er, går katten mot ham. Vi kan spille det spillet mye raskere. Så hvis jeg er på katten, merker at jeg er hjelp, la oss si flytte en trinn. La oss ha ham flytte fem trinn på gangen, slik at fem punkter på en gang. La meg klikker spille. [LION'S ROAR] DAVID MALAN: Greit, nå kan vi virkelig gi katten en fordel. 10 skritt om gangen. [LION'S ROAR] DAVID MALAN: All right, så veldig raskt, det blir litt fordel for katten. Men jeg skal vinke min hånd på noen av detaljene. Men på grunn av at denne banen er starter litt forskjellig hver gang er at jeg gjør litt av tilfeldigheter. Jeg er faktisk peker katten i en annen retning basert på hvor jeg vil at han skal begynne slik at hver gang spillet, eller animasjon, er en litt annerledes. Nå, la meg presentere en andre konstruere her. Så i dette tilfellet hadde vi funksjoner. Det er også tenkt å være et puslespill brikke kjent som en matrise, eller en liste, som lar deg lagre flere tall inne i en variabel. Vi så trådene, og nå det er arrangementer. Så her er en hendelse ved hjelp disse to gutta her. Og hvis jeg åpner opp filen som heter Hendelser fra dagens eksempler, vil vi se et program som ser litt som dette. Og nå merke denne fyren - så merker jeg har den blå Muppet klikket - han gjør kun det følgende. Han har ikke en av dem Grønt Flagg brikkene. Han har en når jeg mottar hendelse - så noen vilkårlig ord. Jeg bare skrev ut arrangementet der - han kommer til å si, Polo, i to sekunder. Så de av dere som er kjent med dette spillet kanskje vet hvor dette går. Hvis jeg nå klikke på den oransje Muppet, hans program gjør dette. Forever, hvis tastaturet mellomromstasten undertrykt, han kommer til å si, Marco, i to sekunder på skjermen. Men han også kommer til å bruke denne mer avansert blokkere kjent som kringkasting. Han kommer til å kringkaste sitat unquote, "event". I mellomtiden er den blå fyren, husker, lytter etter sitat unquote, "event". Så en eller annen måte, nå kan vi ha to sprites samspill. Og når vi kommer til web-programmering, senere på sikt, på samme måte vil dette være en fordel å ha ditt nettsted gjøre noe som respons på, for eksempel, et klikk på tastaturet. Så la meg gå videre og traff space bar. Oransje fyren sier Marco. Blå fyren sier Polo. Hvis jeg gjør det igjen oransje fyren sier Marco, sier blå fyren polo. Så la oss ta dette ett skritt videre. Denne gangen vil vi gå, sannsynligvis, bare noen få minutter her. Har vi - bordlampe, komme ned. Du har rett på slutten. OK, kan dere begge komme opp. Vi har bordlamper for alle. Kom igjen. Jeg vet ikke om vi kan holde denne latterlige gag opp hele semesteret, skjønt. All right, kom ned. Og i mellomtiden har vi følgende eksempler å trekke opp, bare for å akselerere ting nå, slik at vi ha en manifestasjon fra en annen forgjenger av deg som bruker samme grunnleggende byggesteiner. Hva heter du? JOHN: John. DAVID MALAN: John. Hyggelig for meg deg. Og? Setz: Setz. DAVID MALAN: Setz, hyggelig for meg deg. John, hvis du ønsker å komme opp først, dette er en gammel school spill som heter Frogger. Du kan bruke tastaturet for dette også. Og målet er å komme over gaten og vann. [Frogger MUSIKK OG Sound spiller] DAVID MALAN: Jeg beklager, ingen bordlampe for deg i dag. Greit, Setz, ville du liker å komme videre opp? Greit, la oss gjøre det igjen. Setz: Må jeg bruke pilene? DAVID MALAN: Bare piltastene. Opp, ned, venstre, høyre. [Frogger MUSIKK OG Sound spiller] DAVID MALAN: Vi kaller dem trøstepremier i dag, da, veldig godt utført. Her, for dere begge, John og Setz. Gratulerer, all right. Så igjen, da dette spillet spiller, tenke på hva som skjer? En, det er helt klart mye bevegelse. Men vi har sett hvordan, med katten og fugl eksempel, hvordan du kan gjøre illusjon av bevegelse ved å bare flytte noen antall piksler igjen og igjen. Og hvis du har en evig blokk, du kunne ha disse biler gjør dette for alltid. Vi har evnen til å har noen tilfeldighet. Så dette spillet ikke trenger å være nøyaktig den samme hver gang. Disse loggene, de biler, kan starte på litt forskjellige tider slik at Spillet i seg selv er mer interessant med hvert spill. Og mellomtiden har vi sett muligheten å høre på mellomromstasten. Men klart, i bunnen av, kan du også lytte for opp, ned, venstre, høyre, og virkelig en tast på tastaturet. Og du kan også gjøre noen andre ting. La meg gå videre og gå tilbake til web-versjonen. La meg gå inn i vår samling eksempler her. Og under Studio My, video som er, i hovedsak, en mappe på scratch.mit.edu. Vi har web-versjonene av alle disse prosjekter. Og la oss se om jeg kan få min datamaskin til å samarbeide her. Dette er skrevet av en av våre venner ved MIT, kalt Flytt Butterfly. Og når dette åpner opp, er dette kommer til å faktisk bruke mer av datamaskinens maskinvare. Ripe skjer skal gjennomføres med Flash. Flash kan snakke med webkameraet ditt, hvis du har en. Så hvis jeg går videre og fullskjerm dette her, klikk på den grønne flagg, varsel at Flash sikkerhetsmelding sier, vil du tillate å bruke min webcam? Normalt bør du trolig si Nekt. Men i dette tilfellet, vil vi si tillate. Så jeg kommer til å fortelle Chrome å tillate denne også. Og nå, på bare et øyeblikk, du ser meg, Jepp, meg. Og hvis hånden min går opp - Jeg må ikke bevege hode samtidig. Det er også en refleksjon på skjermen. Kom igjen, det vi går - du kan flytte det på skjermen fordi det er også brikkene - oh, du vet hva det er, er det fordi du også se projektor skjermen bak meg. Så vi har en liten uendelig ting som skjer der. Ok, så jeg skal spille her nede. Det vi går. Så det er også et puslespill brikke som sier, når du ser bevegelse under en av sprites, kan du ha det gå opp, ned, venstre, høyre eller lignende. Så vi har en bit av virtuell virkelighet skjer her også, alt innenfor rammen av nettleseren min, bare her bruker min webcam. Så hva er da i horisonten. Det første problemet settet, som du ser, eller nettsiden vil gå på nettet senere i kveld på cs50.net, er ganske mye kommer til å være åpent. Og gjennomføre en Scratch prosjekt av interesse for deg, et spill, en interaksjon, noe kunstnerisk, og utfordre deg selv til å bruke så mange av disse brikkene. Og det kan enten være interaktiv på denne måten. Eller det kan være noe mer bevisst laget for å fortelle en historie. Og ja, det er der vi vil ende off i dag, med en siste eksempel. La meg gå inn Scratch lokalt. La meg gå videre og åpne denne, og spille en siste program skrevet av en av dine forgjengere, nemlig at en her. Bra, øke volumet for denne. [Musikk spilles] FORTELLER: Ved neste CS50, David inviterer en frivillig på scenen. DAVID MALAN: For denne demonstrasjonen, vi kommer til å trenge en frivillig. Har du lyst til å komme ned? Hva heter du? Flytte på.