Correction de mon programme

Fermé
Utilisateur anonyme - 11 févr. 2016 à 18:02
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 4 août 2016 à 19:59
Bonjour,

Voila je voudrais ouvrir une fenetre avec un fond d'image et une autre image par dessus . Mais mon code ne marche pas . D'ailleur à la compilation , il ouvre un fichier SDL_video.h qui ajoute les erreurs empechant la compilation .

Pourriez vous corriger ce code qui est le seul a emettre ce fichier etrangement :

#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
#include "fonction.h"


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

    SDl_Init(SDL_INIT_VIDEO);
    SDL_SetVideoMode(500,665,32, SDL_HWSURFACE | SDL_FULLSCREEN );
    SDL_Surface* ecran = NULL;
    SDL_Surface* avion = NULL;
    SDL_Surface* chasseur = NULL;
    SDL_Surface* background = NULL;
    SDL_Rect pavion;
    SDL_Rect pchasseur;
    SDL_Rect pbackground;

    ecran = SDL_SetVideoMode(500,665,32, SDL_HWSURFACE);

    pavion.x = 309;
    pavion.y = 389;

    pbackground.x = 0;
    pbackground.y = 0;

    background = SDL_LoadBMP("background.bmp")
    SDL_BlitSurface(background, NULL , ecran, &pbackground)
    avion = SDL_LoadBMP("avion.bmp")
    SDL_BlitSurface(avion, NULL , ecran, &pavion)
    SDL_Flip(ecran)

    pause();

    return EXIT_SUCCESS



}




A voir également:

5 réponses

forum92 Messages postés 220 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 14 août 2018 133
1 août 2016 à 17:47
premierement:
#include "fonction.h"
je mettrais #include <fonction.h>

deuxiemement pourquoi dans ton main tu demande un int argc si tu l'utilise pas?
0
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
2 août 2016 à 20:04
#include "fonction.h"
je mettrais #include <fonction.h>

Non, c'est probablement bien "fonction.h", car ce headers ne fait pas partie de la bibliothèque standard (et probablement pas d'une autre bibliothèque non plus, avec un nom français et très vague). On suppose donc qu'il s'agit d'un fichier du programme, ce qui nécessite l'utilisation de guillemets et non de chevrons.

deuxiemement pourquoi dans ton main tu demande un int argc si tu l'utilise pas?
On demande fréquemment les arguments du programme même si on ne les utilise pas. C'est tout à fait correct. Il est vrai qu'ici
int main(void)
fonctionnerait aussi bien.
0
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
Modifié par paly2 le 2/08/2016 à 21:15
Salut, c'est un peu tard pour répondre à ce sujet qui commence à se faire vieux,

Je vois quelques problèmes dans ton code.

