Jump to content

Recommended Posts

Posted

Boas pessoal, estou num CET de programação, e estamos a dar a linguagem pascal, coisinhas simples e tal, mas para o final deste mês tenho de apresentar um programa, diferente daqueles que fizemos nas aulas, em que precisávamos de pesquisar e tentar "desenrascar nos o máximo possível"

eu queria fazer algo do género:

  1. Pedir o numero de jogadores que vão jogar, guardo isso numa variável, tudo muito bem
  2. Peço o nome dos jogadores e guardo num vector, também sem problemas.
  3. Peço para o utilizador escolher o seu símbolo para meter no tabuleiro de jogo e aqui surge o problema...
    Por exemplo queria fazer algo deste genero:
    >&
    $
    #
    *
    e quero que aquela setinha que está atras do simbolo, ande para cima e para baixo, e quando o utilizador carregar ENTER isto ficar guardado e associado ao jogador, posteriormente desaparecendo para não poder voltar a ser escolhida, é possível?
Posted

eu ja tou um pouco frouxo em pascal puro, mas sei-te dizer que consegues fazer com isto:

http://www.freepascal.org/docs-html/rtl/crt/window.html

eu fiz algo do genero no 11º ano, com um menu, estilo menu dropdown, em que com as setas andava pro lado e para cima/baixo...

no maximo, posso tentar procurar a fonte e deixar-te ai, mas decerto alguem te conseguirá ser mais especifico

no entanto explora a funçao window pois é com ela que dá para fazer 😉

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net
Posted

Para isso vais precisar de (assim por alto):

- Unit CRT

- Readkey (para ler as teclas, por exemplo, as setas para seleccionar o simbolo, e o enter para validar a selecção)

- Repeat Until (para repetir a leitura de teclas até que a tecla enter seja pressionada)

