Palestrante: eu sou [inaudível]. E eu sou um sénior na Leverett House. Eu estudar ciência da computação, e eu sou um TF para CS50. Como um calouro, eu não tinha sequer um laptop ou um smartphone. Eu não tinha nenhuma experiência em programação. CS50 foi o curso mais memorável que Eu tomei em Harvard porque era uma luta, mas foi realmente um diversão luta ao mesmo tempo. E eu fiz um monte de incrível, permanente amigos, e eu aprendi um monte de realmente habilidades aplicáveis. Estou tão feliz que eu não deixei o meu falta de fundo ser uma desculpa para me Não tome CS50. Eu sou [inaudível]. Eu sou um sénior na Leverett House, classe de 2014. E tomei CS50. DAVID MALAN: Então isso é CS50. Isto é o fim de semana zero. E lembrar onde começamos a última vez, Com estas lâmpadas, que foram tão popular que fomos e comprei um pouco mais hoje. Então eu acho que isso vai ser nossa coisa este ano - lâmpadas de mesa se você chegar no palco, pelo menos até acabar. Mas nós usamos estes recordação, para introduzir os conceitos básicos de representação de dados. Precisávamos maneira de começar a representar informação dentro de um computador. E a maneira mais simples de fazer isso era com um ingrediente, eletricidade. E a coisa mais simples que você pode fazer com eletricidade é ligá-lo e ele desligado. Deixe o fluxo de elétrons ou não. E usando esses dois estados básicos, fora e sobre, ou falso e verdadeiro, ou zero e um, começamos a ver que poderíamos construir -se, neste caso, com a luz lâmpadas, mais números do que apenas zero e um. Contámos tão elevada quanto sete, por exemplo, a última vez. Mas todos nós temos que fazer é continuar jogando mais e mais lâmpadas naquele problema e, na verdade, podemos representar que qualquer número de nós poderia possivelmente querer. Bem, nós transferida rapidamente, em seguida, em Quarta a este byte de voluntários. 8 bits é o que geralmente chamamos de byte, então aqui nós tivemos oito voluntários na quarta-feira que foram coletivamente representando oito bits. E quando suas mãos foram acima, eles eram um. E quando as suas mãos estavam para baixo, houve um zero. E nós tivemos essas pessoas subir sobre o porquê de palco? O que nós somos capazes de fazer com esta seqüência de bits? Para criar um alfabeto. Fomos capazes de construir em cima do que lição anterior aprendemos e realmente começar a fazer mais interessante informação que é, no mínimo, mais familiar para nós seres humanos. E isso vai ser um recorrente tema durante 50 anos, mas também computador ciência mais geral, essa idéia de camadas, em que, no final do dia, se você realmente começou a básico com um computador, sim, é zeros e uns. E sob que é apenas eletricidade. Mas muito rapidamente começar a tomar os detalhes de baixo nível para concedido e começar a camada em cima do passado trabalhou feito para que, em última instância, por o final do semestre e, realmente, mais geralmente como cientistas da computação e os programadores, pode fazer alguns realmente coisas poderosas, aproveitando o trabalho que nós mesmos temos feito e também de pé sobre os ombros dos outros. Agora nós rapidamente transferida na quarta-feira a partir de apenas a necessidade de representar informações de querer de fazer alguma coisa com ele. Então, o que nós definimos um algoritmo como? Uma série de instruções. Então, é uma série de instruções, um número de passos que você, um ser humano, ou um computador, mais tipicamente, seria executar um após o outro na ordem para alcançar algum objetivo. E nós tivemos algumas metas última vez, um dos quais foi a contagem pessoas na sala. E um outro exemplo foi encontrar Mike Smith em uma lista telefônica. Então, você deve se lembrar que eu rasguei um telefone livro pela metade para este fim se encontrar Mike Smith. O objetivo desse visual foi a demonstram, novamente, que foram literalmente rasgando este problema metade, ao meio, no meio, e muito rapidamente indo de como 1.000 páginas apenas uma única página. Aqueles de vocês que perdeu esta em Quarta-feira, eu pensei que iria reproduzir algumas imagens do que você perdeu. Vamos dar uma olhada. [REPRODUÇÃO] -Lá vamos nós. 1500 páginas, linha limpo e agradável, lágrima legítimo. [FIM REPRODUÇÃO DE VÍDEO] DAVID MALAN: Assim que foi quarta-feira. Nós transição, porém, na quarta-feira agora de querer representar algoritmos de algum modo pouco padrão, e não apenas descrevendo-os verbalmente, mas tentar expressá-las, por escrito, ou em uma tela de computador, para que pudéssemos começam a melhorar, e modificar eles, e, eventualmente, na verdade analisar o quão correto ou o quão rápido eles eram. Então, nós introduzimos essa noção de pseudocódigo que, em termos leigos, é o quê? OK, palavras. Vamos aprofundar um pouco mais do que isso. Inglês, com certeza, mas são para que fim? Palavras com as quais criar ou para representar algoritmos. Portanto, não há uma língua conhecida como pseudocódigo no mundo. É que você, em Inglês, ou qualquer que seja sua linguagem falada é, use uma espécie de notação superficial para transmitir uma idéia de forma muito sucinta. Mas vamos ver que, certamente com um Pseudocódigo Inglês, e verifica-se a maioria das próprias linguagens de programação são derivados da própria Inglês, veremos que há algum padrão formas de representação e pseudocódigo também o código de programação. Então, como você começa a ver mesmo o mais simples exemplos atuais, perceber estes mesmos padrões se repitam na próxima semana. Então pseudocódigo era algum tipo da língua semelhante uma linguagem de programação. E o primeiro exemplo que vi visualmente escrita era um presente. Foi apenas um programa de três passos, o objectivo dos quais foi a contagem do número de pessoas em um dormitório para esse vídeo na quarta-feira. Mas houve alguns aspectos interessantes deste programa simples. E isso vai ser temas recorrentes. Portanto, para aqueles que não estão familiarizados com este, um, nós introduzimos uma variável. E, provavelmente, todos nesta sala é familiarizado com uma variável no contexto da álgebra. Mas aqui na programação, variáveis são, um, pode ser chamado de qualquer coisa que nós queremos. Estamos usando n como um contador. Mas poderíamos usar o contador de palavras, ou, como você verá, mais qualquer frase que que você pode gostar tanto tempo como é descritiva, mas é realmente apenas uma recipiente de armazenamento. É um pedaço de memória, um certo número de bits, e varia por computador, como muitos bits há que compor essa variável. Mas podemos colocar valores nele. Até agora, nós só colocar números. Mas podemos colocar palavras reais. Nós podemos colocar parágrafos. Podemos colocar imagens - qualquer coisa, realmente, podemos representar com zeros e uns, que pode colocar em esta noção de nível superior de uma variável. Então, muito para a frente lá. E isso é uma linha. Mas muito rapidamente transferiu-se de uma linha para realmente fazer algo com essa variável. E na linha de três, atualizamos N. Nós incrementado N. E nós poderíamos escrever este qualquer número de maneiras. Mas talvez o mais óbvio é só para dizer, definir N igual a N é qualquer que seja mais 1. Então, esse era o nosso incremento. Entretanto, verificou-se um ciclo. E este, também, é, provavelmente, bastante intuitivo. Um loop é apenas algo em um programa que acontece de novo e mais uma vez, alguns tipo de ciclo. E esta frase-chave aqui, para cada um, é realmente muito comum durante a maior parte linguagens de programação, incluindo os veremos no curso. Toda vez que você ver a palavra, ele normalmente transmite a idéia de que um loop, algo cíclico, está prestes a acontecer. Mas é importante notar uma outro detalhe sintática. O fato de terceira linha, há realmente recuado por ter atingido a barra de espaço algumas vezes é proposital. Porque convenção humana é tal que, quando você está fazendo algo de novo e de novo, de forma cíclica, tal como preconizado na linha dois, você travessão qualquer coisa que pertenceu ao circuito apenas para deixar claro que é linha de três e não, por exemplo, A linha de quatro ou cinco, se houvesse linhas para, ou cinco, que são parte do que loops. Portanto, este recuo simples transmite a idéia básica. Então, nós aplicamos esse algoritmo, Agora, para alguns exemplos. E isto, também, o exemplo simples no mundo real. Mas vai ser representante da como você faria para testar a sua próprios programas cada vez mais complexos. Você tenta algumas situações, alguns representantes de insumos, e veja se você obter os resultados desejados. Portanto, este exemplo tinha duas pessoas sentado na sala do dormitório. À esquerda está o mesmo código pseudo. E esta é uma captura de tela do próprio último passo da aplicação do presente algoritmo para essas entradas, onde existe duas pessoas na sala e, lembrar, como percorrer linhas um, e dois, e três, e dois e três e feito - até o final desse algoritmo, tivemos realmente contava os dois companheiros que estão no quarto. Então procuramos outro exemplo. E nós dissemos que se houver zero de pessoas na sala? É este código ainda correto? E de fato era. Acontece que a linha dois e, assim, a linha de três ou não vai executar. Eles não vão acontecer em todos porque eles não são apenas aplicáveis ​​se há zero de pessoas na sala. Mas não é um grande negócio. Linha de uma N inicializado para zero, assim apesar de apenas uma linha da presente programa, na verdade, acaba sendo útil, ainda produz a resposta correta, como indicado pela laranja zero no fundo. Mas, então, decidimos que era tipo de algoritmo estúpido. Foi muito lento. Certamente, eu posso fazer duas, quatro, seis, oito, dez, quando contagem de pessoas em uma sala. Então, nós tweaked o algoritmo, o pseudocódigo, para dizer, agora na linha dois, para cada par de pessoas na sala, proceder para, na linha três, incremento pelos dois em cada iteração. Então, que teria trabalhado aqui para este par de pessoas na sala. Mas então, se você começar a pensar sobre isto, e não demorou muito para perceber, espere um minuto é vai quebrar, quebra em que caso simples? Se há três pessoas na sala, ou, mais geralmente, quando há uma número ímpar de pessoas no quarto, incluindo um. Nós perderíamos essa pessoa aqui, porque não existem tais pares. Então, nós rapidamente abordada por vez introduzindo o adicional construções de programação ao código pseudo. Assim, uma condição, que chamamos , ou um galho. E tem a intenção de transmitir, visualmente, o idéia de ramo, uma bifurcação na estrada onde você pode fazer isso ou, talvez, algo mais. E, de fato, estamos face a este problema, adicionando a linha 4, dizendo que, na verdade, a o fim, se uma pessoa permanece, então vá em frente e conte-los especiais. Então você meio que caso especial los, de modo para falar, de modo que agora podemos lidar com tanto um número par de pessoas e um número ímpar de pessoas. Agora, existem várias maneiras poderíamos ter expressado isso. E, francamente, eu poderia ter sido ainda mais nit exigente quando ele veio para a minha escolha de Inglês para o pseudocódigo. Mas pelo menos o espírito de a idéia é transmitida. Se você entregou esse código para um amigo que não está no CS, ou nunca tomou CS, as probabilidades são de que eles poderiam descobrir, dado três pessoas na sala, como contar as pessoas com base sobre estas instruções. E isso é tudo que realmente queremos alcançar com pseudocódigo, de alguma forma padronizar como vamos sobre representando idéias para que possamos começam a fazer mais complicado coisa ainda. Então isso nos leva então, de hoje, ao código real. Começamos a programar hoje, embora em um ambiente amigável. E então nós transição muito rapidamente para uma sintaxe mais misterioso, mas que que você verá é fundamentalmente o mesmo que as idéias vão ver manifestado com esta outra língua hoje. Ele só vai olhar um pouco diferente. Então, ao invés de apenas chamar esse código, eu sou vai ser um pouco mais preciso e dizer que, doravante, quando se escreve uma programa, você está escrevendo código fonte. É uma espécie de como pseudocódigo. Mas vamos ver, não é uma espécie de frouxo quando se trata de escolher as palavras que você usa. Quando for programar em uma linguagem, você tem para usar as palavras, as frases, a sintaxe, que outras pessoas decidiram representar que a linguagem particular. Então pseudocodes é com você. Uma linguagem de programação real como C, como vamos ver, eventualmente, é padronizada por outras pessoas. Então, como é que vamos escrever algum código fonte? Bem, eu estou indo para ir em frente e fazer isso. Eu estou indo para ir em frente e abrir uma janela aqui. Mais sobre isso na próxima semana. Mas este é um dispositivo chamado o aparelho CS50. Estou executando um software no meu Mac, mas você pode fazer a mesma coisa em um computador Windows, que está a dar me a ilusão de executar um diferente sistema operacional completamente certo aqui em uma janela no meu Mac. Acabei completo exibido para que você não realmente ver o Mac OS agora. Este é um sistema operativo chamado Linux. É muito popular. É muito rápido. É muito livre, o que tornou muito atraente, especialmente no mundo comercial. E mais para que no final do semestre, quando usamos Linux um pouco programação para web e hospedagem de sites e projetos reais. Então, agora, só sei que esta é uma área de trabalho que significou a olhar vagamente familiar para Windows e Mac OS. Ele só tem alguns nomes diferentes e ícones para as coisas. Mas esta é a assim chamada CS50 aparelho, uma máquina virtual que, partir da próxima semana, vocês vão executado dentro de uma janela em seu Mac ou PC. Para hoje, eu vou abrir o mais simples dos programas. É chamado gedit. E este é apenas um editor gráfico. É uma espécie de como o Microsoft Word, mas simples. É o tipo de texto como edição ou notepad. É apenas um programa muito simples, com que para escrever palavras na tela. É só assim que acontece que se eu economizar arquivos que eu crio quando este programa em uma extensão especial como. c, ao invés de. doc ou. xls, ou qualquer outra coisa você está familiarizado com, eu posso realmente criar programas usando o mesmo esta simples editor de texto. Então deixe-me fazer isso. Deixe-me ir em frente e salve este apresentar pela primeira vez como hello.c. E, novamente, essa interface de usuário será tornar-se familiar para você rapidamente. Mas, por enquanto, só estou digitando em um nome de arquivo. Vou guardá-lo em meu John Diretório home Harvard. E agora eu tenho este guia que indica Estou realmente edição um arquivo chamado hello.c. Então, nada de muito interessante ainda. E agora ele vai ficar muito enigmática. Eu vou ampliar, apenas por isso é mais visível. E eu vou começar a escrever incluir stdio.h, int main, vazio, aberto encaracolado cinta, um, dois, três, quatro espaços de recuo, f impressão, para impressão algo formatado, entre aspas, "Olá, mundo" barra invertida, n, próximo citação, parêntese fechado, ponto e vírgula, entrar retrocesso, retrocesso, retrocesso, backspace, fechou encaracolado cinta - Tenho programado. Tudo bem que esta é uma super simples programa, na verdade, o programa que Alguém começa a programação com. E tudo o que faz, por toda a sua complexidade, é imprimir no tela, adivinhem? Olá, mundo. Mas não é suficiente apenas escrever um programa. Portanto, este é o código. Este é o código-fonte em uma linguagem chamada c. Ele salvou atualmente em um arquivo chamado hello.c. Agora olhe para o fundo da tela aqui. Mais sobre isso, mais uma vez, em próximas semanas. Mas isso é o que vamos chamar uma janela de terminal. É um piscar, preto e indicação branco. É uma espécie de interface antiga escola um computador que, geralmente, não faz usar um mouse ou outro elementos gráficos. Ele só usa o teclado. E eu posso digitar comandos em esta piscando rápida. E para fins de hoje, eu sou apenas vai digitar o seguinte - Olá fazer. E esse programa, faça, é apenas um programa que, no mundo real, estes dias, teríamos um duplo clique em. Mas nesta interface para hoje, estamos vai digitar o seu nome neste prompt. Olá fazer é, literalmente, indo para me fazer um programa chamado Olá. E vai fazê-lo, observando para um arquivo, apenas padrão, chamado hello.c. Vai assumir Eu quero um programa C por natureza, de como este computador é configurada. Então, vá em frente e aperte enter. Eu vejo alguma saída enigmática, mas isso vai se tornar muito familiarizado antes do tempo. Isso aconteceu para executar um compilador, mais em que, em um momento, chamado Clang. Mas agora, eu tenho apenas mais um piscar pedir. E eu posso ir em frente agora e digite dot reduzir, por razões que não interessam, vamos voltar para a próxima semana - Olá. Então, todo esse esforço, até agora, apenas para escrever a mais simples de programas que, assim que eu aperte Enter, faz isso. Então, eu escrevi meu primeiro programa. Então, eu estou deliberadamente zombando neste programa muito simples por um par de razões. Um deles, é difícil ficar animado sobre a tomada de uma classe se este é o fim do jogo. Mas mais do que isso, há uma monte de distrações aqui. A primeira vez que você aprender a programar, para aqueles que menos confortável, e até eu, de volta ao dia, quando eu vi algo parecido com isso - você pode tipo da figura que, tudo bem, este está em um Olá mundo da impressão. Mas há tanta distração. Há muito sintaxe na tela que fica no caminho de muito idéias simples, caso contrário, simples,. Então, o que vamos fazer hoje é que estamos vai deixar de lado C e vir de volta para que na segunda-feira. E nós estamos indo para usar uma gráfica linguagem de programação chamada arranhões. Isto é uma linguagem de programação, que eu aludido na quarta-feira, que vai para nos permitir fazer o mesmo tipo de coisa mas fechar os olhos, para hoje, para as chaves, os parênteses, o ponto e vírgula, e todas estas estúpidas distrações que ficam no caminho, em Neste primeiro dia, de algum básico, bem idéias interessantes. Então, para esse fim, eu vou de volta para o meu desktop aqui e apresentar-lhe a alternativa de que programa, que vai procurar um coisinha acender isso. É assim que vamos implementar essa mesmo programa de hoje - dois quebra-cabeça peças que, quando interligados e clicado, vai dizer para o mundo, Olá mundo. Então, vamos realmente ir lá. Então, eu estou indo para ir em frente e abrir uma site conhecido como scratch.mit.edu. E isso vai me levar este site aqui. De antemão, eu tenho registrado neste website e os primeiros problemas que irá orientá-lo através de alguns destes passos. Eu estou indo para ir em frente e clique na minha pasta do zero aqui. E isso vai me mostrar alguns projetos que eu tenho efectivamente criado antecipadamente. E verifica-se que esta gráfica linguagem de programação não é só ir para nos deixar programa arrastando e soltando essas peças de quebra-cabeça, você Nem sequer precisa de um software especial. Está tudo embutido dentro de um navegador para que você pode fazer isso, em teoria, em seus computadores agora, como alguns de vocês Pode muito bem ser, sem necessidade software como o aparelho CS50, o que virá na próxima semana. Então, eu estou indo para ir até o canto superior aqui e clique em Criar. E em um momento em que eu estou indo para obter um espaço em branco tela através da qual eu possa começar programação neste gráfica ambiente de programação. Mas desta vez, ele vai ser muito, muito mais simples do que realmente fazê-lo. Então, em um momento, quando o Wi-Fi coopera, agora temos esta tela. Então, um rápido passeio verbal, mas ouso dizer, Certamente quando você mergulhar no primeiro conjunto de problemas, você vai acho isso tudo muito acessível e bastante intuitiva. Mas vamos pintar um quadro mental apenas por um momento. Então, sob este aviso dizendo save mudanças, você está prestes a ver nada. Este é um sprite. É um personagem. E ele vive o que vamos chamar um palco, este grande retângulo branco em que ele pode mover para cima, para baixo, para a esquerda, direito, e fazer, realmente, outros tipos de ações. Enquanto isso, no meio deste usuário interface, temos um monte de peças do puzzle. E você vai ver que eles dizem coisas como movimentar 10 passos, virou-se de 15 graus, ponto em uma determinada direção. Mas há categorias de quarteirões até aqui. Então, se eu ir para aparência, você vai ver que há outras peças do puzzle que aparentemente, vai contar este cit para dizer Olá, para pensar, para mostrar se, esconder-se. Se eu descer para Sounds, verifica-se há maneiras de reproduzir sons como miau, parar todos os sons, tocar um tambor. Assim, longa história curta, há um todo monte de peças de quebra-cabeça que permitem que você para dizer este gato, ou qualquer número de outros personagens, o que fazer. Mas para fazer tudo isso acontecer você precisamos para iniciar a programação. E esta grande caixa branca ou caixa cinza, em do lado direito, este é o lugar onde Vou realmente arrastar e soltar as peças do puzzle. Esse é o meu texto em branco janela equivalente. Então, eu estou indo para ir em frente e clique Controlar no meio. Ou melhor, deixe-me começar sob Eventos. Sob banco Eventos, você verá uma algumas coisas que são deliberadamente curvada na parte superior, de tal maneira que eles provavelmente não entrelaçar no topo das peças do puzzle. E isso é porque eles demarcar o início de um programa, o início de um script, por assim dizer. Então, se eu ir em frente e arrastar, quando verde bandeira clicado por aqui, e então eu quer dizer que este gato algo em primeiro lugar. Então, eu estou indo para ir em o painel parece. E eu estou indo para ir em frente e agarrar a dizer Olá bloco, e arrastar e soltar, e solte para que ele automaticamente interliga lá. E, em seguida, perceber que posso clique sobre o texto. E eu posso substituí-lo a ser mais específicas como, por exemplo, Olá mundo. E agora temos o programa que eu reivindico é equivalente a mais do que muito programa arcano eu implementei C em um momento atrás. Se eu passar por cima agora para o lado esquerdo, notar que há um grande sinal de parada e uma bandeira verde grande. Deixe-me aproximar para maior clareza. E quando eu clico agora esta bandeira verde, você provavelmente pode adivinhar o que esta primeira programa agora vai fazer. Portanto, há, também, que estamos programando, mas não estamos realmente encalhar em alguns desses sintático, detalhes minuciosos. Mas vamos tentar algo um pouco mais interessante. Deixe-me ir para a minha pasta do risco aqui. E, na verdade, deixe-me então deixe-me abrir um programa separado aqui por apenas um momento, maximizar essa janela, Abrir Arquivo, e eu estou indo para ir para hoje diretório de origem. Como sempre, você vai encontrar, hoje e para a frente, que de todos os exemplos de hoje são acessíveis dentro de site do curso. E eu estou indo para ir em frente aqui e escolher se algo um pouco diferente. Este aqui, por que Preciso de um voluntário. Quem gostaria de ter uma lâmpada de mesa hoje? OK, e quanto a alguém um pouco - você está no fim? Vamos lá para baixo. Agora, gostaria de participar, ou apenas dizer que começar com a lâmpada de mesa? VANESSA: [inaudível]. DAVID MALAN: OK. Excelente, o que é que você chama? Vanessa? David. Prazer em conhecê lo. Então vamos lá para cima e Vanessa vai para assumir o controle da minha teclado por apenas um momento. E o que eu fiz aqui, apenas para o tempo de bem, como eu percebi o Wi-Fi foi um pouco lento, risco, o ambiente de programação que estamos utilizando, também pode ser baixado e executado em seu computador local. Então o que eu fiz antes da palestra, em Caso isso aconteça, é que eu baixei todos os arquivos que estamos prestes a jogar com para que eles possam rodar um pouco mais rapidamente aqui no meu laptop. É por isso que agora eu estou vendo uma interface específica-Mac. Então, eu estou indo para ir em frente e abrir um presente. Eu estou indo para ir em frente agora e tela cheia da janela. E, como você verá, nós podemos muito rapidamente, como esse estudante fez, de um seus antecessores, ir do Olá mundo para uma muito mais atraente aplicação. Então, aqui estão as instruções. Oh, e nós temos uma outra coisa. Eu pensei que seria divertido, uma vez que, normalmente, estaremos filmando As câmeras desta forma. Eu pensei que seria divertido se, Vanessa, poderíamos ver o mundo através de seus olhos. Portanto, temos aqui alguns vidros do Google. [Suspiros espantado] DAVID MALAN: Nós só estará dando distância de mesa lâmpadas hoje. [Risos] Então deixe-me sugestão isso. Tudo bem, então tocar isso. OK, Vidro, gravar um vídeo. Tudo bem, Vanessa? Agora, como um aparte que não tem nada fazer com o Scratch, se você olhar ligeiramente para cima e para a direita, você vai ver o vidro literal, e você deve ver uma pequena janela retangular. Você verá todos os seus colegas sendo filmado agora? Sim. VANESSA: sim. DAVID MALAN: OK. Então, isso é bom. Vamos lançar este filme depois. Por enquanto, volte sua atenção para a tela aqui. E o que o seu antecessor fez é colocar algumas instruções na tela apenas usando um programa de pintura. Então você vai, em um momento, pressione a barra de espaço para começar. E, em seguida, algumas peças do puzzle vão para começar a mover-se na tela. E você quer bater as teclas de seta, apenas como em DDR real, de acordo com as coisas alinhando com essas setas. VANESSA: OK. DAVID MALAN: Você jogar este antes. VANESSA: Yeah. DAVID MALAN: Tudo bem, Vanessa, vá em frente e levá-la embora. [MUSIC - KAYNE WEST, "Stronger"] [Aplausos] DAVID MALAN: Então, vamos agora dar um passo disso. Então, claramente, isso é o fim do jogo. O jogo final não é Olá mundo. Mas você não tem que necessariamente fazer coisas que são tão interativo. Você também pode fazer animação. Assim, por exemplo, outro de sua sucessores fizeram este programa, que conta uma história de mais de ele implementou um jogo. Então deixe-me ir em frente e abrir aqui um programa em nossa mesmo diretório de origem a partir de hoje. Esta chamada, e vamos começar com uma história de amor cookie. E para não fazer isso também acadêmico, mas, como você vê este, acho que a mesmo que daqueles simples conceitos de programação com quem falamos sobre até agora - variáveis ​​e loops, e as condições, que seu antecessor, provavelmente, usar apenas para implementar algumas das as visualizações. Você vê aqui. Então, eu dar-lhe uma história de amor cookie. [MUSIC - GREEN DAY, "feriado"] [CRASH] [MUSIC - as tartarugas, 'Happy Together "] DAVID MALAN: Tudo bem, então não há, tivemos uma história de amor cookie. Mas, mesmo lá - [Aplausos] DAVID MALAN: Tudo bem, até lá, pensar, como aqueles corações passou de a parte inferior para a parte superior da tela, houve realmente um pouco de aleatoriedade acontecendo. E, de fato, vamos ver que, mesmo no simples de ambientes, como o Zero, como em C, pode gerar números aleatórios, ou a ilusão de números aleatórios, de modo que o jogo é um pouco mais interessante do que poderia se você tivesse absolutamente codificado tudo. No movimento que você vê, não há algum tipo de resposta. Tão logo o homem de gengibre toca a mulher do pão, ela parece afastar-se. E assim, de fato, você pode implementar, em a maioria das linguagens de programação, a noção de eventos, em que se uma mão toca por outro lado, que pode provocar alguma de seu código-fonte realmente executar. Você pode ouvir para tal as coisas na tela. Então, vamos dar um rápido passeio, então, alguns dos blocos de construção que podemos usar para atingir alguns desses objetivos. Então aqui está o que vamos doravante chamar um comunicado. A declaração passa a ser roxo em Zero, um pouco mais ou menos assim, mas isso é arbitrário. A afirmação é apenas uma peça do puzzle ou, mais geralmente, uma instrução, que diz ao computador para fazer alguma coisa, uma declaração. Então, aqui está um exemplo simples. Diga Olá mundo. Outro poderia ser esperar um segundo. Portanto, esta parte do enigma, que é apoiado em risco, vamos deixar o seu caracteres pausa para alguns número de segundos. Isto, também, é apenas uma declaração. Aqui ao lado, temos um outro mais um interessante jogo de som miado, e uma pequena seta significa que em risco, este é um menu drop-down. Assim, você pode importar sons. Você pode gravar sons e fazer outra coisas divertidas em zero. E que, também, embora, no final do dia, é apenas uma declaração. Mas agora vamos introduzir uma mais interessante peça, que conhecido como um Expressão booleana. Capital B, em homenagem um sujeito chamado Bool. E uma expressão booleana é apenas um parte do enigma, ou, mais geralmente, a pedaço de informação que é verdadeira ou falsa - um ou zero, sim ou não. Por isso, é apenas um daqueles dois opostos. Assim, uma tal expressão booleana no mundo do Scratch parece que esse azul Puzzle Piece. E está fazendo uma pergunta, rato para baixo, e que pode ser, de Claro, verdadeiro ou falso. Assim, com esta peça de quebra-cabeça em risco, bem, você vai ser capaz de detectar se um decifrar se o mouse é, de fato, sendo pressionado pela interação humana com o seu programa. Este é um pouco mais abstrato, mas estas duas caixas brancas são apenas para números. Assim, você pode fazer coisas como esta é número menor do que os outros? E se assim for, risco vai se comportar uma forma ou de outra. Este é um pouco mais gráfica. É, se o sprite, se o gato, por exemplo, é realmente tocando o ponteiro do mouse. Então, se a cabeça pequena seta está pairando sobre o gato, então esta peça do puzzle irá avaliar para true. Será verdade, caso em que, se usar esta expressão booleana, como veremos ver em um momento, em um ramo, você pode quer fazer isso, ou você pode fazer isso, tanto como se tivéssemos uma condição que marcada, há mais uma última pessoa no quarto? Se assim for, adicione um. Caso contrário, não se preocupe mais. Assim, uma expressão booleana também pode ser e-ed juntos ou ou-juntos ed. Assim, você pode combinar expressões booleanas e dizer isso e isso deve ser verdadeiro para a coisa toda para ser verdade. E aqui está um exemplo do mundo mais real. Se você já usou CS50 Cursos de fazer curso compras, essas caixas de seleção lá, onde se verifique que a caixa ao lado aos cursos, que vão dizer, sim, só me mostrar cursos para os quais o valor Q é 4.5 ou superior. Se você desmarque-a, não, não preocupar com isso. Ou da mesma forma, à direita, não faz Conflito com cursos que estou tendo, isso é verdadeiro ou falso. É apenas uma expressão booleana. Então todo esse tempo, quando você já usou sites com caixas de seleção, você é apenas alternando o equivalente a um valor booleano expressão ligado e desligado. Então, de que forma você usa isso? Bem, em Scratch, veremos em um momento que existem condições que semelhante a este. E esse é o tipo de sensata, porque muito como em pseudocódigo, nós recuado o tipo de peças de quebra-cabeça em forma de U, a média que nada dentro do referido U é vai executar, ou não, dependendo de onde ele é. Então, se a expressão booleana, então tudo o que está dentro vai ser executado. Enquanto isso, há um bloco if / else. Então se você quer um ramo que vai este ou daquela maneira, risco nos dá isso. E por essa lógica, agora, apesar de que peça do puzzle é claramente muito pequeno para calçar outra coisa dentro dele, as peças do puzzle do zero, eles são só vai crescer. Quando você arrastar e soltar sobre algo, ela só vai crescer para caber tudo o que é que você está tentando fazer. Assim, podemos ter duas dessas coisas e fazer um garfo de três vias na estrada para que você quer fazer isso, ou aquilo, ou essa outra coisa apenas aninhando-los desse modo. Claro que, se você fizer isso também muito, ele começa a ficar feio. Mas nesse ponto, você está, na verdade, provavelmente não programação muito bem. E, de modo que será recorrente tema, também, que de estilo. Quão bem realmente formatar o seu código? Ou como bem você projetar seu código? Mas mais sobre isso no futuro. E agora temos loops. Há um loop para sempre agradável em Scratch que literalmente significa que - fazer tudo o que está dentro deste novo e de novo, e de novo. Você pode ser mais concreto e dizer: faça o seguinte coisa 10 vezes. Você também pode usar variáveis. Você pode chegar a qualquer nome em que pouco cair para baixo e dizer, me dê um variável chamada n e definir é igual a algum valor. E então você pode ter funções. Mas mais sobre aqueles em apenas um momento. Deixe-me voltar para a minha Raspe interface. E deixe-me ir em frente neste momento. E vamos em frente e abrir, digamos, um exemplo de - isso é um pouco mais interessante. Deixe-me ir em frente, e, na verdade, deixe-me fazer isso sozinho. Eu não preciso de abrir um presente. Deixe-me ir para Arquivo, Novo. Eu estou indo para ir a eventos. Eu estou indo para ir quando bandeira verde clicado, e eu estou indo para ir para som. E eu estou indo para arrastar e soltar este peça do puzzle, jogar meow som. Ele travas juntos. E agora, se eu clicar na bandeira verde - [MEOW SOUND] DAVID MALAN: Adorable. OK, então agora vamos fazer algo um pouco mais lógico apenas para demonstrar que podemos, por agora. Eu estou indo para destravar isso esse cara. Eu estou indo para ir para controle. E eu vou pegar uma doença. Então, se alguma coisa, então. Então é assim que ele olha lá. Então eu preciso de uma expressão booleana. E deixe-me ir em frente e dizer: deixe-me ir para os operadores. Eu vou fazer algo um pouco mathy, apenas por diversão. Eu estou indo para ir aqui e dizer que, se algo que é menor do que qualquer outra coisa, vá em frente e fazer alguma coisa. Então, agora, você sabe, um bloco ao acaso. Então, observe como, se eu passar o mouse sobre este coisa aqui, que se encaixará lá. Então, agora, o aviso prévio, eu estou começando a fazer algo já mais logicamente interessante. Se um número aleatório entre 1 e 10 é menor do que, digamos seis. Se eu escolher seis, que, essencialmente, meios, faça o seguinte com 50% probabilidade. É como jogar uma moeda. Agora, eu posso fazer algo condicionalmente. E esse algo eu vou fazer é jogar o som. Então, agora, quando eu clico na tela bandeira, é como jogar uma moeda. [MEOW SOUND] DAVID MALAN: Foi cabeças ou outros enfeites lá. Vamos fazê-lo novamente. [MEOW SOUND] DAVID MALAN: Heads novamente. [MEOW SOUND] DAVID MALAN: Heads novamente. Ufa, OK. Caudas esse tempo. Assim, 50% do tempo, se fizermos isso infinitamente longo, teremos 50% de miados e 50% silêncios. Portanto, há, apenas um edifício básico bloco que nos permite fazer isso. Mas este é o tipo de tedioso que eu tenho para manter a clicar nesse botão. Então, vamos simplesmente arrastar e jogar todos os que estão longe. Se você arrastou para o meio, eles simplesmente apagar-se. Deixe-me ir até controlar. Deixe-me ir para sempre. E desta vez, eu vou fazer minorly algo irritante. [Risos] DAVID MALAN: E deixe-me ir em frente e fazer o controle. Espere um segundo, só assim não é muito irritante. [MEOW SOUND] DAVID MALAN: Isso não é natural. OK. [MEOW SOUND] DAVID MALAN: E observe o que está, bom sobre o risco, para aqueles de vocês que ter experiência prévia de programação, você Não é necessário para iniciar e parar. Você não precisa compilar. Você acabou de mudar, eo programa irá adaptar-se dinamicamente. Então, isso está ficando um pouco interessante. Mas vamos dar um passo adiante. Deixe-me ir em frente e conseguir livrar desse programa. [MEOW SOUND] DAVID MALAN: Isso é o que vamos chamar um bug em risco. Ele não deveria continuar fazendo esse som. Então, nós vamos dizer-lhe para parar. Tudo bem, então agora eu estou indo para ir para - Vou deixar MIT sei. Nós vamos passar por cima aqui para sempre. E agora, eu quero fazer alguma coisa uma e outra vez. Eu estou indo para ir para Controle. E vamos ver, eu estou indo para arrastar minha condição se lá. Então agora perceber a lógica. Quando a bandeira verde é clicado, fazer algo para sempre, mas só faça isso alguma coisa, se essa outra coisa é verdade. Eu estou indo para ir, vamos dizer, sentindo. E eu estou indo para ir em frente e escolher tocar e soltá-lo lá. Essa é uma expressão booleana. E agora, notar, neste queda menu, há alguns valores pré-definidos. Então eu posso dizer, você está tocando a borda da tela? Ou você está tocando o ponteiro do mouse, a seta na tela? Então, eu vou fazer isso. E se assim for, então eu vou em frente e jogar meow som. Então agora eu meio que tenho a início de um jogo - um jogo adorável. [MEOW SOUND] DAVID MALAN: OK, uma adorável, jogo de buggy. Deixe-me esperar, vamos dizer, um segundo ali. Agora jogar novamente, clicando em a bandeira verde. [MEOW SOUND] DAVID MALAN: Então agora é como acariciar um gato. [MEOW SOUND] DAVID MALAN: Tudo bem, agora isso que eu fazia antes. Muito tarde, torna-se uma espécie de fácil de fazer coisas estúpidas. Então deixe-me entrar aqui. Vamos dizer que foi acariciar o gato. Vamos agora abrir Não acariciar o gato. Agora, se jogarmos um presente, você pode imaginar, se você estiver olhando para a tela - [MEOW SOUND] DAVID MALAN: Agora, se eu acariciar o gato [ROAR LION'S] DAVID MALAN: Então, na verdade, não acariciar o gato nesse caso. Então, agora só temos um exemplo de uma ramo que vai em duas direções. Agora, deixe-me ir em frente e abrir uma outra aqui. Esta, também, entre a fonte arquivos de código para o dia. Então deixe-me voltar para a minha Fonte diretório e entrar, vamos escolher esse cara aqui e veja o que é diferente. Uau, tudo bem, então agora ele está ficando um pouco mais complexa. E antes de ver o que esse cara faz, vamos tentar inferir, a partir do programa no lado direito. E agora scratch permite claramente nos tem vários scripts, múltiplos programas associados a um duende, com um personagem, e, aparentemente, ambos estão indo para executar em sintonia. Porque ambos os programas começa com ao verde bandeira cliques, este é insinuando um tópico mais avançado, com que alguns de vocês podem estar familiarizados, conhecido como threading, ou multi-threading. Acontece que, longa história curta, computadores hoje pode essencialmente fazer múltipla as coisas de uma vez. Ou pode fazer uma coisa de cada vez para rápido que você nem percebe que ele está realmente fazendo um coisa de cada vez. Mas, por enquanto, vamos supor que ambos estes programas vão executar a ao mesmo tempo. E notem, ambos têm sempre Puzzle Pieces. Assim, ambos estão indo para continuar funcionando até que eu bati o sinal vermelho. Então, o que eles vão fazer? No lado esquerdo, eu sou aparentemente declarar uma variável chamada silenciado. Então, eu não chamá-lo de algo como chato como N. Chamei-mudo esta tempo para transmitir um significado. Eu defini-lo igual a zero. Vamos pensar que, como falso, ou vamos pensar nisso como False. Agora, para sempre fazer o seguinte. Se a barra de espaço do teclado é pressionado, então se mudo igual a zero, em seguida, mudar mudo para igual um. Else, definir silenciado a zero. Então, logicamente, apesar de que é um todo monte de peças de quebra-cabeça que é apenas dizendo que, quando eu bater a barra de espaço, o que devo fazer para a variável chamado silenciado? Mudá-la de um a zero, ou zero a um. Isto é tudo. Então, é como ligar um interruptor de luz ligado ou desligado e lembrando, com um variável, o que eu fiz isso. Enquanto isso, do lado direito, em termos genéricos, qual é o propósito de o script do lado direito? ALUNO: Para reproduzir o som do leão do mar. DAVID MALAN: Para reproduzir som Sea Lion, se ele não está mudo, por natureza dessa variável. Então, nós estamos compartilhando estado, por assim dizer, compartilhamento de informações entre estes dois os scripts, pois, notar aqui, estamos sempre fazendo o seguinte. Se mudo é zero, por isso, se não é silenciado - se silenciado é falsa, então jogar este som do leão de mar. E pensa consigo mesmo, oi, oi, oi, para de dois segundos, esperar um momento, e então clique aqui. Então, se nós vamos agora aqui à esquerda, de onde é esse cara, e bateu o bandeira verde, [SEA LION SOUND] DAVID MALAN: Em que ponto este ficar muito chato? Porque isso só vai durar para sempre. Então, às vezes, loops infinitos, por assim dizer, são deliberadas. Mas, neste caso, assim como I pressione a barra de espaço, ele pára. Agora o programa não parou. Ele ainda está em execução nestes loops. Mas se eu tiver a barra de espaço novamente - [SEA LION SOUND] DAVID MALAN: Ele vai pegar de onde ele parou. Portanto, não há uma maneira de fazer algo de novo e de novo, mas, que tempo, só condicionalmente. Bem, já que estamos nesse sentido de fazer coisas de novo e de novo, deixe-me entrar em outro exemplo disso aqui. Este chamaremos contar carneirinhos. E observe o que esse cara faz. Na verdade, é um pouco mais parecido com o pseudocódigo jogamos com a Quarta-feira, em que ele define algumas balcão, pensar é como N novamente, para zero, sempre que ele faz a seguir. Ele diz que o valor do contador para um em segundo lugar, aguarda um segundo, e em seguida, altera o contador a uma. E, neste contexto, que só significa incrementa. Assim, ele adiciona um a ele. Portanto, esta é literalmente - não é bem o que pensamos como contar carneiros. É a ovelha fazendo a contagem, para sempre, acima de zero. Assim, podemos fazer coisas semelhantes lá, logicamente. Mas agora vamos tentar limpar algumas dessas coisas. Deixe-me ir em frente agora em uma simples exemplo, onde o nosso gato está indo só para começar a tossir. Tudo bem, então aqui temos tosse 0 - cientistas da computação começar contagem de 0. Portanto, este gato é só ir a tosse por três vezes. E aqui está como eu implementei isso. Quando a bandeira verde é clicado, tosse, esperar, tosse, espere, tosse, espere. E eu fiz isso apenas arrastando e soltando peças do puzzle. Ou se você começar a mexer com o Scratch, você verá que você pode realmente peças duplicar para que você possa fazer as coisas mais rapidamente, sem arrastar e soltando ad nauseum. Mas não estamos no melhor caminho aqui. Porque como posso fazê-lo tossir pela quarta vez? Bem, eu poderia classificar de descer aqui. Eu poderia duplicar e, em seguida, cole este aí. Como posso fazê-lo tossir pela quinta vez? Bem, copie e cole novamente. Ou arrastar e soltar novamente. E muito rapidamente, este programa começa para obter realmente redundante, muito longo, mas realmente desinteressante. Mas há uma maneira de limpar isso. Qual é a maneira mais óbvia para limpar isso? OK, então nós realmente pode realmente ir fora e, quando você bater o espaço bar, tê-lo tossir. Mas se eu quiser fazer algo repetidamente, lembre-se que nós temos algum controle constrói. Deixe-me passar esta fora do Assim, ir sob controle. Deixe-me só fazer uma repetição, dizer, três vezes. E agora deixe-me roubar dessas peças de quebra-cabeça. Deixe-me tirar isso aqui. Deixe-me jogar estes afastado completamente. E agora, eu tenho uma melhor programa concebido. Por quê? Se eu quiser alterar o número de vezes Este gato tosse, tudo o que tenho para fazer é mudar uma variável ou um valor, em vez de três, ou quatro, ou cinco ou seis. Ou eu poderia fazer algo de forma condicional, mesmo, com o espaço bar se eu quisesse. Portanto, este é um princípio geral. Uma vez que você começar a copiar e colar o código, se está em risco, ou em C, você está fazendo algo errado, o mais provável. Ou, pelo menos, uma vez que você superou alguns número razoável de cópias e pastas, você provavelmente está fazendo algo errado. Mas você sabe o quê? Eu realmente não gosto disso. Este não é o desenho mais limpo. Eu gostaria que houvesse uma parte do enigma chamado tossir, porque então eu não faria tem que implementar isso mesmo, a moda antiga, por tendo dizer, e esperar - e se eles eram apenas uma peça do puzzle tosse. Bem, eu posso realmente fazer isso. Deixe-me ir com mais blocos, clique em Faça um bloco, e agora eu tenho esse janela aqui. Eu vou chamar essa coisa de tosse. Eu estou indo para ir em frente e clique em OK. E agora, o aviso prévio, eu recebo uma nova partida peça que está curvada na parte superior. E o que eu vou fazer com isso, eu sou vai roubar esses blocos. Vou colocá-los aqui. E agora, com essas três partes, eu tenho implementado o que eu vou chamar um função ou um procedimento, ou alguns dos você pode conhecê-lo como um método. Pequenas diferenças entre as palavras. Mas, por enquanto, vamos apenas chamar isso de uma função. Esta é apenas uma nova peça do puzzle. Agora ele é implementado como esta. Mas note que zero nos deu um representação física de que toda bloquear aqui. Então, agora, eu posso simplesmente arrastar esta aqui, dizer, repita três vezes, e o que vai acontecer agora, quando eu jogar Nesse script, é apenas um programa está em execução ao mesmo tempo. Há apenas um quando bandeira verde clicado. Mas esse bloco roxo chamado tosse é efetivamente dizendo zero, cada vez que você ver que parte do enigma, na verdade executar estes passos que acontecer para implementar manualmente. Então, esse é o tipo de arrumado. Mas agora, acho que eu decidi, eu não quero esse gato só a tossir. Eu quero que ele seja capaz desprezível também. Bem, como poderíamos ir sobre implementação espirro? Bem, eu poderia muito bem fazer a mesma coisa. Eu poderia fazer um outro bloco. Eu poderia chamar este espirro, clique em OK. Então, aqui eu poderia realmente ter, deixe-me duplicar este - e lá é onde você deve se sentir como você provavelmente não está fazendo algo em o melhor caminho. Eu poderia dizer algo como: achoo, por um segundo. Espere um segundo. Agora eu tenho um novo bloco chamado espirro. E, de fato, não é. Mas isso, também, deve começar a sentir - talvez não na primeira semana de aula, mas pelo segundo - apenas um pouco redundante. Claramente, há alguma redundância aqui. Então deixe-me propor, em vez disso, que refinar esta definição como se segue. Deixe-me ir para o meu menu Arquivo. Eu não estou indo para salvar esta versão. Eu estou indo para ir em um dos meus arquivos premade aqui. E eu estou indo para ir em frente e abrir tosse 2. Gritos que era tosse 2. Deixe-me ir em frente e abrir tosse 3, que é este diretório de origem. Tosse 3 e observe - oh, eu disse a história na ordem errada. Deixe-me recuperar desta história. A história que eu queria te dizer termina com tosse 4 - aí está. E daí se eu, em vez disso, definir a maior parte do enigma chamado definir, diga a palavra n vezes. Espirro é apenas, aparentemente, em risco, achoo. Assim, expressá-lo como uma palavra, apenas porque essa é a restrição do programa. E a tosse é [TOSSE], mas a tosse, C-O-L-G-H. Então, isso é apenas dois palavras diferentes fazendo, essencialmente, a mesma coisa. Então, eu posso realmente fazer uma novo bloco como esta. Eu não uso essa opção de menu anterior. Mas quando você clique em Criar Block, você pode escolher algumas opções. E você pode dizer que este bloco efetivamente leva alguns insumos, caso contrário, conhecido como argumentos ou parâmetros, de modo que você pode modificar o comportamento de seu bloco. Então o que eu fiz há pouco foi Liguei para este bloco Say. E então eu disse, é preciso uma entrada de string. E agora perceber, por padrão, diz uma corda. A corda é apenas uma palavra, ou um frase, para os nossos propósitos. Mas eu só vou colocar alguns texto de espaço reservado lá, assim como em um site, quando você vê nome de utilizador, ou senha e, em seguida, ele desaparece quando você começa a digitar. Isso é tudo que existe. E agora eu vou adicionar uma entrada de número. E eu vou ligar para este n - mas isso é muito arbitrária. E depois é só um rótulo, apenas para fazer este bloco um pouco mais de auto- explicativo - vezes, é o que eu fiz. E o resultado final é que eu tenho um bloco que se parece com isso. E agora perceber, eu estou usando um bloco de repetição. Mas ao invés de difícil codificação três, eu sou arrastando e soltando n lá, então eu pode parametrizar a função. Eu posso fazer esta função fazer algo um número diferente de vezes baseados em desse valor. E observe, por exemplo, isso é o que eu fiz aqui, se eu arrastar palavra, posso dizer que não é um palavra codificado, mas o que é passada para um segundo. Enquanto isso, como faço para re-implementar tossir? Eu em vez definir a tosse como dizendo tosse n vezes. Assim, em breve, estou passando por isso rapidamente, mas a ideia básica é assim como você começa a ver em seu programa que, espere um minuto, eu fiz algo muito parecido com isso antes, posso fatorar alguns comum funcionalidade? Posso decompor o que estou fazendo em algumas idéias básicas? Isso é o que estamos fazendo aqui. E eu tenho empilhados essas coisas, visualmente, em cima da outra porque isso é prova de que idéia de começando com o binário, indo para ASCII fazer programas gráficos, tipo de camadas idéias cada vez mais complexas em topo da outra. A mesma idéia aqui. Comecei do zero, implementando tosse, tosse, então percebi é realmente apenas dizer alguma coisa. Então deixe-me em vez implementar o noção de dizer alguma coisa. E em cima disso, posso implementar achoo, ou tosse? E nós poderíamos fazer mais, tais variantes ainda. Assim, a partir desse princípio básico, podemos começar a fazer cada vez mais complexos programas. Deixe-me abrir um presente. Nós podemos realmente ter vários sprites interagindo na tela ao mesmo tempo. Se eu vou para o meu diretório de origem e pegar um chamado Threads, lembre-se que uma linha é realmente muito a capacidade de dois scripts para executar lado a lado, ao mesmo tempo. Observe agora, têm ambos um sprite de aves e um sprite do gato, sendo que ambos têm seus próprios scripts. Assim, o aviso prévio, quando eu clico no gato, eu recebo esses scripts. Quando clico no pássaro, Eu recebo esses scripts. Assim, cada um desses caras tem seus próprios programas. Quando clico agora a bandeira verde, observe que o que este programa faz é tenho o gato, incrivelmente lentamente, perseguir o pássaro. Mas o gato tem a vantagem de ter foi programado de tal maneira que não importa onde o pássaro é, o gato vai em direção a ele. Nós podemos jogar esse jogo muito mais rápido. Então, se eu estou no gato, perceber que eu sou usando, digamos mover uma passos. Vamos tê-lo mover-se em cinco etapas cada vez, para cinco pontos de uma vez. Deixe-me clica em jogar. [ROAR LION'S] DAVID MALAN: Tudo bem, agora podemos realmente dar o gato a vantagem. 10 passos de cada vez. [ROAR LION'S] DAVID MALAN: Tudo bem, então muito rapidamente, torna-se uma pequena vantagem para o gato. Mas eu vou acenar com a mão no alguns dos detalhes. Mas a razão que esse caminho é começando um pouco diferente de cada vez é que eu estou fazendo um pouco de aleatoriedade. Na verdade, estou apontando o gato em um direção diferente dependendo de onde eu quero que ele comece a fim de que cada vez o jogo, ou a animação, é um pouco diferente. Agora, deixe-me apresentar um outra construção aqui. Portanto, neste caso, tivemos funções. Há também vai ser uma peça de quebra-cabeça conhecida como uma matriz ou uma lista, que permite armazenar vários valores dentro de uma variável. Vimos threads, e agora há Events. Então aqui está um evento usando esses dois caras aqui. E se eu abrir o arquivo chamado Eventos a partir de exemplos de hoje, vamos ver um programa que parece um pouco como isso. E agora percebe esse cara - para perceber que eu tenho o azul Muppet clicado - ele só faz o seguinte. Ele não tem um daqueles verdes peças do puzzle bandeira. Ele tem um quando eu receber evento - então alguma palavra arbitrária. Eu digitei o evento lá - ele vai dizer, Polo, durante dois segundos. Assim, aqueles de vocês que estão familiarizados com este jogo pode saber onde isso vai dar. Se eu agora clique no Muppet laranja, o programa faz isso. Para sempre, se a barra de espaço do teclado suprimida, ele vai dizer, Marco, por dois segundos na tela. Mas ele também vai usar isso mais sofisticado bloquear conhecido como broadcast. Ele vai transmitir Citação fecha aspas, "evento". Enquanto isso, o cara azul, aviso, é escutando entre aspas, "evento". Então, de alguma forma, agora, podemos ter dois sprites interagindo. E quando chegarmos à programação web, no final do prazo, da mesma forma isso vai ser vantajoso ter o seu site fazer algo em resposta a, por exemplo, um clique do teclado. Então deixe-me ir em frente e pressione a barra de espaço. Laranja cara diz Marco. Azul cara diz Polo. Se eu fizer cara de novo laranja diz Marco, azul cara diz polo. Então, vamos dar um passo adiante. Desta vez, iremos, provavelmente, apenas mais alguns minutos aqui. Será que temos - lâmpada de mesa, vamos lá para baixo. Você está certo no final. OK, você pode tanto vir para cima. Temos luminárias para todos. Vamos. Eu não sei se podemos manter esta mordaça ridículo up todo o semestre, no entanto. Tudo bem, vamos lá para baixo. E nesse meio tempo, temos a seguindo exemplos para puxar para cima, só para acelerar as coisas agora, de tal forma que tem uma manifestação de outra predecessor de vocês usando o mesmos blocos básicos de construção. Qual é o seu nome? JOHN: John. DAVID MALAN: John. Bom para mim você. E? SETZ: Setz. DAVID MALAN: Setz, bom para mim você. John, se você gostaria de vir em primeiro lugar, este é um velho jogo de escola chamado Frogger. Você pode usar o teclado para isso também. E o objetivo é atravessar na rua e água. [FROGGER MÚSICA E reproduz o som] DAVID MALAN: Sinto muito, não lâmpada de mesa para você hoje. Tudo bem, Setz, não é gostaria de vir em cima? Tudo bem, vamos fazê-lo novamente. SETZ: Será que eu use as setas? DAVID MALAN: Apenas as teclas de seta. Cima, baixo, esquerda, direita. [FROGGER MÚSICA E reproduz o som] DAVID MALAN: Vamos chamá-los consolação prêmios hoje, então, muito bem feito. Aqui, para ambos, John e Setz. Parabéns, tudo bem. Então, novamente, como este jogo tem, pensar sobre o que está acontecendo? Um deles, há claramente um monte de movimento. Mas vimos como, com o gato eo pássaro exemplo, como você pode fazer o ilusão de movimento movendo apenas alguns número de pixels e outra vez. E se você tem um bloco para sempre, você poderia ter estes carros fazendo isso para sempre. Temos a capacidade de tem alguma aleatoriedade. Portanto, este jogo não tem que ser exatamente o mesmo de cada vez. Esses registros, os carros, pode começar em tempos ligeiramente diferentes, para que o jogo em si é mais interessante com cada jogo. E Enquanto isso, vimos a capacidade para ouvir a barra de espaço. Mas é evidente que, em risco, pode também ouvir para cima, baixo, esquerda, direita, e realmente qualquer tecla no teclado. E você também pode fazer algumas outras coisas. Deixe-me ir à frente e voltar para a versão web. Deixe-me ir para a nossa coleção de exemplos aqui. E em meu estúdio, o vídeo que é, essencialmente, uma pasta em scratch.mit.edu. Temos as versões web das todos esses projetos. E vamos ver se eu posso pegar meu computador para cooperar aqui. Isto é escrito por um dos nossos amigos no MIT, chamado Move o Butterfly. E uma vez que este se abre, este é vai realmente usar mais de hardware do meu computador. Arranhões passa a ser implementado com Flash. Flash pode falar com sua webcam, se você tiver um. Então, se eu ir em frente e tela cheia este aqui, clique na bandeira verde, o aviso que a mensagem de segurança do flash está dizendo, você quer permitir usar minha webcam? Normalmente, você deve provavelmente diria Negar. Mas neste caso, vamos dizer permitir. Então eu vou dizer Chrome para permitir que este também. E agora, em apenas um momento, você me ver, sim, me. E se a minha mão sobe - Tenho que mudar a minha não cabeça ao mesmo tempo. Há também uma reflexão no ecrã. Vamos, lá vamos nós - você pode movê-la na tela, pois há também peças de quebra-cabeça - oh, você sabe o que é, é porque você também ver a tela do projetor atrás de mim. Então nós temos um pouco de infinito coisa acontecendo lá. Tudo bem, então eu vou jogar aqui. Lá vamos nós. Portanto, há também uma peça do puzzle que diz que, quando você vê o movimento abaixo um dos sprites, você pode tê-lo ir cima, baixo, esquerda, direita ou afins. Então nós temos um pouco de realidade virtual acontecendo aqui, bem, tudo dentro do confins do meu navegador, apenas aqui, usando minha webcam. Então, qual é, em seguida, no horizonte. O primeiro conjunto de problemas, como você vai ver, ou o site vai ficar online mais tarde hoje à noite no cs50.net, é bastante muito vai ser em aberto. E implementar um projecto Scratch de interesse para você, um jogo, uma interação, algo artístico, e desafie-se a usar qualquer número dessas peças de quebra-cabeça. E isso pode ser interativo desta forma. Ou pode ser algo mais deliberadamente feito para contar uma história. E, de fato, que é onde vamos terminar fora hoje, com um exemplo final. Deixe-me ir em risco no local. Deixe-me ir em frente e abrir isso e jogar um último programa escrito por um de seus antecessores, ou seja, que aqui. Bom, aumentar o volume para um presente. [Música tocando] Narrador: Na próxima CS50, David convida um voluntário no palco. DAVID MALAN: Para esta demonstração, vamos precisar de um voluntário. Gostaria de vir para baixo? Qual é o seu nome? Seguindo em frente.