1. Tu utilises ici la SDL 1. Elle est maintenant bien dépassée, la SDL 2.0 est sortie. L'API n'est plus compatible (ils ont bien fait de la changer, d'ailleurs la nouvelle est bien meilleure, je trouve), aussi si tu lisais un tutoriel pour la SDL 1, tu ne pourras plus le réutiliser pour la SDL 2 (mais elle est plus simple à utiliser).

2. Tu fais appel deux fois à SDL_SetVideoMode (une fonction disparue dans la SDL 2, remplacée par la super-élégante SDL_CreateWindow), ne conserve que la deuxième (dont tu récupères le retour, ce qui est assez indispensable).

3. J'imagine que la fonction pause() est déclarée dans fonctions.h et définie quelque part dans un fichier source. Si ce n'est pas le cas, ça doit l'être.

4.
pbackground.x = 0;
pbackground.y = 0;
// ...
SDL_BlitSurface(background, NULL , ecran, &pbackground);

Documentation: If dstrect is NULL, then the destination position (upper left corner) is (0, 0).
Donc tu peux oublier la variable pbackground (qui est bien encombrante, n'est-ce pas ?), et écrire simplement:
SDL_BlitSurface(background, NULL , ecran, NULL);


5. Vérifie toujours les retours des fonctions, il peut s'être produit une erreur et seul le retour te le dira ! Ils sont décrits dans la documentation.

6. N'oublie pas de faire des SDL_FreeSurface pour toutes les surfaces que tu alloues, ainsi qu'un SDL_Quit à la fin.

7.
background = SDL_LoadBMP("background.bmp")
SDL_BlitSurface(background, NULL , ecran, &pbackground)
avion = SDL_LoadBMP("avion.bmp")
SDL_BlitSurface(avion, NULL , ecran, &pavion)
SDL_Flip(ecran)

5 point-virgules oubliés :p

8.
SDL_SetVideoMode(500,665,32, SDL_HWSURFACE | SDL_FULLSCREEN );

En fullscreen ? J'espère que ta fonction pause() prévoit un moyen pour arrêter le programme avec un autre événement que SDL_QUIT, qui généralement ne peut être produit que par un clic sur la croix qui disparaît en fullscreen !
De toute façon, tu ré-appelles cette fonction après (tu dois donc supprimer ce premier appel) sans SDL_FULLSCREEN, voir 1.


Je te laisse déjà corriger tout ça !

Et sinon, il est indispensable que tu nous donnes les messages d'erreur dont il est question. Il ne sert absolument à rien de nous dire qu'il y a une erreur sans nous dire quelle erreur, nous ne pourrons pas t'aider. Il peut y avoir des milliers de causes à "une erreur qui se produit quand", quand une seule cause est possible pour "cette erreur".
A+

La curiosité est une excellente qualité !
0
forum92 Messages postés 220 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 14 août 2018 133
2 août 2016 à 22:06
Ok désolé je savais pas...
D habitude je mets les entête des sous programmes devant le main. Je les intègres pas avec un .h.

C'est quoi l'intérêt d'appeler quelque chose si tu l'utilises pas ?
0
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
Modifié par paly2 le 3/08/2016 à 11:00
D habitude je mets les entête des sous programmes devant le main. Je les intègres pas avec un .h.
"Sous-programmes" ? Tu veux dire fonctions ?
C'est seulement dans les très petits programmes qui ne sont constitués que d'un seul fichier source qu'on déclare les prototypes des fonctions dans ce fichier source.


C'est quoi l'intérêt d'appeler quelque chose si tu l'utilises pas ?
Généralement le programme se met très rapidement (dès qu'il commence à évoluer et à se complexifier) à utiliser ses arguments, pour permettre à l'utilisateur plus de flexibilité. Et sinon c'est juste une question d'habitude :-)
De plus, certains éditeurs mettent automatiquement les arguments de la fonction main.
Mais main() est la seule exception parce que ses arguments sont définis dans les standards (C89, C99...) ; pour les autres fonctions il est vrai qu'il est parfaitement inutile (et même très mal) de demander des paramètres inutilisés.
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228 > paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018
4 août 2016 à 19:59
"Sous-programmes" est l'appellation de plus en plus désuète des fonctions. Popularisée quand les langages utilisant le terme dans leur syntaxe (entre autres les dérivés de BASIC, avec
Sub
), plus aucun langage récent ou digne de ce nom (C par exemple) ne s'en sert.
0
forum92 Messages postés 220 Date d'inscription lundi 6 juillet 2015 Statut Membre Dernière intervention 14 août 2018 133
3 août 2016 à 12:32
ok merci!
on en apprend tout les jours !:)

--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mehdi178 Messages postés 27 Date d'inscription mardi 26 août 2014 Statut Membre Dernière intervention 9 juillet 2017 1
4 août 2016 à 18:42
Des réponses aussi tardives. Désolé de vous avoir fais perdre du temps mais j'ai arrêté le C pour passer au Java qui me paraît plus simple et plus utile. Mais merci quand même pour avoir l'intention de m'aider lol.
0
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
4 août 2016 à 19:35
Ton programme aurait été moins compliqué s'il utilisait l'API de la SDL 2.
S'il est vrai que les programmes Java prennent souvent moins de lignes que des programmes équivalents en C, le Java n'est pas plus utile que le C, il permet même de faire moins de choses (par exemple, il est impossible d'écrire un système d'exploitation en Java). De plus le Java a une vitesse d'exécution plus faible, et il consomme de bien plus grandes quantités de mémoire. Perso ce n'est pas un langage que je conseillerais.

Et de rien...
0