Coder Social home page Coder Social logo

semaforoblockly's People

Contributors

camelo003 avatar

Stargazers

 avatar

Watchers

 avatar

semaforoblockly's Issues

Emoji não renderizados no menu dropdown dos blocos

No bloco de semáforo o menu dropdown dá a opção de escolher qual luz alterar: vermelha, amarela ou verde, mostrando um emoji de círculo com a respectiva cor. Porém alguns navegadores não renderizam corretamente os emojis verde e amarelo. A solução por ora vai ser escrever o nome da cor por extenso.

A definição das opções no menuzinho dropdown estão no arquivo trafficLight.js.

Syntax Error ao dar Play!

Navegador

Firefox

Passos de reproducao

  1. Colocar um semaforo no ambiente
    image
    image
  2. Apertar Play!

Detalhes

image

Uncaught SyntaxError: expected expression, got ';'

Linha 1 de script.js:

var myTrafficLights = [];

Não responsiva (ruim no celular)

O site razoavelmente responde bem no mobile. Isso é, é possível manipular os blocos com touch, deslizar para realizar um movimento panorâmico e gesto de pinça para zoom (apesar de invertido). Mas idealmente os blocos deveriam aparecer maiores quando no celular e não dividir espaço com o canvas do cruzamento.

Sugestão de solução: quando no mobile blocos aparecem em tela cheia junto de um botão "alternar", que leva pra o canvas com a simulação do cruzamento.

Carros iniciam apenas com tecla `espaço`

Fazer com que os carros comecem a passar junto com o início da execução da lógica dos blocos.

A lógica que faz os carros aparecerem está escrita no arquivo script.js, assim como a alteração da variável de controle, spawn. Isso foi feito para fins de facilitar os testes, mas convém que os carros iniciem junto da lógica dos blocos (o que hoje acontece no callback do botão play).

Gráficos estão feios

Atualmente todos os gráficos são feitos com funções de desenho da própria p5.j5. Mas podem ficar mais legais. Para fins de referência:

  • Os carros estão contidos em um retângulo de 40x60px;
  • O cruzamento inteiro está num elemento canvas de 500x500px, tendo cada pista 150px de largura.

Sugestão: fazer novos gráficos em cima de um print atual, para manter as áreas de faixa de pedestre, cruzamento...

Lógica roda concorrentemente a cada clique em 'Play!'

Para que o bloco de reloginho funcionasse da maneira correta foi feito uma loucurinha de javascript uso de funções assíncronas. Basicamente toda a configuração de blocos gera uma string que será avaliada na hora do botão Play!. O bloco do reloginho em particular gera a string do código que chama uma função assíncrona que espera por uma função síncrona (vide clock.js:6). Funcionou como o esperado, mas esse código roda concorrencialmente ao javascript da simulação, o que é o esperado, mas também concorrente à uma nova execução dos blocos após eventual clique repetido no botão Play!. Como esse código pode muito bem ser um loop infinito (lógica dos semáforos compreendida pelo bloco enquanto verdadeiro) isso leva a comportamentos inesperados (!!!).

Pelo o que li, talvez seja possível cancelar a execução assíncrona através do objeto retornado pela Promisse, mas honestamente não achei como fazer.

O que precisa acontecer: a cada vez que o botão Play! for apertado ele precisa cancelar qualquer lógica dos blocos que estiver rodando e iniciar uma nova. Taaaalvez será preciso reescrever a forma como os blocos de relógio funcionam 😮.

But hey, not a js expert here...

Falta 'condição de vitória'

É necessário algum parâmetro para garantir que o aluno completou o exercício. Esse parâmetro deve ser algo como "em X minutos Y carros passaram sem que houvesse nenhuma batida". Para isso é necessário implementar as seguintes tarefas:

  • Testes. Testar uma lógica ideal e verificar bons valores para X e Y (tempo mínimo e qtde. de carros);
  • Implementar um contador de carros que atravessam a tela em segurança;
  • Implementar um timer;
  • Implementar condição de vitória (baseada nos valores levantados nos testes).

Melhorar caixa de ferramentas Blockly

Hoje a "caixa de ferramentas" do workspace do Blockly está dividida em categorias, mas na verdade isso não é necessário. Os blocos podem estar disponíveis diretamente, isso é, sem organização por categorias. Os únicos blocos necessários são:

  • Variável verdadeiro/falso, hoje na categoria Lógica;
  • Bloco repita enquanto, hoje na categoria Loops;
  • Variável número, categoria Matemática;
  • Bloco emoji semáforo, categoria Cruzamento;
  • Bloco emoji reloginho, também categoria Cruzamento.

As definições da caixa de ferramentas acontecem no objeto toolbox, conforme visto na referência oficial.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.