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

[SDL] Erreur et Gestion des Colisions

Giga-Nova
Giga-Nova
Niveau 9
27 août 2007 à 23:11:03

Bonsoir tout le monde, voila je code actuellement en C avec la lib SDL, et je bute sur une erreur tout simple de syntaxe, que je n´arrive pas a résoudre... :non2:

Bon voici le code, j´espère que quelqu´un pourra m´aider

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

// Includes SDL

  1. include <SDL/SDL.h>
  2. include <SDL/SDL_image.h>
  3. include <SDL/SDL_ttf.h>

const int MIN_WIDTH = 0;
const int MAX_WIDTH = 640;

int continuer = 1;

SDL_Surface *ecran = NULL, *Raquette = NULL, *Balle = NULL, *Score = NULL;

SDL_Rect raquette_pos, balle_pos, score_pos;

raquette_pos.x = 0;
raquette_pos.y = 464;

score_pos.x = 600;
score_pos.y = 50;

TTF_Font *police = NULL;
SDL_Color couleurNoire = {0, 0, 0};

void init()
{

SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER); // Initialisation de la SDL

TTF_Init(); // init de TTF

police = TTF_OpenFont("data/police.ttf", 12);

ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); // Ouverture de la fenêtre

SDL_WM_SetCaption("Game in C & SDL", NULL);
SDL_ShowCursor(SDL_DISABLE); // efface le pointeur de la souris

}

void physique(SDL_Rect *pos)
{

if(pos->x < MIN_WIDTH)
{
pos->x = MIN_WIDTH;
}
if(pos->x + pos->w > MAX_WIDTH)
{
pos->x = MAX_WIDTH - pos->w;
}
}

void load()
{
Raquette = IMG_Load("data/raquette.png");
Score = TTF_RenderText_Blended(police, "TEST", couleurNoire);

}

void procces()
{
SDL_Event event;

SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_MOUSEMOTION:
raquette_pos.x = event.motion.x - (Raquette->w / 2);
raquette_pos.y = (Raquette->h /2);
break;
}
}

void clean()
{
//Liberation des surfaces
SDL_FreeSurface(Balle);
SDL_FreeSurface(Raquette);
SDL_FreeSurface(ecran);
SDL_FreeSurface(Score);

TTF_CloseFont(police);
TTF_Quit(); // quitte la librairie TTF

//On quitte SDL
SDL_Quit();
}

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

load();

while (continuer == 1)
{
process();

physique(&raquette_pos);

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

SDL_BlitSurface(Raquette, NULL, ecran, &raquette_pos);

SDL_BlitSurface(Score, NULL, ecran, &score_pos);

SDL_Flip(ecran);

}

clean();

return 0;
}

/// J´essaye de rendre mon code le plus clair possible en utilisant le max de fonction pour automatiser le tout.

Requête n°2: Pour mon petit Casse brique j´aimerais savoir comment générer des rangées de briques sur la fenêtre, je me vois mal coder 100 brique a la "main"

je pensait a une fonction void brique() avec une boucle for
et un incrémentation des coordonnées x et y, mais je ne voi pa comment faire..

Et aussi comment supprimer une brique rentrée en contact avec la balle?

je vois bien un SDL_FreeSurface(Briquetouchée);..

Et ainsi cet fonction pourrai me permettre d´incrémenter ma variable score.

Merci a ceux qui auront le courage de lire et de m´aider a résoudre mes problèmes.

Giga-Nova
Giga-Nova
Niveau 9
27 août 2007 à 23:40:17

je précise que l´erreur de syntaxe se trouve en début de code près du raquette_pos.x = 0;

_Xaar
_Xaar
Niveau 10
27 août 2007 à 23:55:36

Pour l´erreur de syntaxe je laisse les pros du C jeter un coup d´oeil, pour les autres questions je réponds en disant le principe général vu que j´utilise pas le meme language.

