Jump to content

Recommended Posts

Posted

Fala ae galera , é meu primo post 😄 // muitos vão achar que criei a acc só por duvidas , mais não criei..já venho acompanhando o fórum faz um tempo já :D//

Ae galera vou direto ao assunto : Estou fazendo um curso de desenvolvimento de software , ja aprendi sobre repetição , while e etc...E os exercícios que eles passam pra gente é muito "palha" porque quero fazer uma coisinha mais profissional ...

è o seguinte alguém pode me dar uma noção de como eu faço alguma coisa se mexer?utilizando as setas?

Exemplo :

Quero fazer um programa que aparece

-----------------------------------

| |

| |

| |

| peter |

|-----------------------------------

Eu consigo fazer aparecer todo esse "menu" e etc mais não tenho nenhuma noção de como fazer o nome se mover utilizando as setas do teclado .... (pode ser so se mover para esquerda e direita que depois eu pego o jeito )...

Vlw Galera , Estou esperando uma resposta 😄

Att Peter

Aff o desenho do "menu"ficou feio mais da pra entender

Posted

Boas Peteer

Antes de mais tens de saber como ler as setas.

Para tal, tens de aprender a usar a função readkey (da unit crt).

Também a estrutura Case ... Of irá dar jeito.

Também vais precisar dos códigos de leitura das setas:

Cima: #0 + #72

Baixo: #0 + #80

Esquerda: #0 + #75

Direita: #0 + #77

