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++

Fvirtman
Fvirtman
Niveau 10
03 août 2006 à 22:14:11

Archipel >

faut caster :

Demander("Quel est votre nom ?" , (long*)&nom);

ou alors, changer le prototype en pointeur générique :

void Demander(const char* texte, void* pointeur);

darkmaster302
darkmaster302
Niveau 10
04 août 2006 à 01:04:02

Bonjour à tous j´ai une petite question à poser , j´espère qu´elle n´es pas trop bete . Comment supprimer une image de l´ecran en C avec SDL ?
j´ai essayé avec SDL_FreeSurface(); mais sa ne marche pas !

merci d´avance pour vos réponses !

KeepSmile
KeepSmile
Niveau 4
04 août 2006 à 06:36:02

Etant donné que tu blit à chaque Frame, si au prochain Frame tu ne blit pas, elle ne sera pas affiché :)

godrik
godrik
Niveau 30
04 août 2006 à 09:06:38

void Demander(const char* texte, long* pointeur);

void Demander(const char* texte,long* pointeur)
{
char entree;
printf("%s\n",texte);
scanf("%s", entree);

  • pointeur = entree;

}

perso je la trouve bizare ta fonction....
elle prend un long* en parametre, tu lis ensuite 1 char (avec un %s qui est pour les chaine decaractere)
Et tu affecte ce char au long pointé
Donc si le mec te met 1, tu obtiendras le code ascii de 1.
Enfin, c´est bizarre comme fonction.

Giga-Nova
Giga-Nova
Niveau 9
04 août 2006 à 09:36:33

Bjr tous en ce moment je m´essai a la SDL et je bute sur 1 choze pourtant toute simple:

-Pour mon avion comment créér un misile partant de l´avion et traversant la fenetre de haut en bas

-Animer mon avion (2 amiages a faire défiler)
M´étant souvenu que j´avais déja posé la question sur l´animation j´ai été regarder aux pages 58 a 62 pour y trouver la réponse, mais je n´ai pas compris comment j´ai fai a l´époque :hum:

Pour l´instant voila ou j´en suis

-L´avion est le centre de la souris qui est disabled

-il bouge fluidement grace au double buffering

le fond est blanc (j´aimerais mettre un fond étoilé ou un ciel qui simule le mouvement de vitesse de l´avion)

quand je clique sur un des boutons de la souris le bruitage du tir aparait (piuuu ^^)

je suis entrain de mettre en place SDL_ttf pour la police que je compte mettr en haut de l´écran.

merci pour ceux qui seront m´aider

Giga-Nova.

Archipel
Archipel
Niveau 5
04 août 2006 à 11:10:58

C´est bon je me debrouillerai

merci

godrik
godrik
Niveau 30
04 août 2006 à 11:25:40

pour le deplacement de ton avion c´est facil
tu change l´image tous les x frames!
imagine que tu fais 30 frames par secondes
disons que tu change l´image que tu affiches tous les 15 frames, et le problème est réglé.

Il s´agit d´un probleme de "moteur physique" (décidément il faut se repeter souvevnt ici! :) )
Tu crée un objet dans ton "moteur physique" qui a chaque frame fait un déplacement vers le bas de ton écran.

Giga-Nova
Giga-Nova
Niveau 9
04 août 2006 à 11:30:45

lol la théorie j´ai compris je sais pertinement que pour animer c´est juste une alternance d´image par frame.

mais le probleme c´est le bout de ligne de code a inserer dans le code source.

je me doute bien qu´il faut utiliser
SDL INIT TIMER ca va de soit mais ce qu´il me manque c´est la ligne qui dit

avion[alterne 2 image a telle fréquence/nb de frame]

Fvirtman
Fvirtman
Niveau 10
04 août 2006 à 13:25:57

Giga-Nova > une formule bien sympa :

tu calcules un "numimage" a chaque frame : ce numéro, ce sera la frame a afficher :

int numimage = (SDL_gettickcount()/T)%N;

nunimage te reneverra un nombre entre 0 et N-1.
(donc joue sur N pour fixer le nombre d´images d´animations)

T définira la vitesse d´animation : si tu mets 1000, l´image changera chaque seconde. Si tu mets 500, chaque demi seconde. D´une façon générale, l´image changera toutes les T millisecondes.
le % te permet de recommencer une fois que tu es arriver au bout.

