Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ismaeldm

Como fazer multiplas tarefas no Pascal?

Recommended Posts

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.