(Estes códigos são duplos, pelo que irás precisar de ler a tecla duas vezes para conseguir apanhar as teclas: O 1º readkey para ler o #0 e o 2º para ler o código específico da tecla)

Irás também precisar de posicionar o cursor num local especifico do ecrã. Para isto, verifica o procedimento GotoXY (também da unit Crt).

Estuda estas rotinas, e o mini-programa que te deixo em baixo, para perceberes o funcionamento da leitura de teclas. Se depois houver dúvidas, avisa!

program Project1;
uses
  crt;
var
  ch:char;
begin
  repeat
  ch:=readkey;
  if ch=#0 then begin
	 write('#0 + ');
	 ch:=readkey;
  end;
  Writeln('#',ord(ch));
  until ch=#27;
end.
  • Vote 1

"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.

Posted

Olá amigo antes de mais nada muito obrigado por me responder , eu ja aprendi sobre case of , readkey , gotoxy ...

Mais esse exemplo que você me mandou ficou muito bom , mais teria como me mandar 1 exemplo tipo assim

Write(´Digite seu nome ´);

Readln(nome);

....

Dai eu digito o nome e ele aparece na tela(quando compilado) dai eu posso mexer o nome para esquerda ou direita... entendes?

Posted

Isso seria fazer o trabalho por ti! 🙂

Se já aprendeste essas rotinas que indiquei, tens todas as condições para fazeres tu o programa.

Tenta, e depois mostra aqui o que fizeste, e onde exactamente tens duvidas. Aí poderemos ajudar!

  • Vote 1

"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.

Posted

De nada...

Já agora, talvez precises de mais duas funções: WhereX e WhereY (para saber a posição do cursor num determinado momento). Não são obrigatorias para o que precisas, mas podem facilitar um pouco!

  • Vote 1

"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.

Posted (edited)

Pronto ta com erro :/// Fiz bem por cima como entendi...

vê se estou no caminho certo :

program ProjectOne;
Uses
CRT;
 nome : String;
  Begin
  ClrScr
Write('Digite uma palavra soh para aparecer na tela');
 Readln(nome);
  repeat
  nome := readkey;
  case nome of
   #0;
   #72;
   #80;
   #75;
   #77;
  end;
  Write(nome);
  end.

---- oque eu boto depois do exemplo : #80 : >>??????<<

Edited by nunopicado
Adicionado tags GeShi ao código.
Posted (edited)

Ui, está aí uma confusão dos diabos...

nome não está declarada como variável, falta a palavra reservada var.

Depois do ClrScr falta um ponto e vírgula.

nome é uma string, e a leitura feita pelo ReadKey é do tipo Char - precisas de uma outra variável só para isso.

Falta-te o until no repeat, não terminaste o ciclo.

O caso #0 não faz sentido, não captaste a mnensagem do @nunopicado. Uma seta é uma tecla que produz dois códigos ASCII: o primeiro é sempre #0, que indica que é uma tecla funcional, daí teres de fazer um segundo readkey. Atenção: estes dois readkeys são executados de seguida sem ser necessário premir duas vezes a seta, já que a seta produz dois caracteres ASCII: o primeiro readkey ocupa-se do primeiro caracter, e o segundo readkey ocupa-se logo a seguir do segundo caracter, e só aí termina a leitura. O snippet do @nunopicado exemplifica muito bem esta leitura.

Se só pretendes andar para cima e para baixo, os casos #75 e #77 não fazem sentido, já que são as setas laterais.

Por fim, tens de saber onde está posicionado o nome actualmente, e, assim, quando clicas para cima ou para baixo, sabes onde vai parar o nome na sua nova posição.

Edited by thoga31

Knowledge is free!

Posted

Hmmm , obrigado pela resposta, mais eu tinha feito o "var"o ";" etc, so que editaram meu codigo e apagaram ... eu entendi oque vocês querem dizer mais não sei como fazer tem como posta o exemplo de como fica?porque quero pega o jeito de fazer algo se mexer , depois vou tentar fazer um joguinho...

Posted

Hmmm , obrigado pela resposta, mais eu tinha feito o "var"o ";" etc, so que editaram meu codigo e apagaram ...

Deve ser um bug do sistema, nós nunca apagaríamos nenhum código, quer estivesse bem ou mal.

eu entendi oque vocês querem dizer mais não sei como fazer tem como posta o exemplo de como fica?

Se entendeste, então tenta fazer. Dizes que sabes os conceitos-base e já te demos o que falta, qual a dúvida agora?

Não vamos fazer o programa por ti, a intenção é ajudar, não é fazer por desporto de caridade.

Knowledge is free!

Posted (edited)

Sim amigo eu entendi e etc , so tenho duvida como fazer depois do case

Exemplo

#72 : (boto oque aqui ?)o nome em nova posição ?

Abraços 😄

Edited by Peteer
Posted

No 'case' irás actualizar duas variáveis que irão manter a posição x/y do texto no écran. Terás de ter também outras duas para guardarem a última posição, que actualizarás copiando a variável da posição actual antes de a alterares no 'case'. Para imprimires o texto no écran deves usar o procedimento GotoXY, com as variáveis da última posição, para alterar a posição de escrita e escrever espaços (para apagar o texto e depois voltar a usar o GotoXY, agora com as variáveis da nova posição, e então escrever a palavra. Vais reparar que isso vai piscar bastante mas para evitar isso terias de usar outras técnicas mais complexas. Começa por isto.

Posted

No 'case' irás actualizar duas variáveis que irão manter a posição x/y do texto no écran. Terás de ter também outras duas para guardarem a última posição, que actualizarás copiando a variável da posição actual antes de a alterares no 'case'. Para imprimires o texto no écran deves usar o procedimento GotoXY, com as variáveis da última posição, para alterar a posição de escrita e escrever espaços (para apagar o texto e depois voltar a usar o GotoXY, agora com as variáveis da nova posição, e então escrever a palavra. Vais reparar que isso vai piscar bastante mas para evitar isso terias de usar outras técnicas mais complexas. Começa por isto.

Hmm , não entendi (como fazer)sera que você poderia me mostrar algum exemplo ??

Posted

Hmm , não entendi (como fazer)sera que você poderia me mostrar algum exemplo ??

Um exemplo, neste caso, é dar-te a solução.

Pensa assim: tens o texto actualmente na posição (x1, y1). Carregas na seta para baixo, logo vais andar com o texto para baixo. O que tens de fazer é, por passos:

  1. Limpar o texto actual, que está em (x1, y1);
  2. Localizar o cursor na nova posição, que será (x1, y1 + 1);
  3. Escrever aí o texto;
  4. Gravar a actual posição do texto para a próxima seta premida.

Assim, já entendeste melhor?

Knowledge is free!

Posted (edited)

Um exemplo, neste caso, é dar-te a solução.

Pensa assim: tens o texto actualmente na posição (x1, y1). Carregas na seta para baixo, logo vais andar com o texto para baixo. O que tens de fazer é, por passos:

  1. Limpar o texto actual, que está em (x1, y1);
  2. Localizar o cursor na nova posição, que será (x1, y1 + 1);
  3. Escrever aí o texto;
  4. Gravar a actual posição do texto para a próxima seta premida.

Assim, já entendeste melhor?

Hmmm entendi melhor já , vou tentar fazer dai posto aqui o código e as duvidas ok??

obrigado a todos por estar me respondendo 😄

Acho que agora estou entendendo melhor

Agora vou tenque sair mais depois quando eu voltar eu tento D: é rapidinho

Edited by Peteer
Posted (edited)

Eae acho que agora estou no caminho certo , so que tá com erro , mais é assim que terá de ser feito?

program project2;
Uses
CRT;
var
nome : String;
posicao : Char;
x1,
y1 : Integer;
Begin
 ClrScr;
  Write('Digite seu nome : ');
Readln(nome);
begin
Clrscr;
repeat
posicao := readkey;
case posicao of
#80 : Gotoxy(x1,y1 - 1);write(nome) ;
until;
  end;
  end.

// so fiz uma posição para testar.//

Edited by Peteer
Posted

Assim de repente:

1) cada caso do case of deve estar entre begin e end.

2) x1 e y1 não estão inicializados.

3) Não escreveste o nome na posição inicial após limpar o ecrã.

