Ismaeldm 5 Denunciar post Postado Agosto 3, 2012 Ola, tenho uma pequena duvida a qual não sei se é possível... Eu ainda estou estudando o Pascal (iniciando o Object Pascal), e o professor me disse claramente que, ao rodar um programa feito por esta interface "pobre" (janelinha do DOS), o computador irá executar linha a linha. Até aí tudo bem... Só que agora, me desafiei a fazer um jogo, tipo aqueles do Atari, só que um pouco diferente, e daí quero colocar um cronômetro na parte superior da tela. Mas como vou fazer isso? Se o computador entende linha a linha, como posso programar pra que o usuário possa jogar normalmente e ao mesmo tempo o cronômetro esteja ali em cima funcionando? E não é só o cronômetro, eu tbm gostaria de colocar alguns comentarios (tbm na parte superior) que depois de um certo tempo iriam sumir, até da para programar isto neste sistema de linha a linha, mas ficará confuso e desorganizado. Alguma solução? Não há como? Já andei pesquisando bastante e nem meu professor pode me ajudar, então acho que o jeito é tirar esse cronômetro e apenas calcular o tempo ao final do jogo, ainda posso pegar a hora no inicio e no final e apenas pegar a diferença de horário Compartilhar este post Link para o post Compartilhar em outros sites
bdexterholland 0 Denunciar post Postado Agosto 18, 2012 uma forma seria com threads, mas se voce for usar o turbo pascal, nao sera possivel porque ele nao suporta o mesmo. Procure no google sobre como criar o loop de um jogo. voce observara que precisara manter um loop principal que ficara ativo ate que receba um comando de finalizacao. este loop sera responsavel por atualizar a tela e, talvez, interceptar os dispositivos de entrada. com isto, voce podera criar uma especie de sistema de mensagens e seu jogo respondera estas mensagens.... eh claro, esta sao algumas possibilidades... Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Setembro 10, 2012 Bom olha, se tu estiver usando uma ide mais sofisticada como o Delphi ou o Lazarus, é muito fácil criar uma thread, você pode fazer isso de algumas maneiras. Uma delas é criando uma classe que herde a classe TThread. Outra maneira é usando a função BeginThread do Windows. Vou mostrar um exemplo da função BeginThread, mas já vou avisando que é uma thread muito simples e não faço nenhum controle dela. Aqui está a função que vai ser executada pela thread: function FuncaoExecutadaPelaThread(ThreadObjPtr: Pointer): PtrInt; begin a := TForm1(ThreadObjPtr); form1.Button1.Caption := ''; while true do begin //aqui você pode colocar o códogio do teu cronômetro Sleep(10); //aguarda 10 milésimos de segundos antes de continuar end; end; E aqui a thread é criada e executada: function criaTrhead; var iID: longword; hThread: HANDLE; begin hThread := BeginThread(nil, 0, @FuncaoExecutadaPelaThread, pointer(algumaVariavelQueDejaApontarDentroDaThread), 0, &iID); end A sim, e antes que eu me esqueça, para funcionar, tu tem que "colocar" a unit "windows" nas uses do teu programa. Tu pode encontrar na internet artigos sobre a função CreateThread, também do Windows. Mas não funciona muito bem no Pascal. Mais uma dica: Estude um pouco sobre thread. Vai ver que, quando precisar, poderá usar mais de um núcleo do processador come elas. Compartilhar este post Link para o post Compartilhar em outros sites