Exemple, pour N = 3, tu auras la séquence :

0...1...2...0...1...2...0...1 .........

pour N = 5, tu auras la séquence :
0...1...2...3...4...0...1...2........

sangohan42
sangohan42
Niveau 9
04 août 2006 à 14:00:18

Bonjour a tous,

j´ai moi aussi un petit probleme : en effet je veux créer un jeu de shoot tout simple (un cureseur qui fait du bruit lorsque l´on clic et un perso a dégomer qui est mobile).

Mais je bloque au niveau des collisions :/

Voila mon code(jai effacé quelques partie donc je sais pourquoi il ne marche pas néanmoins je ne comprend pas pourquoi ma fonction collision ne marche pas:

  1. include <stdlib.h>
  2. include <stdio.h>
  3. include <SDL/SDL.h>
  4. include <SDL/SDL_image.h>
  5. include <FMOD/fmod.h>
  6. include <SDL/SDL_ttf.h>

int Collision(SDL_Surface* a,SDL_Surface* b )
{
if((b->x >= a->x + a->w)
|| (b->x + b->w <= a->x)
|| (b->y >= a->y + a->h)
|| (b->y + b->h) <= a->y
)
return 0;
return 1;
}

int main(int argc, char *argv[])
{
SDL_Surface *ecran = NULL, *viseur = NULL,*image = NULL, *texte = NULL;
SDL_Rect position, positionImage;
TTF_Font *police = NULL;
SDL_Color couleurNoire = { 0,0,0};
SDL_Event event;

int continuer = 1;

int TempsPrecedent = 0;
int TempsActuel = 0;

FSOUND_SAMPLE *tir = NULL;
FSOUND_Init(44100,32,0);

tir = FSOUND_Sample_Load(FSOUND_FREE,"gun.wav",0,0,0);

if(tir == NULL)
{

fprintf(stderr,"Erreur de chargement de la musique \n");
exit(EXIT_FAILURE);
}

SDL_Init(SDL_INIT_VIDEO);
TTF_Init();
SDL_ShowCursor(SDL_DISABLE);
ecran = SDL_SetVideoMode(800,600,32,SDL_HWSURFACE | SDL_DOUBLEBUF);

SDL_WM_SetCaption("Gestion du son avec FMOD",NULL);
police = TTF_OpenFont("angelina.ttf", 65); //
Ouverture de la police au début
texte =
TTF_RenderText_Blended(police,"Gagne!!!",couleurNo
ire);

image = IMG_Load("tireur.jpg");
viseur =IMG_Load("viseur.png");

positionImage.x = 0;
positionImage.y = 200;
positionImage.w = 80;
positionImage.h = 104;

while(continuer)
{
SDL_PollEvent (&event);

switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_MOUSEBUTTONDOWN:
FSOUND_PlaySound(FSOUND_FREE,tir);
break;
case SDL_MOUSEMOTION:
position.x = event.motion.x - (viseur-> w /2);
position.y = event.motion.y - (viseur ->h /2);
position.w = 30;
position.h = 30;

break;
}

TempsActuel = SDL_GetTicks();
if(TempsActuel - TempsPrecedent >30)
{
positionImage.x++;
TempsPrecedent = TempsActuel;
}
else /* Si ça fait moins de 30ms depuis le dernier tour de boucle, on endort le programme le temps qu´il faut */
{
SDL_Delay(30 - (TempsActuel - TempsPrecedent));
}

if (collision(image,viseur)&& SDL_MOUSEBUTTONUP)
{
position.x =100;
position.y =100;

SDL_BlitSurface(texte, NULL, ecran, &position); /* Blit du texte par-dessus */

}
SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format, 255,255,255));

SDL_SetColorKey(image,SDL_SRCCOLORKEY,SDL_MapRGB(i
mage->format,255,255,255));

SDL_BlitSurface(image,NULL,ecran,&positionImage);

SDL_BlitSurface(viseur, NULL, ecran, &position);

SDL_Flip(ecran);
}

SDL_FreeSurface(image);
TTF_CloseFont(police);
TTF_Quit();
SDL_Quit();
FSOUND_Sample_Free(tir);
FSOUND_Close();

return EXIT_SUCCESS;
}

sangohan42
sangohan42
Niveau 9
04 août 2006 à 14:01:30