4) o repeat until não tem condição de finalização.

5) não estás a detectar bem a seta, falta a detecção do primeiro caracter #0.

Knowledge is free!

Posted

E agora?


program project2;
Uses
CRT;
var
nome : String;
posicao : Char;
x1,
y1 : Integer;
Begin
posicao := 0;
 ClrScr;
  Write('Digite seu nome : ');
   Readln(nome);
   begin
   Clrscr;
   write(nome);
   repeat
   posicao := readkey;
   posicao := keypressed;
   begin
   case posicao of
   #80 : Gotoxy(x1,y1 - 1);write(nome) ;
   until;
   end;
  end;
  end.

pow me mostra o exemplo como terá de ser , sei que iras fazer por mim mais isso é so o começo depois que eu pegar o jeito das teclas vou tentar montar um joguinho aqui ;//

Posted

A pouco e pouco estás a chegar lá, apesar de não estar na forma óptima.

  • Não entendo porque fizeste posicao := 0.
  • x1 e y1 continua a não estar inicializado.
  • Fazer a dupla leitura não é com um readkey e um keypressed - o keypressed não é utilizado assim, a leitura deve ser condicionada e o @nunopicado já colocou aqui há séculos o método da dupla leitura, reparaste ou passou ao lado?
  • o caso #80 do case of continua sem estar entre begin e end.
  • a estrutura repeat until continua sem condição de paragem.

Sabes programar nesta ou noutra qualquer LP? Reevelas enorme desconhecimento do que é e para que serve coisas tão simples e essenciais como condições, estruturas de controlo, etc

E não, não vamos dar-te a resposta. Tens de aprender a programar, e Ctrl+C > Ctrl+V já todos sabem. Todos dizem isso, que depois participam e tal, mas já estou há espera por muitos, e há 2 anos...

Knowledge is free!

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.