goncalopereira12 Posted February 7, 2023 at 06:52 PM Report Share #630094 Posted February 7, 2023 at 06:52 PM (edited) var coluna, readkey: integer ; var coluna, readkey: integer ; var Gasoleo, KMINICIAL, KMFINAL, sub: Real; Begin for coluna:= 5 to 50 do Begin clrscr ; gotoxy( 1, 2 ); writeln( 'Bruum... Pressione uma tecla para parar...' ); gotoxy( coluna, 7 ); writeln( ' - ', #177, #177, #177, #177, #177, #177 ); gotoxy( coluna, 8 ); writeln( '- - ', #177, #177, #177, #177, ' ', #177 ); gotoxy( coluna, 9 ); writeln( '- - ', #177, #177, #177, #177, #177, #177, #177, #177 ); gotoxy( coluna, 10 ); writeln( ' o o' ); writeln( '--------------------------------------------------------------'); delay( 400 ); if(keypressed ) then break ; repeat tecla:=readkey; tecla:=upcase (tecla); case tecla of #80 :down; #72 :up; #77:right; #75 :left; End ; End. Estou ainda a começar mas não estou a conseguir resolver este problema, se alguém me poder ajudar. Agradecia, obrigado. Edited February 8, 2023 at 09:23 AM by nunopicado Syntax Highlight Link to comment Share on other sites More sharing options...
nunopicado Posted February 8, 2023 at 09:41 AM Report Share #630096 Posted February 8, 2023 at 09:41 AM Bom dia Gonçalo. Peço-te que, quando coloques posts no forum, sejas um pouco mais explícito. Colocar praticamente apenas um código sem dizeres exatamente qual a tua dificuldade não convida ninguém a responder, além de ser contra as regras do fórum. Dito isto, o código não é muito grande e saltou à vista uma coisa: As teclas são caracteres especiais, e como tal, precisam de tratamento especial. Sempre que tocas numa seta, o programa recebe não um código, mas dois. O primeiro é um caracter nulo (#0), e só de seguida recebe o código da tecla pressionada. Assim: Não uses UPCASE para trabalhar com as setas. O UPCASE serve para letras, e neste caso, além de não ajudar, pode até prejudicar. Tens de fazer um readkey para te ler o #0, e outro readkey para ler a tecla da seta. Ou seja, a secção de leitura da tecla ficaria mais ou menos isto: Tecla := ReadKey; if Tecla = #0 then begin Tecla := ReadKey; case Tecla of #80 : Down; #72 : Up; #77 : Right; #75 : Left; end; end; Segunda coisa: if(keypressed ) then break ; Ao fazeres isto, ele já nem sequer vai ler a tecla. Estás a sair do ciclo assim que uma tecla é pressionada, pelo que ele já não faz mais nada até o fim do ciclo. Terceira coisa: Tens um repeat Mas não tens um "until". Sem isso, o programa nem sequer compila. 1 Report "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
goncalopereira12 Posted February 8, 2023 at 04:50 PM Author Report Share #630105 Posted February 8, 2023 at 04:50 PM (edited) Boa tarde. Peço desde já desculpa, sou novo nestes fórums e não sabia. Muito obrigado, estou a precisar de ajuda agora para um outro programa que eu decidi começar, visto que o de ontem estava um bocado complicado para mim, será que poderia me ajudar a resolver, é o seguinte eu queria quando solicitado ao utilizador do programa o tempo que queria que o carro anda-se esse indivíduo dissesse por exemplo 10 segundos e o carro iria andar esses somente 10 segundos. O PROBLEMA é o carro não pára nesses mesmo segundos e eu devido à minha inexperiência não estou a conseguir resolver. Será que me poderia ajudar se não for incomodo, muito obrigado. program CarroTemporizadorproject; var tempo: integer; coluna: integer; begin WriteLn('Digite o tempo para o carro andar (em segundos):'); ReadLn(tempo); for coluna:= 5 to 500 do begin clrscr ; gotoxy( 1, 2 ); gotoxy( coluna, 7 ); writeln( ' - ', #177, #177, #177, #177, #177, #177 ); gotoxy( coluna, 8 ); writeln( '- - ', #177, #177, #177, #177, ' ', #177 ); gotoxy( coluna, 9 ); writeln( '- - ', #177, #177, #177, #177, #177, #177, #177, #177 ); gotoxy( coluna, 10 ); writeln( ' o o' ); delay( 100 ); if (keypressed) then break; else Delay(tempo); end; Edited February 8, 2023 at 04:58 PM by nunopicado Syntax Highlight Link to comment Share on other sites More sharing options...
nunopicado Posted February 8, 2023 at 05:07 PM Report Share #630106 Posted February 8, 2023 at 05:07 PM O delay para a execução do programa durante o tempo que lá metes (em milissegundos). Ou seja, se quisesses parar por 10 segundos, terias de colocar o valor 10000. No entanto, o que tu queres não é que o programa pare por 10 segundos. Queres que ele faça alguma coisa por 10 segundos. Ou seja, não podes usar a função Delay. Tens de usar uma função que te devolva a hora atual. No início do movimento guardas a hora atual e o ciclo que faz o carro mover-se continuar a correr. A cada volta do ciclo, tens de voltar a ler a hora atual e analisar se já passaram 10 segundos desde a hora que gravaste no início do ciclo. A questão que se coloca é: O PascalZim é capaz de ler a hora? Sinceramente, não faço ideia. Escolheste a pior amostra de compilador de que há memória. É tão limitado que algo tão simples como a hora não tenho a certeza que ele seja capaz de realizar. Literalmente, podias ir buscar o compilador Turbo Pascal 5.5 com que eu comecei há mais de 30 anos e mesmo com todas as suas limitações ficarias mais bem servido do que com o PascalZim. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now