CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[c++] [clavier + allegro]

Gonath
Gonath
Niveau 52
20 juin 2004 à 23:30:28

Je n´arrive pas à faire une saisie satisfaisante du clavier.

J´obtiens des trucs du genre :

jjjeee sssuiisss llee mmeeeilleurr

bref, comme si mon rafraichissement était trop rapide. On m´a proposé de faire un tableau de 256 bool pour vérifier l´état du clavier mais le prob, c´est qu´il ne gère pas les doubles lettres

Auriez vous une proposition ?

lag-it
lag-it
Niveau 10
20 juin 2004 à 23:41:42

J´ai trouvé ca :

//////////////////////////////////////////////////
//////////////////////////////////
/ / Gestion du clavier avec Allegro / /
/ / Deplacement d´un Rond a l´ecran / /
/ / Auteur : Amokrane Chentir / /
/ / Date : 31/05/2003 / /

//////////////////////////////////////////////////
//////////////////////////////////

  1. include < allegro.h>

void main()

{
BITMAP *image; / / pour charger un fond noir de taille 640 * 480
BITMAP *buffer;// buffer indispensable pour afficher l´image a l´ecran grace a la fonction blit

PALETTE palette;// la palette on s´en servira lors du chargement de l´image

int x=320; / / position du rond en x initial
int y=240; / / position du rond en y initial

install_allegro(SYSTEM_AUTODETECT,&,atexit); / / fonction d´initialisation d´allegro
install_keyboard(); / /initialisation du clavier
set_color_depth(16); / / mode 16 bits(plein ecran)
set_gfx_mode(GFX_AUTODETECT,640,480,0,0); / / indispensable pour le graphisme

buffer=create_bitmap(640,480); / / buffer de taille 640 * 480
image=load_bitmap("noir.bmp",palette); / / chargement de l´image . BMP

while(!key[KEY_ ESC]) / / Tant que l´on a pas pressé la touche ESC ( echap)
{
textout(image,font,"Deplacement d´un Rond avec Allegro ! ",1,1,makecol(100,100,12)); / /la fonction makecol est expliquée plus bas
circle(image,x,y,5,makecol(255,0,0)); / / Affichage sur notre bitmap d´un cercle dont le centre est au coordonés x=320 et y=240 et de rayon 5
blit(image,buffer,0,0,0,0,image->w,image->h); / / Affichage de l´image sur le buffer
blit(buffer,screen,0,0,0,0,640,480); / / le buffer affichera ceci sur l´ecran

if(key[KEY_UP]) / / si on appuie sur la touche du haut
{
clear_bitmap(image); / / efface l´ecran
y--; / / on decrement y
circle(image,x,y,5,makecol(255,0,0)); / / et on affiche de nouveau le cercle
}

else if(key[KEY_DOWN]) / / LA meme chose . ..
{
clear_bitmap(image);
y++;
circle(image,x,y,5,makecol(255,0,0));
}

else if(key[KEY_LEFT])
{
clear_bitmap(image);
x--;
circle(image,x,y,5,makecol(255,0,0));
}
else if(key[KEY_RIGHT])
{
clear_bitmap(image);
x++;
circle(image,x,y,5,makecol(255,0,0));
}

}
}
END_OF_MAIN(); / / Allegro exige que l´on mette ça a la fin du code . ..

//////////////////////////////////////////////////
///////////////////////////////////////// / /
/ / OK , alors makecol c´est pour la couleur , analysons les 3 parametres : / /
/ / makecol(255,0,0) ici le premier parametre est 255 ce qui nous donnera la couleur rouge / /
/ / makecol(0,255,0)ça c´est pour la couleur Verte / /
/ / makecol(0,0,255) et vla pour la couleur Bleue / /
/ / d´ou le mot RGB Red Green Blue / /
/ / makecol(R,G,B) ! / /
/ / Rappelez vous maintenant quand vous etiez a l´ecole primaire on vous apprenez a melanger les couleurs / /
/ / primaires pour obtenir des couleurs secondaires , dans notre cas c´est la meme chose / /
/ / ex : makecol(100,100,12); donnera la couleur vert militaire ! / /

//////////////////////////////////////////////////
//////////////////////////////////////////////////
/////////

/ * Ok maitenant parlons du systeme buffer affichage a l´ecran qui s´appelle entre autre le double buffering
le double buffering consiste a dessiner dabbord dans une zone de la memoire pour ensuite afficher le bitmap
à l´ecran , c´est ce que fait nos 2 fonctions blit(voir plus haut)
blit(image,buffer,0,0,0,0,image->w,image->h) => la on dessine dans une zone de la memoire
blit(buffer,screen,0,0,0,0,640,480);=> et la on affiche sur notre ecran de taille 640*480
C´est tres simple :) */

/ * Allegro gere le clavier par le biais de diverses manieres ici j´ai utilise la technique la plus simple
key[KEY_$] : ou $ peut etre une lettre comme N B D U ou bien tout simplement la case ESC UP DOWN etc....
*/

/ * Pour plus d´infos sur la librairie d´allegro allez jetez un coup d´oeil sur www.allegro.cc */

JeanYvesYves
JeanYvesYves
Niveau 10
20 juin 2004 à 23:42:22

je ne sais pas comment marche Allegro, cependant, je connais qq astuces :

partons du principe que ton tableau de 256 bool soit toujours a jour ( dis moi si tu n´arrives pas a y gérer) :

tu dois avoir une fonction genre :

bool getkey(int numkey)
{
return tableaukey[numkey];
}

une astuce simples est de programmer :

bool getkey_and release(int numkey)
{
bool res;
res = tableaukey[numkey];
tableaukey[numkey]=FALSE;
return res;
}

qui fait que des que tu lis une touche, il la remet a 0 --> fini les doublons :)

Gonath
Gonath
Niveau 52
20 juin 2004 à 23:48:09

oui mais ca n´empeche pas justement de faire des doubles genre " comment" avec son double " m" ?

En regardant un traitement de texte, il faut un certain temps pour que les doublons arrivent !

il faut donc :

que je regarde si on relache la touche ! si oui, bool à 0 pour la touche. Sinon, on attend un ptit compteur qui interdit l´écriture de la meme lettre sans empecher l´écriture des autres lettres....

lag-it
lag-it
Niveau 10
20 juin 2004 à 23:53:32

Mais juste une question : pourquoi faire de la gestion d´entrées utilitateur avec une librairie de jeux ?
Tu ferais mieux de prendre wxWindows, MFC ou GTK si tu cherche à faire un truc genre traitement de textes...

Gonath
Gonath
Niveau 52
21 juin 2004 à 00:08:12

bon j´ai trouvé :

suffit de mettre à 1 quand une touche est pressé !
interdire l´écriture quand on a la touche à 1
mais quand aucune touche n´est enfoncé, tout remettre à 0

Gonath
Gonath
Niveau 52
21 juin 2004 à 00:08:52

non, j´ai pas du tout envie de faire un traitement de texte, c´est pour mon jeu. Pour permettre à un joueur d´écrire

[BravoleVeau]
[BravoleVeau]
Niveau 10
09 janvier 2011 à 19:07:40

Super ton astuce Gonath! :ok:

Tob-Tob
Tob-Tob
Niveau 10
09 janvier 2011 à 19:25:41

:coeur: ton :up: :coeur:

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware