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

J´aide les personne en C/C++

LGV
LGV
Niveau 28
17 juin 2005 à 15:00:06

pense que ca peut etre utilise dans des expressions un peu plus compliquees..

deja, si on fait un bete :

toto a;
a = a++;

ou encore :

toto a, b;
a = b + b++;

( bon, c´est idiot de faire ca, en terme de logique, maid c´est faisable et legitime, et le resultat doit etre correct)

etc. bref, et des qu´on mixe un peu avec d´autres termes, ca devient vite le bord...

de plus, si tu surcharges un operateur post ou pre, il est relativement mal aise de savoir si son antagoniste fait la meme chose ou pas.

donc, si on s´en tient a des cas simples, ca se vaut theoriquement. Mais comme il est legitime de faire des choses plus tordues avec, le compilo doit faire que ca marche quand meme. ( si je retrouve la page adequate des specs d´ICC, il y est specifie quelles expressions pre/post sont optimisees et comment ; c´est loin d´etre trivial)

dorian65
dorian65
Niveau 8
17 juin 2005 à 15:03:20

pour mon niveau j´ai fait ça : http://img297.echo.cx/img297/2136/getsystemmetrics8fs.png
après tu dis ce que tu veux . ..

après pour le _ j´essaye . ..

    • test***

yes!!! ça marche :) ^^
merci beaucoup ! ^^

godrik
godrik
Niveau 30
17 juin 2005 à 15:05:54

Ouais, je veux bien plus d´info
( More Effective C++ tu dis ? )
parceque c´est relativement étonnant.

Happyman
Happyman
Niveau 6
17 juin 2005 à 15:57:37

Encore un truc : cette ligne :

while(SDL_PollEvent(&)) // aquisition d´evenement

J´ai pas bien compris à quoi ça servait d´acquérir des évenement...

Et dans le void waitkey(), pourquoi ça ne marche pas quand on l´enlève ? ( J´enlève aussi le " waitkey()" du main, of course :) )

gollumkawder
gollumkawder
Niveau 10
17 juin 2005 à 15:59:44

Acquerir un evenement ça sert a quoi ?

Quand dans ton programme quelqu´un utilise la souris, ou le clavier, c´est un evenement, pour que le programme prenne en compte les messages de ces evenements, l´API prévoit une partie qui permet d´intercepter les messages, soit du materiel, soit du logiciel ( les evenements/messages peuvent aussi etre des messages du systeme)

gollumkawder
gollumkawder
Niveau 10
17 juin 2005 à 16:00:18

enfin je connais pas SDL mais bon..

JeanYvesYves
JeanYvesYves
Niveau 10
17 juin 2005 à 16:03:39

En fait, faut bien comrpendre le truc :
Imagine une file d´attente au cinéma. Chaque personne qui attend est un évenement.
Quand tu appuies sur une touche, ça genere un evenement ( donc ça ajoute un bonhomme dans la file, ce bonhomme est la pour dire " on a appuyé sur K")
quand tu relaches une touche, pareil, un bonhomme se rajoute.
Donc SDL controle une file d´attente d´evenements, tout seul. Jusque la ça va ? :)

SDL_PollEvent sert a dire " Suivant ! !"
Il prend donc le prochain mec de la file d´attente, et copie ce qu´il doit dire dans event.
SDL_PollEvent te renvoie VRAI si il y avait encore quelqu´un dans la file, et FAUX s´il n´y a plus personne.

Le while autour veut donc dire :
" Tant qu´il y a du monde dans la file d´attente, recupere la prochaine personne, met ce qu´elle a à dire dans " event", et fait ce qu´il y a dans le while"
Et, une fois dans le while, on analyse ce que l´evenement avait a dire...

dorian65
dorian65
Niveau 8
17 juin 2005 à 16:03:41

hep ! qui peux m´aider ?

les WORD et DWORD j´arrive bien à les convertir mais pour les VOID ( LPVOID plus precisement) je trouve pas le truc . .. j´ai du mal avec les formats les types etc...

pendant ce temps je cherche . ..

JeanYvesYves
JeanYvesYves
Niveau 10
17 juin 2005 à 16:05:29

et si tu fais :
DWORD v;
WORD w = ( DWORD)v;

ça marche pas ?

godrik
godrik
Niveau 30
17 juin 2005 à 16:10:19

une variable void, ca n´exiset pas.
Une variable LPVOID, ce n´est pas vraiment un pointeur sur un void, c´est plus un pointeur vers un truc qu´on ne sait pas ce que c´est. C´est don difficile a afficher ( puisqu´on ne sait pas ce que c´est)
en outre, tu peux toujours affiher sa valeur ( l´adresse vers laquelle il pointe) en faisant un typecast

Happyman
Happyman
Niveau 6
17 juin 2005 à 16:51:09

J´ai maintenant essayé de modifier le premier tuto SDL de JYY ( toujours le même) :

