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++/SDL] questions sur pong

sonic66
sonic66
Niveau 10
19 août 2005 à 18:41:18

aucune idée :-(

Vengeur41
Vengeur41
Niveau 10
19 août 2005 à 18:55:01

Rikkuman > Un peu de reflexion voyons :)

Sonic66 > Tu peux donner le code complet stp ?

sonic66
sonic66
Niveau 10
19 août 2005 à 18:58:08
  1. include <SDL/sdl.h>

SDL_Surface* surface;
SDL_Surface* imgpong1;
SDL_Surface* imgpong2;
SDL_Surface* imgdecors1;
SDL_Event event;
Uint8 *keystate;
int vit=650;

void init() /*Pour initialiser SDL*/
{
SDL_Init(SDL_INIT_VIDEO);
surface=SDL_SetVideoMode( 1024, 768, 32, SDL_FULLSCREEN|SDL_HWSURFACE|SDL_DOUBLEBUF);
SDL_ShowCursor(0);
imgpong1 = SDL_LoadBMP("pong.bmp");
imgpong2 = SDL_LoadBMP("pong.bmp");
imgdecors1 = SDL_LoadBMP("decors.bmp");
}

void bouger() /*Pour controler les touches*/
{
while(1)
{
while(SDL_PollEvent(&event))
{
keystate=SDL_GetKeyState(NULL);
if(keystate[SDLK_UP])
{
vit=vit-4;
return;
}
if(keystate[SDLK_DOWN])
{
vit=vit+4;
return;
}
if(keystate[SDLK_RETURN])
{
return;
}
}
}
}

int main(int argc, char *argv[])
{
SDL_Rect rectangle;

init();
while(1)
{
keystate=SDL_GetKeyState(NULL);
if(keystate[SDLK_RETURN])
{
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}

rectangle.x=0;
rectangle.y=0;
rectangle.w=1024;
rectangle.h=768;
SDL_BlitSurface(imgdecors1 , NULL , surface , &rectangle);
rectangle.x=10;
rectangle.y=vit;
rectangle.w=1024;
rectangle.h=768;
SDL_BlitSurface(imgpong1 , NULL , surface , &rectangle);
rectangle.x=990;
rectangle.y=vit;
rectangle.w=1024;
rectangle.h=768;
SDL_BlitSurface(imgpong2 , NULL , surface , &rectangle);

SDL_Flip(surface);
bouger();
}
}

c´est tout

Vengeur41
Vengeur41
Niveau 10
19 août 2005 à 19:07:57

Bon, autant que ca soit clair, j´aime les noms explicites et ta boucle d´evenements autant l´appeler eventloop() qui décrit bien ce qu´elle fait plutot que bouger().

Ensuite, ton bouger() tu lui met une boucle infinie, ca veut dire qu´il continuera toujorus à traiter ses evenements et le programme n´avancera pas !
Ensuite y´a pas besoin de reprendre 2 fois les touches, une suffit :

---
void bouger() /*Pour controler les touches*/
{
if (SDL_PollEvent(&event))
{
/* C´est là qu´on voit que ton code est pas terrible : on sait pas du tout ce qu´il faut mettre là ! */
}
}
----
while(1)
{
keystate=SDL_GetKeyState(NULL);
if(keystate[SDLK_RETURN])
{
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
if(keystate[SDLK_UP])
{
vit=vit-4;
return;
}
if(keystate[SDLK_DOWN])
{
vit=vit+4;
return;
}
rectangle.x=0;
rectangle.y=0;
rectangle.w=1024;
rectangle.h=768;
SDL_BlitSurface(imgdecors1 , NULL , surface , &rectangle);
rectangle.x=10;
rectangle.y=vit;
rectangle.w=1024;
rectangle.h=768;
SDL_BlitSurface(imgpong1 , NULL , surface , &rectangle);
rectangle.x=990;
rectangle.y=vit;
rectangle.w=1024;
rectangle.h=768;
SDL_BlitSurface(imgpong2 , NULL , surface , &rectangle);

SDL_Flip(surface);
bouger();
}
---
Déjà j´aime pas la boucle infinie, fait intervenir un booléen pour quitter, c´est plus propre à mon gout...

On s´arrête là pour le bouger, si ca marche pas je te la referait bien mais franchement soit plus autonaume, tu n´as clairement pas le niveau pour faire un pong, apprend avec des tutos...
Réfléchis plus !

Vengeur41
Vengeur41
Niveau 10
19 août 2005 à 19:08:54

Tu pourra waller ton code la prochaine fois, merci :)