- GotoXY (para escrever a seta '>' na posição desejada, e para a eliminar, escrevendo no mesmo local um ' '

- Write (para escrever no ecrã, sem ser afectado pelo CR-LF do Writeln)

Começa por aqui, e vai pondo as tuas dúvidas...

  • Vote 2

"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)
For i:=1 to jogadores do
begin
writeln ('Introduza o nome do jogador ',i);
readln (nomes[i]);
writeln ('Jogador ',nomes[i],' selecione o seu s¡mbolo de jogo:');

                        //Código para as peças do tabuleiro
                            gotoxy(1,linha);
                            write ('');
                            gotoxy(5,linha);
                            writeln ('¸');
                            gotoxy(5,linha);
                            writeln('$');
                            gotoxy (5,linha);
                            writeln('õ');
                            gotoxy(5,linha);
                            writeln('þ');
ch:=READKEY;
If (ch=chr(80)) and (linha>=5) and (linha<=8) then
begin
gotoxy(1,linha+1);
writeln('');
gotoxy(1,linha);
writeln ('');
end;

Estou no bom caminho?

Edited by nunopicado
Adicionada linguagem GeShi
Posted

Mais ou menos... 🙂 Estás a tentar, o que já é bom.

As teclas especiais, como as setas, precisam de um prefixo primeiro.

Assim, quando fores fazer o readkey, deves verificar antes de mais se o código lido é o #0.

Se for, vais testar então o código da seta (#72, #75, #77 e #80, se não me falha a memória, para as quatro setas)

Depois usas um case para fazer esse teste. O IF não ajuda.

Precisarás também de uma variável que te indique em que posição está o cursor (opção 1, 2 3 ou 4).

Conforme a opção, escreverás na posição do ecrã correspondente um espaço ' ', depois moves o cursor para a proxima posição indicada pela seta (se a actual é 1, a proxima é 2, e sucessivamente), e finalmente escreves nessa posição a seta '>' que indica a opção escolhida.

Outra coisa que recomendo.

Como vais usar muitas vezes o conjunto GotoXY(x,y);Write(z);, sugiro-te que cries um procedimento que aceite 3 parametros, 1 do tipo string e 2 do tipo byte.

La dentro, metes um GotoXY (usando os parametros do tipo Byte), e depois o Write, usando o restante parametro.

Ex.:

procedure WriteXY(Text:String; X,Y:Byte);
begin
  GotoXY(x,y);
  Write(Text);
end;

Assim, em vez de usares o conjunto:

GotoXY(5,linha);
Write(',');

... basta-te escrever:

WriteXY(',',5,linha);

Dúvidas?

"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

Desde já um grande obrigado pela tua ajuda,

contudo eu não sou um grande expert nisto, e tem coisas ai que eu não percebi bem o que elas fazem, para que servem, e como funcionam.

como por exemplo aquele procedure que colocas te.

eu sei o que é um procedure, não entendi foi o writeXY nem o que ele faz.

Posted

pedromiguelfaria,

Quais são os teus conhecimentos da linguagem Pascal? Parece-me inútil progredirmos esta thread sem sabermos a resposta a esta pergunta. De qualquer modo, se leres o conteúdo do procedimento writexy facilmente deduzes qual é a sua função...

Posted (edited)

como por exemplo aquele procedure que colocas te.

eu sei o que é um procedure, não entendi foi o writeXY nem o que ele faz.

Aquele procedure não é obrigatório. No entanto, poupa-te de estar sempre a escrever GotoXY antes de cada Write.

Com ele, numa só instrução, posicionas o cursor e escreves o texto.

Mas responde à questão que o Pedro te colocou, pois será mais fácil depois direccionar correctamente a ajuda para o teu nível de conhecimento.

Indica-nos em linhas gerais, o quê que já aprendeste a fazer em Pascal.

Edited by nunopicado

"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

sei um pouco mais que o básico.

conheço os ciclos If, repeat, Case, For.

conheço os gotoxy, mudar cores, etc.

Conheço os procedures mas nunca os utilizei, demos isso relativamente a dois dias na aula.

Relativamente ao jogo da glória, eu tenho de o entregar ainda hoje, decidi fazer um pouco mais simples mas funcional para apresentar na aula.

Contudo, gostaria de poder tornar o programa mais complexo, e da maneira que o tinha idealizado, se poderem continuar a ajudar me e a dar me algumas dicas, agradecia

Posted (edited)

O básico é, a meu ver:

  • Tipos de dados simples
  • Variáveis
  • Condições
  • Ciclos
  • Procedimentos e funções

E digo isto de uma forma genérica, ou seja, não chega simplesmente conhecer alguns procedimentos específicos (ex.: gotoxy e writeln), é preciso saber criar procedimentos e funções novos.

Se não te sentes à vontade nesse último ponto, então tens 2 soluções: aprender procedimentos (como criar, como usar) ou não os utilizas no teu código (ou seja, ignoras a sugestão do Nuno, caso contrário não saberás defender o teu código se alguém te questionar). De qualquer modo, o Nuno explicou muito bem a sugestão que deu, pelo que se compreenderes a justificação, poderás de facto incluir esse código no teu programa, sem medo.

Relativamente ao problema específico de mostrares uma lista de símbolos e deixares o utilizador utilizar as setas... Não seria mais adequado utilizares uma solução mais simples para já? (visto não teres ainda um domínio da linguagem). Algo assim:

Escolha o símbolo:
 1) &        2) %        3) $        4) #

Com uma escolha adequada de cores (números a cinza e símbolos a branco, bold) podes criar um interface intuitivo sem necessidade de te preocupares com a leitura das teclas de direcção, e a própria construção em código do aspecto do menu dos símbolos...

EDIT: Vi agora que tens que entregar isso hoje. Se é o caso, e se o código que tens já funciona, faz cópias de segurança! Depois podes pensar em melhorar o que já tens 🙂

Edited by pwseo
  • Vote 1
Posted (edited)

Contudo, gostaria de poder tornar o programa mais complexo, e da maneira que o tinha idealizado, se poderem continuar a ajudar me e a dar me algumas dicas, agradecia

Se há coisa que o pessoal aqui gosta é malta com vontade de aprender. 😉

Então, como o teu professor te deve ter dito, um procedimento é um bloco de código, que poderás repetir quantas vezes quiseres.

É extremamente útil por vários motivos, mas digo-te já os 3 principais:

- Cansa menos: Em vez de estares sempre a repetir um bloco de n linhas, repetes apenas uma, que é a chamada ao procedimento.

