Peteer Posted May 19, 2012 at 09:31 PM Report #456892 Posted May 19, 2012 at 09:31 PM 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
nunopicado Posted May 19, 2012 at 10:03 PM Report #456895 Posted May 19, 2012 at 10:03 PM 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. 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.
Peteer Posted May 19, 2012 at 10:27 PM Author Report #456898 Posted May 19, 2012 at 10:27 PM 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?
nunopicado Posted May 19, 2012 at 10:51 PM Report #456905 Posted May 19, 2012 at 10:51 PM 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! 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.
Peteer Posted May 19, 2012 at 10:56 PM Author Report #456909 Posted May 19, 2012 at 10:56 PM Ok , vou tentar fazer dai eu edito aqui , vlw cara você ta me ajudando bastante 😄
nunopicado Posted May 19, 2012 at 11:07 PM Report #456913 Posted May 19, 2012 at 11:07 PM 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! 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.
Peteer Posted May 19, 2012 at 11:24 PM Author Report #456915 Posted May 19, 2012 at 11:24 PM Beleza irmão 😄 mais nem vou usar elas vou tentar fazer de um jeito aqui e ja posto
Peteer Posted May 19, 2012 at 11:37 PM Author Report #456919 Posted May 19, 2012 at 11:37 PM (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 May 20, 2012 at 09:36 AM by nunopicado Adicionado tags GeShi ao código.
thoga31 Posted May 20, 2012 at 02:09 PM Report #456956 Posted May 20, 2012 at 02:09 PM (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 May 20, 2012 at 02:10 PM by thoga31 Knowledge is free!
Peteer Posted May 20, 2012 at 02:15 PM Author Report #456957 Posted May 20, 2012 at 02:15 PM 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...
thoga31 Posted May 20, 2012 at 02:19 PM Report #456958 Posted May 20, 2012 at 02:19 PM 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!
Peteer Posted May 20, 2012 at 03:44 PM Author Report #456973 Posted May 20, 2012 at 03:44 PM (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 May 20, 2012 at 03:44 PM by Peteer
bsccara Posted May 20, 2012 at 04:10 PM Report #456977 Posted May 20, 2012 at 04:10 PM 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.
Peteer Posted May 20, 2012 at 04:28 PM Author Report #456983 Posted May 20, 2012 at 04:28 PM 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 ??
thoga31 Posted May 20, 2012 at 04:42 PM Report #456985 Posted May 20, 2012 at 04:42 PM 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: Limpar o texto actual, que está em (x1, y1); Localizar o cursor na nova posição, que será (x1, y1 + 1); Escrever aí o texto; Gravar a actual posição do texto para a próxima seta premida. Assim, já entendeste melhor? Knowledge is free!
Peteer Posted May 20, 2012 at 04:55 PM Author Report #456988 Posted May 20, 2012 at 04:55 PM (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: Limpar o texto actual, que está em (x1, y1); Localizar o cursor na nova posição, que será (x1, y1 + 1); Escrever aí o texto; 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 May 20, 2012 at 05:37 PM by Peteer
Peteer Posted May 20, 2012 at 09:22 PM Author Report #457035 Posted May 20, 2012 at 09:22 PM (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 May 20, 2012 at 09:23 PM by Peteer
thoga31 Posted May 20, 2012 at 09:30 PM Report #457037 Posted May 20, 2012 at 09:30 PM 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!
Peteer Posted May 20, 2012 at 09:38 PM Author Report #457041 Posted May 20, 2012 at 09:38 PM 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 ;//
thoga31 Posted May 20, 2012 at 09:48 PM Report #457044 Posted May 20, 2012 at 09:48 PM 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!
Recommended Posts