Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

pedromiguelfaria

jogo da Glória

Mensagens Recomendadas

pedromiguelfaria

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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
I-NOZex

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

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

  • Voto 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedromiguelfaria

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?

Editado por nunopicado
Adicionada linguagem GeShi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedromiguelfaria

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

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.

Editado por 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedromiguelfaria

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

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 :)

Editado por pwseo
  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

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

Editado por 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedromiguelfaria

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

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

Editado por 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

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.

  • Voto 1

Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
passarito

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

Editado por passarito

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

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

Tanto "se" :P

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

Editado por thoga31

Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
passarito

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

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

Editado por passarito

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
passarito

Só faltava mesmo era compilares isso para linux :P 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! :D

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
passarito

Na altura ainda não sabia fazer isso!

Além do mais, não havia a internet como nós a conhecemos hoje para que quando tivessemos uma dúvida fizessemos uma procura num qualquer motor de busca ou perguntar num forum qualquer. Umas BBS's talvez....

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Isso é verdade, eu já nem me lembro onde descobri forma de esconder o cursor, mas na net não foi!


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
passarito

No meu caso, posso revelar que foi num artigo da velhinha Spooler - revista de informática muito virada para a programação à imagem da revista do p@p.

Enfim, com essa revista vinha sempre uma diskette com programas, e era por aí que eu ia descobrindo mais qualquer coisa!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

No meu caso, posso revelar que foi num artigo da velhinha Spooler - revista de informática muito virada para a programação à imagem da revista do p@p.

Enfim, com essa revista vinha sempre uma diskette com programas, e era por aí que eu ia descobrindo mais qualquer coisa!

Olha, é capaz de ter sido isso... Cheguei a comprar algumas.

Era o tempo em que Pascal vinha em revistas de programação, ao contrário do que acontece hoje (excepção feita à nossa, que é a melhor de todas! ;):P)

  • Voto 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.