sonic66
sonic66
Niveau 10
19 août 2005 à 19:50:57

Bah pour le niveau c´est bien possible ouais ^^
apres pour reflechir bah t´inkiete que je l´ai fait ^^

sonic66
sonic66
Niveau 10
19 août 2005 à 19:58:10

enfin je croit

sonic66
sonic66
Niveau 10
19 août 2005 à 20:17:10

Mon code est mal foutu ouais , je vais le refaire :)

Rikkuman4
Rikkuman4
Niveau 10
19 août 2005 à 21:03:06

Oui trés mal foutu, tu devrais faire plus de commentaire, changé la façon donc tu initialise la video

met SDL_FULLSCREEN en dernier et pas en premier aussi.

Et fait en sorte de prendre ton, temps sinon tu ne vois pas tes erreurs et tu comprend rien :)

sonic66
sonic66
Niveau 10
19 août 2005 à 21:07:00

l´ordre du fuullsreen n´est pas important ^^

et en fait , le code de la raquette qui bouge , bah je l´ai fait en 10 minutes au depars :rire: donc....

Musashi001
Musashi001
Niveau 10
20 août 2005 à 03:12:15

Pour le coup du "quand on reste appuyé sur le haut ou le bas ça marche pas" je pense que tu dois utiliser la répétition des touches.

Je te donne ma vielle fonction pour initialiser le mode vidéo:

void VideoMode(int weight, int height, int full, char title[10])
{
SDL_Init(SDL_INIT_VIDEO);
if (full) Screen =
SDL_SetVideoMode(weight,height,32,SDL_HWSURFACE|SD
L_DOUBLEBUF|SDL_FULLSCREEN);
else Screen =
SDL_SetVideoMode(weight,height,32,SDL_HWSURFACE|SD
L_DOUBLEBUF);

SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_D
EFAULT_REPEAT_INTERVAL);
//ou alors SDL_DEFAULT_REPEAT_INTERVAL+50
SDL_WM_SetCaption(title,NULL);
SDL_EnableUNICODE(1);
SDL_ShowCursor(0);
}

C´est la ligne
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_D
EFAULT_REPEAT_INTERVAL+50);
qu´il faudra changer tu change le 50 selon tes besoin...

Musashi001
Musashi001
Niveau 10
20 août 2005 à 03:16:17

avec jv.com, ça rend pas terrible alors, ma fonction sur la wall:
http://walljv.free.fr/index.php?to=view&amp;id=101

Rikkuman4
Rikkuman4
Niveau 10
20 août 2005 à 14:04:20

Vengeur41 :d)

Voilà aprés plusieurs tentative, je n´arrive toujour pas à faire un saut avec mon image j´ai beau avoir fait plusieurs codes, sa ne marche pas :

if(keystate[SDLK_UP])r2.y-=30; //20 = vitesse
if(keystate[SDLK_SPACE]&& SDLK_UP-SDLK_DOWN )r2.y-=60;
if(keystate[SDLK_DOWN] && r2.y<670)r2.y+=20;

Un des codes aussi farfelue que les autres :sarcastic:

Pourrais ton me donner un petit indice histoire de pas tout me dis la façon de faire :) ? merci beaucoup

Vengeur41
Vengeur41
Niveau 10
20 août 2005 à 20:09:26

Ben tu fais une variable saut et suivant son état, tu fais monter ou descendre le personnage !

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