Pour générer des briques je verrais pas ça totalement au hasard si tu a plusieurs types de briques mais dans un fichier texte fait par toi même chargé au début de chaque niveau.

Exemple : une brique 1 se casse en 1 coup et est de couleur jaune, une brique 2 en 2 coups est bleue, une brique 3 en 3 coups est rouge. Si ton terrain fait 3 rangées sur 3 lignes (pour simplifier) tu peut mettre ça dans ton fichier carte pour faire trois jolies rangées de couleurs différentes :

333
222
111

Tout ça à charger dans une fonction niveau_chargement() qui lira les ids des briques de haut en bas et de gauche à droite en augmentant à chaque fois x et y comme il le faut.

Pour supprimer une brique si tu parle juste de virer la brique touchée de la mémoire au chargement du niveau tu charge les ids des briques dans un tableau à 2 dimensions et tu met la case correspondante à zéro (le tableau servant bien sûr à tes collisions aileurs dans le programme).

Giga-Nova
Giga-Nova
Niveau 9
28 août 2007 à 00:31:32

j´aurais bien voulu le coder en python, je m´y suis mis récemment mais je ne trouve pas de bon tutoriels en français sur l´implantation pygame. Tout ce que j´ai trouvé ce sont des introductions. Le seul ouvrage complet est je trouve celui de mr Swinnen. Bref je revien au C car cela fait maintenant 4 ans que je l´apprend (enfin si je compte les coupures plu ou moins longues).

Pour l´instant je me concentre juste sur le spawn de briques et la collision avec la balle, ainsi que le score.

A_Genius
A_Genius
Niveau 7
28 août 2007 à 08:39:32

pour faire une rangée horysontle, tu fais par exemple:
brique.x = x
brique.y = 500 (hauteur de la rangée)

int rangée(int nombre_de_briques, int taille_de_la_brique)
{

for(x=0,x<nombres_de_briques,x+taille_de_la_brique
) /* si par ex le nombre de briques est de 290 et que la taille est de 29, tu auras 10 briques alignées :ok: )*/
{

SDL_BlitSurface(brique,&brique,image_de_fond,NULL)
;
collision(brique_actuelle); /* le mieux serait d´écrire une fonction qui ferai les tests de collisions pour la brique actuelle ou une fonction parametrable avec un int*/
}

}

tu appelles cette fonction pour le nombre de rangées que tu veux, ou tu fais un fichier txt avec les lvl, comme l´a dit xaar, ce qui serait encore mieux ^^

ca devrait marcher non ?
et le score bah tu mets, si collision avec une brique il y a, +1 au score par exemple, ou tu pourrais mieux encore voir le type de la brique qui rapporterai plus ou moins de points par rapport aux autres briques, mais ca prendrait plus longtemps :)

A_Genius
A_Genius
Niveau 7
28 août 2007 à 08:44:21

Il y a aussi ce site qui pourrait te donner des idéespour optimiser ton casse-briques :
http://www.alphabounce.com/ :)

Giga-Nova
Giga-Nova
Niveau 9
28 août 2007 à 12:16:46

Bonjour tous, merci pour l´aide pour le problème des briques.

Donc pour le fichier texte, il suffit de coder un fonction brique()
qui appellera l´ouverture de fichier et lira ainsi les chiffres pour telle ou telle brique

Sinon personne n´a trouvé l´erreur stupide que je n´arrive a pas résoudre... JY² ne traine pas dans les parages (quel bon prof quand même !)

Bonne journée.

VictorVVV
VictorVVV
Niveau 6
28 août 2007 à 15:47:12

Je pense qu´il faut que tu déplaces ces quatre instructions dans le main. Je crois qu´il n´y a que des déclarations (de variables, de fonctions, de classe) hors du main.

Giga-Nova
Giga-Nova
Niveau 9
28 août 2007 à 16:06:35

Effectivement les brique_pos.x et y doivent se trouver dans le main. meric de ton aide ^^´

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