void waitkey() // attend qu´on appuie sur RETURN
{
while(1) // boucle
{
while(SDL_PollEvent(&)) // aquisition d´evenement
{
if ( event.type == SDL_KEYDOWN) / / on appuie sur une touche ?
{
if ( event.key.keysym.sym == SDLK_SPACE) return; / / c´est " RETURN" ?
}
}
}
}

void droite() // attend qu´on appuie sur RETURN
{
while(1) // boucle
{
while(SDL_PollEvent(&)) // aquisition d´evenement
{
if ( event.type == SDL_KEYDOWN) / / on appuie sur une touche ?
{
if ( event.key.keysym.sym == SDLK_RIGHT) / / c´est " RETURN" ?
{
rect1.x = 50;
return;
}
}
}
}
}

void gauche() // attend qu´on appuie sur RETURN
{
while(1) // boucle
{
while(SDL_PollEvent(&)) // aquisition d´evenement
{
if ( event.type == SDL_KEYDOWN) / / on appuie sur une touche ?
{
if ( event.key.keysym.sym == SDLK_LEFT) / / c´est " RETURN" ?
{
rect1.x = -50;
return;
}
}
}
}
}

int main(int argc , char **argv)
{
SDL_Rect rect1; // structure rectangle
prepare_SDL(); // initialise ( plus haut)
firstscreen = SDL_LoadBMP("image.bmp"); // charge l´image
/ / on dessine
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024; // défini le rectangle
rect1.h = 768;

SDL_BlitSurface(firstscreen,NULL,screen,&1); /
/ colle l´image sur l´écran, NULL car on affiche TOUTE l´image
SDL_Flip(screen); // affiche la prochaine frame
droite();
gauche();
waitkey(); // attends qu´on appuie sur Return ( plus haut)
SDL_ShowCursor(1); // reactive la souris
SDL_Quit(); // quitte SDL
return 0; // quitte le programme
}

Et ça bloque sur la ligne " rect1.x = 50". Pourquoi ?

Happyman
Happyman
Niveau 6
17 juin 2005 à 16:53:33

J´ai oublié de dire que mon programme était sensé décaler l´image " image.bmp" de 50 px vers la droite quand on appuyait sur la touche droite et de 50 px vers la gauche quand on appuyait sur la touche gauche.

Moule53
Moule53
Niveau 10
17 juin 2005 à 16:59:19

Essaye de remplacer rect1.x = 50 par rect1.x += 50
Jte garantie rien

Happyman
Happyman
Niveau 6
17 juin 2005 à 17:02:55

Non, désolé, ça a pas marché

JeanYvesYves
JeanYvesYves
Niveau 10
17 juin 2005 à 17:05:44

rect1 est déclaré dans le main, et non dans ta fonction gauche() ou droite()
si tu veux faire le porc, mais le " SDL_Rect rect1" est variable globale ( juste en dessous des include) et eneleve le du main.
Cependant, tu vas etre déçu :
ton programme va attendre que tu appuies sur gauche, puis il va attendre que tu appuies sur droite.
et ensuite, jamais tu ne reblittes ta surface.
tu fais droite()
puis ensuite gauche()
entre les deux, tu ne demandes pas de réafficher :)

Moule53
Moule53
Niveau 10
17 juin 2005 à 17:07:11

En gros faut faire une boucle :)

Happyman
Happyman
Niveau 6
17 juin 2005 à 17:18:33

Entre les lignes " rect1.h = 768" et
"SDL_BlitSurface(firstscreen,NULL,screen,&1);
// colle l´image sur l´écran, NULL car on affiche TOUTE l´image", j´ai ajouté :

while ( 1)
{
gauche();

SDL_BlitSurface(firstscreen,NULL,screen,&1); /
/ colle l´image sur l´écran, NULL car on affiche TOUTE l´image
}

while ( 1)
{
droite();
SDL_BlitSurface(firstscreen,NULL,screen,&1);
}

et ça bloque toujours sur la même ligne :non:

BastGame
BastGame
Niveau 7
17 juin 2005 à 17:30:05

moi j´ai un probleme c´est que:

  1. include < stdlib.h>
  2. include < iostream>

using namespace std;

int main()
{
int age;
cout < < " votre age ? " < < endl;
cin > > age;
cout < < " vous avez " < < age < < " ans" < < endl;
system("PAUSE");
return 0;
}

/ * COMMENTAIRES

int age;
je viens de mettre sa puis j´ai compiler et executer mais sa me met du genre oubli de compilation alors que je viens juste de le faire

godrik
godrik
Niveau 30
17 juin 2005 à 17:32:48

bastgame: pas compris, soit plus explicite donne un message exacte.

JYY: j´adore comment tu fais tes reponses, tu ne donne pas vraiment la solution mais tu loaclise le problemE.
J´aime bien c´est tres didactique! :)

BastGame
BastGame
Niveau 7
17 juin 2005 à 17:40:49

En faite j´ai marqué le code C++ puis ensuite je compile et execute mais sa ne marche

ps:j´utilise DEV C++

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