- Organização: Ao estar reunido um bloco de código que tem um objectivo definido, irá tornar-se mais fácil para ti organizares-te, sabendo que "o código que faz isto, esta aqui" em vez de teres de dizer "o código que faz isto está aqui, e ali, e acoli, e acolá..."

- Correcção de erros: Se te enganares num bloco de código, e ele estiver num procedimento, só terás de alterar o procedimento para corrigir esse bloco em todo o programa. Se em vez de procedimentos fores fazendo copy/paste, terás de corrigir o engano em todos os lados onde copiaste o código.

Na prática:

Ao colocar o GotoXY e o Write dentro do procedimento, a que chamei carinhosamente WriteXY, poderás numa só instrução escrever um determinado texto (parametro Text:String) na posição desejada (parâmetros X e Y).

Edited by nunopicado

"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

O pessoal é incrível aqui, obrigado pela vossa ajuda, eu vou tentar melhorar o programa com as sugestões que me deram, e tentar aplicar essas dicas que foram dadas.

Quando surgirem duvidas eu posto aqui, e quando finalizar o programa eu mando para receber um feedback da vossa parte

Obrigado mais uma vez

Posted (edited)

O pessoal é incrível aqui, obrigado pela vossa ajuda, eu vou tentar melhorar o programa com as sugestões que me deram, e tentar aplicar essas dicas que foram dadas.

Quando surgirem duvidas eu posto aqui, e quando finalizar o programa eu mando para receber um feedback da vossa parte

Das dicas que andam lá em cima, é natural que tenhas dificuldades em algumas.

Se assim for, diz o que te causa confusão, que alguém te explicará.

E bom trabalho...

Edited by nunopicado

"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

Acho interessante darem cores e gotoXY antes mesmo de procedimentos e funções. É grave, IMO.

Mesmo que não os utilizes neste teu programa, aconselho-te a, logo após enviares o código ao professor, estudares os procedimentos e as funções. Pascal sem estas dois meninos não é Pascal, é apenas uma mera massa negra informe dispersa e perdida algures neste universo sem fim.

Continua com o espírito de aprendizagem, e não hesites em esclarecer as tuas dúvidas, nós preferimos mil vezes ensinar a quem quer aprender do que ver pedidos de trabalho feito, que felizmente não é o caso (os meus parabéns, fazes parte daquela que é cada vez mais a minoria dos que vêm aqui e não despejam um enunciado sem mais nada, that's the spirit!).

E não vale a pena acrescentar mais nada para já, o @nuno e o @pwseo já deram um empurrão.

  • Vote 1

Knowledge is free!

Posted (edited)

Logo à noite, SE me lembrar, SE tiver tempo e SE conseguir vou proporcionar uma surpresa à muito prometida! 😉

Tanto "se" 😛

LATE EDIT: é "há" e não "à" (realçado) 😄

Edited by thoga31

Knowledge is free!

Posted (edited)

LATE EDIT: é "há" e não "à" (realçado) 😄

Tás com umas piadas do caraças..... lol

Bom vamos lá. Joguinho da Gloria de 1995.. ou para aí assim!

Não liguem aos créditos, o objectivo não era para eu ficar com os créditos... ehehehe

Screenshot: https://www.dropbox.com/s/punnqa0gjs3gc35/Jogo_da_Gloria.png

Versão 64 bits (também funciona em 32): https://www.dropbox.com/s/5vtl2d9g87z0bow/JGLO_X64.EXE

Versão 32 Bits : https://www.dropbox.com/s/rsd5ee3w4sedu7i/JGLO_X86.EXE

Have fun everybody!

@Thoga: Isto era o que eu te tinha prometido à ou há (escolhe) 10 anos atrás

@ pedromiguelfaria: só para poderes tirar umas ideias....

Edited by passarito
Posted

Só faltava mesmo era compilares isso para linux 😛 Caso contrário fico apenas com a screenshot lool

Linux, Android, Mac... Tenho aí as compilações. Não sei se numa diskette de baixa densidade transformada em alta quando lhe fiz o furito do lado direito para levar uns enormes 1.44Mb ou se num disco disco flexivel... Sim que eu já não uso a fita prefurada! 😄

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.