1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C# - CronÓmetro

Discussão em 'Programação' iniciada por joji, 25 de Março de 2008. (Respostas: 30; Visualizações: 11207)

  1. joji

    joji Power Member

    Boas, como faço um cronómetro em C#? Agradeço a ajuda ;)
     
  2. Tsunamy_boy

    Tsunamy_boy Banido

    xihhhh o que foz-te pedir!
    bem eu digo os passos e depois programas tu... espero que saibas!

    tens um controlo que se chama timer, usas esse controlo.
    nas propriedades acerta para que o timer funcione a 1segundo penso que é por 1000 numa propriedade do qual nao me recordo do nome.
    depois cria 3 variaveis globais: horas, minutos e segundos do tipo INT e põe-nas já com o valor 0(por defeito).
    Clicla duas vezes no timer(controlo que adicionas-t) e lá dentro poes o codigo onde vais estar sempre a adicionar 1 segundo a variavel "segundos" depois tens que fazer verificações do tipo:

    segundos++;

    if(segundos = 60)
    {
    segundos = 0;//repor os segundos a 0
    minutos++; //adicionar +1 aos minutos
    }

    if(minutos = 60)
    {
    minutos = 0;
    horas++;
    }
    ainda dentro do codigo do timer(já no fim) pões isto para te mostrar valores.
    textbox1.text=horas+":"+minutos+"."+segundos;

    Não te esqueças de nas propriedades do Timer por enabled a True para ele arrancar mal inicie o Form


    Espero que ajude.
     
  3. joji

    joji Power Member

    Brigadão pelo tempo desperdiçado a explicar :) vou avançar para o cronómetro e depois digo alguma coisa. ;)
     
    Última edição: 25 de Março de 2008
  4. joji

    joji Power Member

    privatevoid timer1_Tick(object sender, EventArgs e)
    {
    int hora=0, minuto=0, segundo=0;
    segundo++;
    if (segundo == 60)
    {
    segundo = 0;//repor os segundos a 0
    minuto++; //adicionar +1 aos minutos
    }
    if (minuto == 60)
    {
    minuto = 0;
    hora++;
    }
    textBox1.Text = hora + ":" + minuto + ":" + segundo;
    }

    criou a textbox e mostrou o cronómetro inicializado no entanto apenas altera uma vez de 0:0:0 para 0:0:1.. pork será? é preciso criar um ciclo? tentei usar um do..while mas kd corria encravava :S
     
  5. Boas!

    Tens que meter o timer.enabled= true para ele repetir esse codigo sempre.
    No entanto cuidado que as variaveis horas, minutos e segundos são variaveis locais, logo se não estou em erro cada vez que entra nesse método ela mete-as a 0. Dai só veres o relogio andar 1 segundo. ;)

    Espero ter ajudado!
     
  6. joji

    joji Power Member

    nem pensei nisso que horror! o segundo que via avançar era por causa do segundo++ logo nc pasava dali lol.. bem vou modificar e ver o resto ;)

    ainda n tiv a ver o prog mas agr surg o prob.. s tenho d inicializar as variáveis a 0 cm o faço fora da operação do cronómetro? a minha noobice a vir ao d cima lol
     
    Última edição: 25 de Março de 2008
  7. hummm... podes por exemplo iniciar as variaveis no evento load do form (duplo click em cima do form) e ai iniciar o timer tambem. Como o evento load ocorre só quando o form é carregado, as variáveis nunca mais vao ficar a zero e com isso em principio resolves o teu problema.
     
  8. Tsunamy_boy

    Tsunamy_boy Banido

    isso fazes no topo do codigo logo antes do primeiro invento e escreves:
    int hora=0, minuto=0, segundo=0;
    Assim tens 3variaveis do tipo int ambas globais e já predefinidas com o valor 0.

    Para começar o cronometro fazes um botão e la dentro pões:
    hora=0, minuto=0, segundo=0; //para iniciares as variaveis
    timer1.start();//para iniciar o cronometro

    para o parares pões nouto botão:
    timer.stop();//para parar o cronometro


    O timer funciona da seguinte maneira:
    repete aquele codigo posto em "privatevoid timer1_Tick(object sender, EventArgs e)" infititamente em intervalos de tempo até ser mandado parar.
     
    Última edição: 26 de Março de 2008
  9. The_True_Eue

    The_True_Eue Power Member

    Sem querer fazer ficar mal quem gentilmente postou várias formas para implementar o dito cronómetro...
    Se estás a usar .NET 2.0 (ou superior), existe a classe System.Diagnostics.Stopwatch, que trata disso tudo de forma simples. A MSDN é tua amiga.
    Fazes Start() no início, e com um Timer apenas actualizas os controlos que mostram o tempo com a propriedade Elapsed.
    É mais simples, mais eficiente e mais preciso (não sei se isso é um problema, mas não faz mal nenhum).
     
    Última edição: 27 de Março de 2008
  10. joji

    joji Power Member

    Sim claro também é uma opção no entanto as outras resoluções que os nossos colegas postaram também são úteis e muito pois acaba por ser uma maneira de fazer um cronómetro apercebendo-nos melhor de como ele funciona em linha de código ;) obrigado a todos os que têm respondido, já tenho o cronómetro funcional vou agora passar á próxima fase do programa que vai ser o jogo das diferenças ;)
     
  11. Tsunamy_boy

    Tsunamy_boy Banido

    Isso é muito facil de fazer se kixeres ajuda diz... 3linhas de código e ta feito...
     
  12. joji

    joji Power Member

    Já fiz a part d clicar nas pictures ke tapam as supostas imagens ke estao por tras mas ainda n pensei sobr cm comparar as 2 e s estiverem incorretas volta a colocar pictures a tapar as imagens, o meu stor dise para fazer um metodo aparte para iso..
     
  13. Boas,

    Isto é so uma ideia, não sei se a melhor.

    Cada imagem tem uma propriedade "Tag", porque nao atribuires valores as imagens (tipo 1,2,3)
    e cada par de imagens correspondia um valor. Cada vez que destapavas ias compara os valores da tag, se fossem iguais... Voila ;)
     
  14. joji

    joji Power Member

    boa ideia já estive a pesquisar isso das tags e foi fácil encontrar. Associei os valores tal como disses-te a cada par de imagens correctas e pus essa atribuicao de valors ás imagens quando clicamos no botão "start game".. agora como posso fazer um random das imagens ? a minha atribuicao d valors ás tags foi feita o valor um para a picture A e B e o 2 para o C e D por ai adiante.. percebes? Logo precisamos de uma instrução que misture as imagens.

    Também queria usar uma váriavel para guardar a tag da primeira imagem seleccionada para comparar á segunda mas a operação que faço dá erro, eu faço assim: primeira=A_picturebox.Tag;
    Pensei ke guardava o valor que tinha atribuido á Tag mas devo tar errado..
     
    Última edição: 1 de Abril de 2008
  15. Humm... Quanto ao erro que te dá, penso que seja por a tag ser um object e a comparação directa de object's não é o que pretendes. o que deves fazer é um cast da tag para inteiro (int)picturebox1.tag ==(int)picturebox2.tag e com isso a comparacao ja deve ficar correcta (ou para afectar fazes tipo int x = (int)picturebox2.tag). Quanto à melhor maneira de fazeres a distribuição das imagens tens que dizer como as tens guardadas. Tens um array de pictures? Tens "n" controlos pictureBox?

    Cumps.
     
  16. joji

    joji Power Member

    eu tenho um picturebox para cada uma das imagens (4 x 4) existe algum codigo de random? vou alterar o codigo entao e ja t digo s ta a funcionar bem ;)

    privatevoid A_picturebox_Click(object sender, EventArgs e)
    {
    if (count == 2) count = 0;
    A_picturebox.Visible =
    false;
    if (count=0){
    primeira = (
    int)A_picturebox.Tag;
    }
    elseif(count=1){
    /*comparacao para determinar se as boxs seleccionadas estao corretas (ficam visiveis) ou nao*/
    if (primeira != (int)A_picturebox.Tag)
    {
    A_picturebox.Visible =
    true;
    }
    }
    count++;
    }

    como posso dizer para a picture ke está guardada na primeira passar a ser visivel tambem?
     
    Última edição: 1 de Abril de 2008
  17. Tsunamy_boy

    Tsunamy_boy Banido

    Olha crias 2 paineis um tem a imagem original onde não mexes e o outro fazes o seguinte:´
    Apos o criares poe como fundo a tua imagem depois lá dentro (onde existem os erros referentes a outra imagem) pões por cada um, um painel em cima e por cada painel desses, poes o fundo transparente.
    Cada vez que clicares no painel pai, vai tirar pontos, cada vez k cliques num painel dos que cobrem a imagem vai dar pontos e acrescenta uma imagem de fundo neste(faz em photoshop uma circunferenci mesmo com o pincel para dar estilo, mas faz em fundo transparente e grava em PNG ou BMP nao tnho a certeza, testa pois nao sei qual dos 2existe para gravar no photoshop, se houver os 2 melhor!)...
    Assim é muito mais facil e fazes milhões com 2 linhas de codigo
     
    Última edição: 1 de Abril de 2008
  18. joji

    joji Power Member

    hmm não consegui perceber bem a tua ideia.. estavas a dizer para deixar as imagens que são para acertar e apenas mexer nas pictures que as vao tapar certo? eu neste momento estou a fazer asim e a mexer nas pictures que tapam as imagens mm k sao para descobrir..

    vai existir um painel raiz que tem as imagens que são para adivinhar as suas posições e tem outro painel por cima que tapa essas imagens certo? no entanto ese segundo painel tem 2 pictures uma em cima da outra e uma delas transparente é isso?
     
    Última edição: 1 de Abril de 2008
  19. Tsunamy_boy

    Tsunamy_boy Banido

    Cria 2 paineis, um com o background da imagem original(sem diferenças), outro com a imagem diferente.
    No painel com a imagem que cotem as diferenças adicionas um painel (com o background transparente),1 por diferença, em cima de cada diferença...
    Tipo:
    Painel1(imagem original)
    Painel2(imagem com diferenças)
    __ painel3(dentro do painel2 em cima da diferença 1)
    __painel4(dentro do painel2 em cima da diferença 2)
    __painel5(dentro do painel2 em cima da diferença 3)
    __painel6(dentro do painel2 em cima da diferença 4)
    (...)

    No painel2 no envento onClick fazes a perda de pontos
    Cada vez que clicares no painel3,4,5,6(...) fazes com que este ganhe um circulo vermelho em background e o aumento de pontos...

    a ideia é adicionar um objecto que sobreponha a imagem(com diferenças) e ganhe um circulo e dar pontos...
    Não te esqueças de por enable=false cada vez que clicares no painel3,4,5,6(...)
     
    Última edição: 2 de Abril de 2008
  20. joji

    joji Power Member

    o meu stor está a ensinar nos a mexer com class's diz k tornase mt mais facil programar os botões e descobrir se os 2 escolhidos tão certo ou errados.. tou a tt nese método. vou experimentar usar ese método também para resolver o problema de pontos no jogo ;)
     

Partilhar esta Página