Pour le moment TTf_font ne me sert pas mais je m´en servirait pour affiché si l´on a gagné tt simplement.

Giga-Nova
Giga-Nova
Niveau 9
04 août 2006 à 14:47:13

Mais pour mes images (2 perso donc 0 et 1)

dois déclarer dans la variable

SDL_Surface *avion = NULL, *avion2 = NULL;

ou SDL_Surface * avion[1] = NULL;
(bien que c´est c la meme chose je ne vois pa pourquoi le 2eme cas ne marche pas

int numimage = (SDL_gettickcount()/500)%1;

numimage ca représente quoi ?

ensuite SDL_INIT_TIMER je pense que ca doit etre mit en le code source. (enfin vu ta fonction c sur)

sangohan42
sangohan42
Niveau 9
04 août 2006 à 22:41:50

PAs de réponse sniff .

godrik
godrik
Niveau 30
05 août 2006 à 01:32:41

en fait, un code en deux fonction coller sur un forum au lieu d´un wall, ca ne donne pas tres envie de le lire.

Qosimo
Qosimo
Niveau 37
07 août 2006 à 21:10:05

sangohan42 ,

je n´ai pas regardé ton code en détail, de toute façon, je m´y connais pas assez bien en collisions pour pouvoir te dire à l´oeil ce qui est faux. Toutefois, je ne peux que te conseiller de vérifier :

1) si tu n´as pas oublié (ou mal placé) des parenthèses. La priorité des opérations est souvent plus importante qu´on ne le crois.

2)de tester ton algo sur papier en te mettant à la place de l´ordi. Je te conseille de faire ça quand ton ordi est éteint, faire ça en même temps c´est comme si tu code directement, donc ça apporte rien. Enfin, je sais pas si ça t´aidera, moi, c´est comme ça que je teste tous mes algo.

3)(alternative à la 2) : tu prends un crayon, une feuille, et tu imagine un nouvel algo de collision. Quand je dis nouveau, ça veut pas dire qu´il doit être complétement différent de celui que t´as maintenant. Ca peux être le même. Seulement, peut être quand le récrivant tu remarquera un petit détail auquel tu n´avais pas préter attention lors de ta première tentative. Pour que ceci fonctionne, tu ne dois pas avoir ton ancien algo sous les yeux.

En espérant d´avoir un petit peu aidé :)

Qosimo
Qosimo
Niveau 37
07 août 2006 à 21:11:31

Moi aussi, j´ai une petite question : qu´est-ce qu´une librairie dinamique (.dll) ? Qu´elle est la différence avec un simple fichier Header (.h)?

Lapintade
Lapintade
Niveau 30
07 août 2006 à 23:26:26

Une lib tout court (.lib ou .a) : fichier binaire qui contient des fonctions. On l´attache au programme quand on construit l´exe (quand on link).

Une lib dynamique (.dll) : Et bien quand on construit l´exe on lui dit "t´inqueites pas t´auras tes fonctions mais tu les auras quand tu t´executeras" et donc il faut le link sans avoir toutes les fonctions. Il demande des dll au moment de s´executer.

Un fichier .h : et bien c´est juste un fichier texte, qui sert a mettre les entetes de fonctions (et qui genere rien du tout). Donc rien a voir avec les deux precedent elements.

Lapintade
Lapintade
Niveau 30
07 août 2006 à 23:27:06

"il fait le link .." et non "il faut".

sangohan42
sangohan42
Niveau 9
07 août 2006 à 23:39:27

Oki je vais refaire l´algo je pense. A bientot

Qosimo
Qosimo
Niveau 37
13 août 2006 à 18:39:44

Merci Lapintade. Donc les librairie sont déjà compilée ? Et après la compilation du programme qui utilise le .lib, on optient juste un fichier .exe, à la différence du .dll qui restera séparé de l´exe et qui sera appelé au moment ou le programme est lancé. J´ai bien compris ?

Donc je vois une seule utilité aux dll, c´est que tu peux p.e. améliorer un algoritme sans retoucher le programme qui ne fait qu´appeler la fonction.

Maintenant, ma question : comment on fait une DLL ? On code juste un programme où on écrit une suite de fonction (comme un fichier fonction.c par exemple) et on le compile où il y a d´autres étapes ? Je travaille avec DEV c++.

Merci :)

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