Chrono en image (avec allegro sous dev cpp)

Soyez le premier à donner votre avis sur cette source.

Vue 6 051 fois - Téléchargée 709 fois

Description

Le code est simple, il crée un compteur qu'on peut réinitialiser avec la touche ESPACE et pour quitter il suffit d'appuyer sur ECHAP, c'est mon premier programme avec allegro

Source / Exemple :


#include <allegro.h>

/* handler du chrono */
volatile unsigned long timer;
void chrono()
{
  timer++;
}
END_OF_FUNCTION(chrono);

/* fonction main... */
int main() 
{       
  allegro_init();

  install_timer();
  install_keyboard();

  set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 320, 240, 0, 0);
  set_color_depth(24);

  LOCK_VARIABLE(timer);
  LOCK_FUNCTION(chrono);
  
  install_int(chrono, 10);
  
  PALETTE pal;
  
  BITMAP *buffer = create_bitmap(320, 240);
  BITMAP *chrono = load_bmp("timer.bmp", pal);
  BITMAP *number[10]; /* les nombres */
  BITMAP *dp = create_bitmap(8, 16); /* les deux-points */
  
  for(int i=0; i<10; i++)
  {
    number[i] = create_bitmap(8, 16);
    blit(chrono, number[i], i*8, 0, 0, 0, 8, 16);
  }
  blit(chrono, dp, 80, 0, 0, 0, 8, 16);

  char min, sec, cen; /* minutes secondes centièmes */
  int x=0;
  while(! key[KEY_ESC])
  {
    poll_keyboard();
    clear_to_color(buffer, makecol(0, 0, 255));
    
    if(key[KEY_SPACE]) timer = 0;
    cen = timer % 100;
    sec = (timer / 100) % 60;
    min = (timer / 6000) % 60;
    
    x=132;
    masked_blit(number[min/10], buffer, 0, 0, x, SCREEN_H/3, 8, 16); x += 8;
    masked_blit(number[min%10], buffer, 0, 0, x, SCREEN_H/3, 8, 16); x += 8;
    masked_blit(dp, buffer, 0, 0, x, SCREEN_H/3, 8, 16); x += 8;
    masked_blit(number[sec/10], buffer, 0, 0, x, SCREEN_H/3, 8, 16); x += 8;
    masked_blit(number[sec%10], buffer, 0, 0, x, SCREEN_H/3, 8, 16); x += 8;
    masked_blit(dp, buffer, 0, 0, x, SCREEN_H/3, 8, 16); x += 8;
    masked_blit(number[cen/10], buffer, 0, 0, x, SCREEN_H/3, 8, 16); x += 8;
    masked_blit(number[cen%10], buffer, 0, 0, x, SCREEN_H/3, 8, 16); x += 8;
    
    blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
  }

  allegro_exit();
  return 0;     
}     

END_OF_MAIN();

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
30
Date d'inscription
lundi 21 avril 2003
Statut
Membre
Dernière intervention
10 mars 2007

Merci pour les conseils, je vais le faire dès que possible :)

Dri
Messages postés
527
Date d'inscription
vendredi 14 septembre 2001
Statut
Membre
Dernière intervention
6 octobre 2008
3
set_color_depth est à mettre avant le set_gfx_mode
tu peux factoriser le code d'affichage en mettant cen min sec dans un tableau de 3 valeurs et coller un for() pour l'affichage
Utilise draw_sprite plutot que masked_blit
Ok pour le reste, le design des chiffres est drôle
Messages postés
30
Date d'inscription
lundi 21 avril 2003
Statut
Membre
Dernière intervention
10 mars 2007

Si vous avez des commentaires, n'hésitez pas à poster. Pour info ce code je l'avai fait en basic et en installant allegro j'ai voulu comprendre comment fonctionnent les timer...

Dri

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.