Risultati da 1 a 2 di 2
  1. #1
    ZioYuri78
    ospite

    Predefinito [C++/Allegro] Muovere le lancette di un orologio.

    Ciao a tutti, in un noioso pomeriggio mi è venuto in mente di scrivere un programmino in C++ con le librerie grafiche Allegro che visualizza due orologi, uno digitale e l'altro analogico. Il mio problema è che non riesco a sincronizzare il movimento delle lancette con l'ora corrente. Qualche idea? Posto il codice principale e l'indirizzo dove scaricare il progetto completo.

    Spoiler:

    Codice:
    #include <stdlib.h>
    #include <string>
    #include "Video.h"
    
    Video *vd = new Video(800,600,32);
    
    struct tm *m_tmCurrent;
    time_t     m_tNow;
    
    char       m_cTime[50];
    
    double sec_angle   = -64;        //64=90° - 128=180° - 192=270° - 256=360°
    double min_angle   = -50;
    double hour_angle  = -30;
    float  x           = 400;
    float  y           = 300;
    int    sec_lenght  = 100;        //Lunghezza della lancetta dei secondi
    int    min_lenght  = 90;
    int    hour_lenght = 70;
    
    
    int main(){
    
        vd->Init();
    
        while(!key[KEY_ESC]){
            
           
    
            // Disegna la lancetta dei secondi
            line(vd->GetBuffer(),x,y,x+sec_lenght*cos(fix(sec_angle)),y+sec_lenght*sin(fix(sec_angle)),makecol(255,255,255));
    
            // Disegna la lancetta dei minuti
            //line(vd->GetBuffer(),x,y,x+min_lenght*cos(fix(min_angle)),y+min_lenght*sin(fix(min_angle)),makecol(255,255,255));
            // Disegna la lancetta delle ore
            //line(vd->GetBuffer(),x,y,x+hour_lenght*cos(fix(hour_angle)),y+hour_lenght*sin(fix(hour_angle)),makecol(255,255,255));
    
            // Disegna il quadrante
            circle(vd->GetBuffer(),x,y,sec_lenght,makecol(255,0,0));
            line(vd->GetBuffer(),x,y-110,x,y-90,makecol(0,0,255));
            line(vd->GetBuffer(),x,y+90,x,y+110,makecol(0,0,255));
            line(vd->GetBuffer(),x-110,y,x-90,y,makecol(0,0,255));
            line(vd->GetBuffer(),x+90,y,x+110,y,makecol(0,0,255));
                            
            //Stampa l'ora corrente
            time(&m_tNow);    
            m_tmCurrent = localtime(&m_tNow);
            sprintf(m_cTime,"%i:%i:%i",m_tmCurrent->tm_hour,m_tmCurrent->tm_min,m_tmCurrent->tm_sec);
            textout(vd->GetBuffer(),font,m_cTime,380,100,makecol(255,255,255));
           
     //Calcolo l'angolo della lancetta dei secondi in base ai secondi dell'ora corrente
            sec_angle = m_tmCurrent->tm_sec;
            sec_angle *= 256/60;
            sec_angle -= 64;
     
            vd->Draw();
        }
    
    
        return 0;
    }END_OF_MAIN();


    http://digilander.libero.it/zebsoft
    Ultima modifica di ZioYuri78; 12-11-09 alle 15:08:14

  2. #2
    ZioYuri78
    ospite

    Predefinito Riferimento: [C++/Allegro] Muovere le lancette di un orologio.

    Ho trovato una soluzione adattabile al mio caso qui:
    http://forum.codecall.net/c-tutorial...log-clock.html

    Potete anche chiudere.

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice HTML è Disattivato