Aller au menu - Aller au contenu
Inscris-toi au e-camp "Héberge ton jeu Facebook sur Azure" de Microsoft vendredi 25 mai à 13h30 !

[Concours] Après la console, place à la SDL

Éblouissez-nous !

Pour accéder à cette section
Connectez-vous !
connexion_rpx

Résolu Le problème de ce sujet a été résolu

Page 1  2  3  4  ...  31  32  33  34  Suivante
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1  2  3  4  ...  31  32  33  34  Suivante
Hors ligne paraze # Posté le 05/02/2011 à 19:32:59
Tiësto is the best
Avatar

Ville : Gex
Pays : France métropolitaine

The first, la liberté...
The second, la restriction...
The third, La SDL !

Puisqu'il n'y a pas eu de pseudo-vrai-concours-non-officiel depuis un petit bout de temps, je vous propose d'en créer un qui consiste à créer un programme utilisant la Image utilisateur !
En effet, j'ai pu constater dans les deux concours lancés par camboui, que plusieurs zéros voulaient en avoir un concernant la SDL. Un concours SDL est très instructif, les membres de ce site l'ont bien compris.

Changement de dernière minute !


Vu qu'il y a beaucoup de zéros qui veulent ou qui ont besoins de plus de temps, je repousse la date limite d'un mois !
Le jury ramassera donc les copie le mercredi 01/06/2011 à 23h59m59s.
La deadline est changée...

Les règles


Ne vous inquiétez pas, il n'y a rien de méchant, je ne suis pas si diabolique que ça. :diable:
  • Thème : Vous devez créer un quelconque jeu ou programme utilisant la SDL
  • Contraintes :
    • Vous devez partir d'un fichier main.c vierge. Ne copiez pas le contenu d'autre fichier, gare aux tricheurs :pirate:
    • Vous devez poster votre programme (ou le lien de téléchargement de votre programme) sur ce topic. Je rajouterai votre nom ainsi que celui de votre projet dans la liste des participants
    • Vous ne pouvez poster qu'un seul programme par personne ou par groupe
    • Vous de devez pas demander de aide sur ce topic, si vous en avez besoin, créez un topic d'avancement de votre projet
  • Droits :
    • Vous avez le droit d'éditer à volonté votre programme jusqu'au deadline (dimanche 1er mai, 20h 00m 00s mercredi 01/06/2011 à 23h59m59s)
    • Vous avez le droit d'utiliser le langage C et le langage C++
    • Vous avez le droit d'utiliser SDL, SDL_Image, SDL_ttf, SDLP_Anim, SDL_Mixer, SDL_gfx et FMOD
    • Vous avez le droit de former un de groupe de trois personnes maximum
    • Vous avez évidemment le droit de créer un programme seul :lol:

Conseil


Pour que vous ayez le maximum de points, votre code devra compiler avec le minimum de warnings.
Je vous conseille de lire ma bio, vous serez plus rigoureux.
Si vous voulez débugger ou stabiliser votre programme SDL, la bio de SofEvans et celle de C159 sont faites pour vous (lien dans ma bio).
Lorsque vous posterez votre projet, une petite description serait la bienvenue.


Petites infos


Je remercie tous les futurs participants et je les prie de bien respecter les règles, je vous fais confiance, pas de triche sinon... Image utilisateur !
Tous les Zéros sont invités à ce concours, du moins ceux qui connaissent la SDL. :-°
Cette expérience est avant tout une petite activité pour les gens du forum, mais elle aidera aussi à améliorer la connaissance et l'apprentissage de la programmation des participants grâce aux juges qui vous donneront les commentaires.


N'oubliez pas

  • La date limite de la présentation de votre programme est le dimanche 1er mai, 20h 00m 00s mercredi 01/06/2011 à 23h59m59s
  • .
  • votre projet ne doit contenir aucune erreur, alors pensez à corriger, améliorer optimiser votre programme afin d'être au top ! Tout code ne compilant pas chez un correcteur sera fortement pénalisé
  • Tout message réédité après la deadline sera disqualifié d'office

Les participants actuels


Le tableau ci-dessous, classé par date de participation, présente les projets et leurs créateurs.

22 participants

Créateur Programme Topic d'avancement du projet
schadocalex Delthera (dèltéra) NULL
Tixlegeek Matixlegeek Existant
perimgui Tours de Hanoï Existant
lucas-84 Zério, le Mario du Site du Zéro Existant
Keriz Zpong Existant
yoch démineur NULL
sydzero Naval Battle Existant
Odolwan Funky Drums NULL
Til0u Casse-Briques Existant
sercus i Ovarium NULL
gobelin97 SURVIVAL NULL
Pouet_forever Rubik's cube NULL
paraze Linefactor Existant
macmist SDLectronicKeyboard Existant
LordOfWar Lord of War NULL
shamanas SDFx Existant
Ptitlue zTaquin Existant
personne@ Bataille navale NULL
nerem JetPack 2011 NULL
sismic Naruto Sokoban Existant
HomerEro Space Invaders Existant


Anciens participants


4 participants

Créateur Programme Topic d'avancement du projet
florent m Snake NULL
Krypt PaintDémineur Existant
darkipod PONG Existant
tsunami33 Shaak NULL
_Fender_ Bar's Ball Existant


Le jury


Ce seront eux qui vous donneront un grand commentaire, des conseils... et qui noteront vos projets.
Le voici :
  • paraze
  • lucas-84
  • Gniarff
  • informaticienzero


La notation


Les notes seront données après le rendu (logique :soleil: ), les correcteurs auront le temps qu'ils souhaitent pour analyser et noter les codes (sûrement moins de 2 mois).
Les jurés ont les mêmes critères de notations, ils noteront séparément chaque programme puis effectueront une moyenne.
Secret (cliquez pour afficher)

Critères de notations
  • /10 Le code source
    • /2 Compilation
      • /1 Code portable
      • /1 le code source compile avec moins de 2 warnings, au moins avec :
        • Code::Blocks : -Wall -pedantic -Wextra.
        • Microsoft Visual C++ : niveau (level) de warning à 4.
    • /2.5 Structure du code
      • /1 Le code est concis, facilement lisible, indenté.
      • /1 Les noms de variables et de fonctions sont représentatifs.
      • /0.5 Les commentaires présents sont utiles et aident à la compréhension.
    • /1.5 Gestion de la mémoire
      • /1 la mémoire est correctement gérée.
      • /0.5 L'accession aux cases des tableaux est correcte.
    • /4 Conception
      • /1 Découpage en fichiers.
      • /1.5 Découpage en fonctions
      • /1.5 L'utilisation des variables globales est minime. Dans certains cas, elle est acceptée.
  • /10 L'aspect visuel / le rendu
    • SI le projet est un jeu :
    • /3 Gameplay
    • /3 Graphismes
    • /4 Général
      • /1 Facile à prendre en main.
      • /1 Durée de vie (ne pas finir le jeu en 30 secondes...).
      • /2 Originalité.
      SI le projet est un programme :
    • /4 Graphismes
    • /6 Général
      • /2 Facile à prendre en main.
      • /1 Durée de vie (ne pas finir le programme en 30 secondes...).
      • /3 Originalité.
  • +++ Bonus /1.5 Bonus +++
    • /0.5 Algorithmes et structures de données astucieuses et adaptées aux problèmes.
    • /0.5 Le code compile sans warning avec les options de compilations recommandées présentés dans ma bio
    • /0.5 le programme est une invention

Voici la démarche à suivre pour configurer Code::Blocks : Project => Build options => clique en haut à gauche sur le nom de ton projet => onglet "Compiler settings" => sous-onglet "Other options".
Ensuite, vous pouvez ajouter les options de compilation souhaitées.
Enfin, faites "Régénérer" (Ctrl + F11).

Voici la démarche à suivre pour configurer Microsoft Visual C++ : Propriétés du projet => C/C++ => général.
Ensuite, vous pouvez mettre le niveau (level) de warning à 4.


historique :


Secret (cliquez pour afficher)

05/02/2011 : Création du topique
06/02/2011 : Mise en place du barème
06/02/2011 : Ajout de paraze (en gros, moi) comme juré. Mise en place des critères de notation.
06/02/2011 : Changement de la deadline, le dimanche 1er mai, 20h 00m 00s (c'est à dire le jour de la fête du travail).
06/02/2011 : Précision des droits et des interdits.
06/02/2011 : Ajout de GurneyH comme juré. Mise en place des bibliothèques qu'on a le droit d'utiliser.
06/02/2011 : Ajout de ce que GurneyH notera.
07/02/2011 : Suppression d'une contrainte qui était en contradiction avec un droit.
07/02/2011 : Ajout d'une sorte de groupe.
09/02/2011 : Ajout dans "Critères de notation de paraze".
09/02/2011 : Ajout de lucas-84 comme juré. énorme ajout dans "Les notes". Énorme mise à jour dans "Les notes".
09/02/2011 : Mini rajout dans "Les notes".
10/02/2011 : Petites modifications dans "Critères de notation de paraze".
11/02/2011 : Suppression de GurneyH comme juré. Petit changement dans "Critères de notation de paraze".
11/02/2011 : Ajout de Gniarff comme juré.
13/02/2011 : Bonne mise à jour de "Les notes".
15/02/2011 : Grosse correction orthographique.
15/02/2011 : Changement de "Les notes" en "La notation".
15/02/2011 : Changement de la liste des participants en tableau. Rajout de lien vers le nom du créateur du programme.
15/02/2011 : Ajout d'une petite description du tableau des participants.
15/02/2011 : Changement de place des remerciements.
15/02/2011 : Les dates de l'historique sont en italique et souligné. Correction orthographique mineur.
15/02/2011 : Petite mise à jour de l'introduction.
15/02/2011 : Mise en place de multiples optimisations grammaticales.
15/02/2011 : Suppression des sortes de groupe prédéfinit, désormais, un groupe est simplement formé de trois personnes maximum (suite à une remarque de schadocalex).
16/02/2011 : Changement de "créez en un autre" en "créez un topic d'avancement de votre projet" dans "Les règles".
16/02/2011 : Ajout des instructions pour configurer son compilateur (suite à une remarque de Kyron).
19/02/2011 : Ajout des instructions pour configurer Microsoft Visual C++. Changement de place des démarches à suivre pour configurer son compilateur. Petite modification dans les règles concernant la configuration des compilateurs.
21/02/2011 : Modifications des critères de notations (prise en charge des programme) suite à une remarque de programLyrique. Ajout de "Critères de notations" dans la balise secret des critères de notations.
23/04/2011 : Changement de la deadline, les participants devront rendre leur programme au maximum le mercredi 01/06/2011 à 23h59m59s.
26/04/2011 : Ajout de la sous-catégorie "Le jury". Ajout de informaticienzero comme juré.
28/04/2011 : Changement des options de compilations de code::blocks.
30/04/2011 : Correction orthographique mineure.


Merci d'avance && bonne chance !
Édité le 23/10/2011 à 19:05:16 par paraze

WTF Public License : WTFPL

Vous souhaitez apprendre à programmer, mais vous ne savez pas comment vous y prendre ?


Exercices pour débutants en C >>> Venez vous entraîner afin de progresser !
Ce mois-ci, traduisez des acronymes avec zWTF !
 
Publicité # Posté le 05/02/2011 à 19:32:59

Hors ligne boon # Posté le 06/02/2011 à 00:29:45
Avatar

Ville : Tourrette-levens
Pays : France métropolitaine
Études : Epitech Nice

sympa comme concours ... dommage que je n'ai pas le temps :(
Édité le 06/02/2011 à 00:29:59 par boon
Hors ligne GurneyH # Posté le 06/02/2011 à 00:33:33
Avatar

Dans le fond l'idée n'est pas mauvaise.

Mais, la SDL c'est large...

M'enfin ça peut être l'occasion de voir des choses jolies en sdl.

Mais je doute vraiment, voir le dernier concours de camboui, on a été 2(a pas avoir piscine) ;)
Édité le 06/02/2011 à 00:34:08 par GurneyH
 
Hors ligne paraze # Posté le 06/02/2011 à 08:54:09
Tiësto is the best
Avatar

Ville : Gex
Pays : France métropolitaine

Merci de vos réponses.

En fait, j'ai hésité de mettre un thème précis, et camboui m'a conseillé de faire un sujet libre pour voir de tout. :)
Je tiens à précisé qu'il y avait 3 participants, le dernier n'avait pas basket... Et qui ne tente rien n'a rien !

Néanmoins, je fais ce concours environ 4 mois avant le Bac (contrairement au précédant qui était justement pendant cette période), j'espère donc un peu plus de participant. :D

WTF Public License : WTFPL

Vous souhaitez apprendre à programmer, mais vous ne savez pas comment vous y prendre ?


Exercices pour débutants en C >>> Venez vous entraîner afin de progresser !
Ce mois-ci, traduisez des acronymes avec zWTF !
 
Hors ligne Keriz # Posté le 06/02/2011 à 09:07:26
The best place is 127.0.0.1
Avatar

On est obligé de le faire en C ? Ou C++ est autorisé ?

Image utilisateur
 
Hors ligne C159 # Posté le 06/02/2011 à 09:11:37
Avatar

Ville : Sébazac
Pays : France métropolitaine

Pas mal comme idée, mais je ne pense pas que je le ferai parce que j'ai pas le temps, il faut que je termine mon tuto mais je pense faire un puissance 4 si j'ai le temps, sinon donne un barême stp

Citation : Keriz
On est obligé de le faire en C ? Ou C++ est autorisé ?

comme tu veux je pense

Trucs et astuces sur les retours des fonctions en SDL voir ma bio ou celle de SofEvans ;)
Envi de vous entrainer en SDL : regarder le concours de paraze ;)
 
Hors ligne paraze # Posté le 06/02/2011 à 09:28:00
Tiësto is the best
Avatar

Ville : Gex
Pays : France métropolitaine

Merci C159. ;)

@Keriz : Contrairement aux 2 autres, le C++ est accepté; mais préférez tout de même le C, on est sur le forum C.

WTF Public License : WTFPL

Vous souhaitez apprendre à programmer, mais vous ne savez pas comment vous y prendre ?


Exercices pour débutants en C >>> Venez vous entraîner afin de progresser !
Ce mois-ci, traduisez des acronymes avec zWTF !
 
Hors ligne schadocalex # Posté le 06/02/2011 à 09:49:35
Why not ?
Avatar

Ville : Saran
Pays : France métropolitaine

Je doute également, surtout avec un délai aussi court.
Hors ligne paraze # Posté le 06/02/2011 à 09:53:27
Tiësto is the best
Avatar

Ville : Gex
Pays : France métropolitaine

2 mois, ce n'est pas assez ?

Je peux retarder la fin concours si nécessaire.

WTF Public License : WTFPL

Vous souhaitez apprendre à programmer, mais vous ne savez pas comment vous y prendre ?


Exercices pour débutants en C >>> Venez vous entraîner afin de progresser !
Ce mois-ci, traduisez des acronymes avec zWTF !
 
Hors ligne schadocalex # Posté le 06/02/2011 à 10:09:48
Why not ?
Avatar

Ville : Saran
Pays : France métropolitaine

Désolé, j'avais mal lu.
Hors ligne mokimok # Posté le 06/02/2011 à 10:25:20
Avatar

Je pourrais éventuellement, si j'en ai le temps, participer.Faut voir, mais c'est vrai que 2 mois c'est court...
Hors ligne HomerEro # Posté le 06/02/2011 à 10:48:33
Cliquez sur l'avatar !!
Avatar
Groupe : Bannis

Ville : Paris
Pays : France métropolitaine

Oui je n'aurais pour ma part en deux mois pas le temps (mais 2 mois et demie ou 3 mois serais bien ...)
Édité le 06/02/2011 à 10:52:14 par HomerEro

Le Top 20 des Catch'em sur lesquels ils ne faut plus JAMAIS tomber. Et avant pour ce qui connaîtrez pas : Un Catch'em c'est ça la , cette merde en carton : ici

1) Alors on commence par diabolo77
Le piège pour tomber dans son Catch'em est : tourner un film avec david cameron
... ( la suite dans ma signature)

Rien que ça putain !Je veut dire que quand vous voyez que 107 zéros ce sont fait avoir... Arrêter c'est pathétique .

En plus vous passez pour un Image utilisateur. En espérant qu'il y ais moins de gens à ce faire avoir dans ce Catch'em pourris .

2) On continue avec Drakalex92
Le piège est : [Tuto]Comment hacker un compte Facebook

Ohh et vous devinez le nombre de zéros qui ceux sont fait avoir? 741 :o ,franchement :'( , je commence vraiment à douter de l'intelligence de certains ...
Bon je ne vais le critiquer ça serait un peu comme tirer sur l'ambulance .

3)Et c'est repartie !
Alors dévelloper par Ignis_92
Le piège est : [Tuto] comment hacker un site web de A à Z
Ah et un détail important selon vous Combien de zéros ceux sont fait avoir ?

366 je dirais ?

héhéhé vous êtes très loin la réponse est 1153 ,attendez vous vous rendez compte qu'autant de gens ont pu ce faire attraper pour perdre leur temps?

4)Et c'est repartie :
Développer par Scronchh
Le piège est : Toutes les failles sécuritaires du Sdz
et deviner le nombre qui c'est fait attraper : 1273
Vous êtes fidèle à ce site dis - donc ...
Non mais c'est pas grave quoi , tiens pendant que vous y êtes on va tous avec la bonne humeur Image utilisateur
le SDZ ,hm ?



5)Bon ceci n'est pas un Catch'em (ça s'appelle Zlap o_O ) mais ça sert à que dalle . Donc crée par jolfo
Voila le piège : Une super astuce de programmation
pour faire des programmes 2 fois plus rapidement

(Avouez qu'on se fait avoir rapidement ^^ )

Et voila ce que ta en tombant dans le panneau : ça
L'avantage reste qu'il n'y as pas de musique mais comme tous les autres il vous feras tous de même perdre 1 min de votre vie !

6)(Trouvé grâce a l'aide de Drakalex92)
Quand j'ai vu ce catch'em je me suis dis mais merde mais ça existe ce truc.
Alors Crée par Wingle
(Alors avant de lire la suite je vous conseille vivement de prendre des antidépresseurs)
Le piège pour tomber dedans est : Créez un système d'exploitation en quelques heures !
On se fout de notre gueule !
Et je parle pas du nombre incroyable de personnes qui ce sont fait avoir qui s’élève à : 201 !

7)On n'avait aussi le droit à d'autre exemples de catch'em complètement pourri du genre :
1) Créer un MMORPG facilement et rapidement de nyco240594
ou bien 2) [Tutoriel Complet] Créez votre MMORPG ! de Flox
Franchement quelle imagination débordante !
3)Je ne vais pas citer de nom car la , la :colere:
Image utilisateur
Franchement , Franchement en voyant ça est ce que vous cliquerez ?
Non mais sérieux un peu de bon sens merde

(Bon je conçois que le deuxième est un peu plus réaliste)


8)(Encore trouvé grâce à l'aide de Drakalex92)
Et la je vais vous montrer le catch'em le plus mauvais de toute cette génération !
En faite il est trop flagrant et c'est tous !
Crée par Spanick
Le piège étant : Veux tu gagner 5000 euros en un clic? C'est ici! :o
C'est pas possible !!!!! Ahhhhhhhhhh!!!!
Image utilisateur
Non mais sérieux y a des choses avec lesquels faut pas rigoler , toute personnes censés ne tomberai pas dans le panneau !
Image utilisateur
:colere: :colere: :colere: :colere: :colere:
Aussi je n'ai pas résisté à vous montrez son incroyable biographie :
Image utilisateur
Et bah y a du niveau !

9)Image utilisateur
Dans une galaxie lointaine , très lointaine : Star Wars Episode 3 : La revanche Des Siths Catch'em-City . J'ai enfin trouvé le premier Catch'em qui ma fait sourire (enfin) .
Celui-ci à été crée par un être fabuleux : HomerEro
Le piège pour tomber dedans étais : Les Catch'ems ne sont pas une inventions merdique !!!! Cliquez Ici pour en avoir la preuve!!!!


10)ça fait longtemps que je n'ai pas remis des Catch me .
Ici je vais vous faire du 4 en 1 :-°

Trouvé grâce à : Atbbkaugust
Crée par : misterLouis76
: Tutoriel : Créez votre distribution Linux en 10 minutes
:-° :-° Je remarque aussi qu'il à dû sombrer dans l’alcoolisme ...

Trouvé grâce à Xcodetam ( merci ^^ )
Crée par : dolfinsbizou
: Toutes les failles de sécurité de google !
Allez hop je traîne pas c'est nul et hyper flagrant .

Trouvé grâce à : Tycoon
Crée par : mametchimax
: Compte wow gratuis lvl 20-70
Mais sérieusement qui serait assez fou pour donner un compte Wow de level 70 ? :o

Trouvé grâce à : Drakalex92
Crée par : mantal
: Refaire Counter-Strike en 2 min .
Ok ... Si il serait aussi simple de refaire counter-strike , il n'y aurait plus de programmeurs dans ce monde .
Et le pire c'est que : 239 personnes ceux sont fait avoir .
Mantal tu est tombé bien bas :(

Bon C'est finis pour cette série (enfin ^^ ) .

//--------------------------------------------------------------------------------------------------------------------

11)Aujourd'hui nous allons parler d'un sujet très vaste le cracking . Le cracking c'est tout simplement illégal
comme ...
ce catch'me de merde : de Macros Le Noir : lui
Mon tutoriel sur le cracking . Qu'avait t-il fumé ce jour la ?
C'est toujours la même chose 821 personnes honte à toi macros .

12)Il est bizarre ... Il est accro aux catch'me ... et il est médicalement dangereux
je veux parler de : dolfinsbizou
son nouveau catch'me :

Free arnaquerait ses abonnés à la FreeBox. Témoignage d'une rescapée.

:-°
Oui oui , allez y , allez vous droguer : ...
J'en profite pour dire que j'essaye de corriger mon orthographe un maximum :-°
Ah et tous ces Catch'me ont été trouvés par XCodetam merci à lui :lol:

Vous avez trouvé un Catch'em idiot sur le Site du Zéro?
Contactez moi par MP et je me ferais un plaisir de citer votre nom et d'exposer le catch'em !
 
Hors ligne paraze # Posté le 06/02/2011 à 11:06:05
Tiësto is the best
Avatar

Ville : Gex
Pays : France métropolitaine

Voilà les changements :
  • Mise en place du barème
  • Ajout de paraze (en gros, moi :honte: ) comme juré. Mise en place des critères de notation.
  • Changement de la deadline, le dimanche 1er mai, 20h 00m 00s (c'est à dire le jour de la fête du travail).

Quand pensez vous ?
Désormais, qui compte participer ?

WTF Public License : WTFPL

Vous souhaitez apprendre à programmer, mais vous ne savez pas comment vous y prendre ?


Exercices pour débutants en C >>> Venez vous entraîner afin de progresser !
Ce mois-ci, traduisez des acronymes avec zWTF !
 
Hors ligne schadocalex # Posté le 06/02/2011 à 11:52:07
Why not ?
Avatar

Ville : Saran
Pays : France métropolitaine

Moi je compte participer, très bien comme ça.
Hors ligne Palarradu03 # Posté le 06/02/2011 à 12:59:00
Ne jamais abandonner
Avatar

Ville : Yzeure
Pays : France métropolitaine

Bonjour je voudrais participer et présenté un jeu que j'ai déjà fait mais enfaîte il reprend des commande de Sokoban mais j'ai écrit les commande pas copier est ce que çà irait ?
 
Hors ligne paraze # Posté le 06/02/2011 à 13:01:56
Tiësto is the best
Avatar

Ville : Gex
Pays : France métropolitaine

Tu peux, mais tu dois recommencer tout le programme. ;)

WTF Public License : WTFPL

Vous souhaitez apprendre à programmer, mais vous ne savez pas comment vous y prendre ?


Exercices pour débutants en C >>> Venez vous entraîner afin de progresser !
Ce mois-ci, traduisez des acronymes avec zWTF !
 
Hors ligne Palarradu03 # Posté le 06/02/2011 à 13:14:05
Ne jamais abandonner
Avatar

Ville : Yzeure
Pays : France métropolitaine

Mais je comprend pas pourquoi je devrait retaper les même lignes lol pourquoi faire çà ? çà va me prendre es heures pour rien.

Alors pourquoi faire çà ?
 
Hors ligne darkipod # Posté le 06/02/2011 à 13:18:28
Avatar

Ville : Oloron
Pays : France métropolitaine

je m'inscrit,mais je suis pas un expert en sdl.......,
(je trebuche depuis deux mois sur le tuto de fvirtman (qui est bien fait) sur la simplification des events, et je veux pas poursuivre plus loin tant que j'ai pas assimilé)
:p
mon projet : peut etre un pong

On est pas responsable de la gueule que l'on a.
En revanche on est responsable de la tronche que l'on fait !
 
Hors ligne C159 # Posté le 06/02/2011 à 13:21:31
Avatar

Ville : Sébazac
Pays : France métropolitaine

parce que c'est le but du concours tout faire à partir de son départ

EDIT je commence le puissance 4
Édité le 06/02/2011 à 13:22:39 par C159

Trucs et astuces sur les retours des fonctions en SDL voir ma bio ou celle de SofEvans ;)
Envi de vous entrainer en SDL : regarder le concours de paraze ;)
 
Hors ligne Palarradu03 # Posté le 06/02/2011 à 13:25:24
Ne jamais abandonner
Avatar

Ville : Yzeure
Pays : France métropolitaine

Ok ba je vais peut être crée un nouveau jeu en tous cas j'essayerais de participer.
 
Hors ligne KevkevVTT # Posté le 06/02/2011 à 13:35:00
Avatar

Ville : Neulliac
Pays : France métropolitaine

Je vais m'inscrire aussi, car j'ai jamais fait de bons projets en SDL.
Je pense faire un snake

Il y a 10 types de personnes sur Terre: Ceux qui comprennent le binaire et les autres :p
 
Hors ligne reino # Posté le 06/02/2011 à 14:54:19

Avatar

Une question, peut on poster un programme avec OpenGL(j'utilise la SDL pour le fenêtrage et la gestion des évènements :p )?

Est ce que le mot "tumeurs" a été inventé par un docteur qui aime l'humour noir ? :lol:

 
Hors ligne schadocalex # Posté le 06/02/2011 à 15:20:42
Why not ?
Avatar

Ville : Saran
Pays : France métropolitaine

Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet

Delthera (prononciation : dèltéra)


Le gameplay et le scénario sont innovants, bien qu'ambitieux pour le temps que je peux y consacrer seul. Ce projet a été réfléchi pendant plus d'un an, il est passé de MMORPG à A-RPG pour dzevenir un jeu de plate-forme, beaucoup moins ambitieux. Ce n'est pas un jeu initialement conçu pour ce concours, une petite recherche sur le sdz vous le comfirmera. Néanmoins, j'ai repris de zéro le code pour ce concours, car je me suis améliorer depuis le temps, et bien qu'il soit très loin d'être fini, je compte le finir tôt ou tard.
Si un ou plusieurs programmeurs C quelque peu compétents souhaitent m'épauler, contactez moi par MP, afin de m'aider à finir ce projet. :D

Build 2



Nota :
  • Le titre de la fenêtre est "Delthera - build 1" mais c'est bien la build 2.
  • La gravité est un peu faible.
  • Le personnage va plus ou moins vite en fonction du degré de la montée, ça ne lag pas. Ceci est dû à ma gestion des collisions au pixel près, cf player.c si vous comprenez.

Télécharger le dossier complet du jeu. (450Ko)

Code source


main.c
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : main.c
    function : Fonction main
    author   : schadocalex

*/

#include "main.h"
#include "MySDL.h"
#include "map.h"
#include "game.h"

int main(int argc, char** argv)
{
    /* Pour enlever les deux warnings */
    if(argc || argv){}

    return game();
}

main.h
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : main.h
    function : Inclusions principales (bibliotèque standard + SDL) et #define pour la SDL
    author   : schadocalex

*/

#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED

#include <stdio.h>
#include <SDL/SDL.h>

/* Nécéssaire à la modification des pixels */
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
    #define MASQUE_ROUGE 0xff000000
    #define MASQUE_VERT  0x00ff0000
    #define MASQUE_BLEU  0x0000ff00
    #define MASQUE_ALPHA 0x000000ff
#else
    #define MASQUE_ROUGE 0x000000ff
    #define MASQUE_VERT  0x0000ff00
    #define MASQUE_BLEU  0x00ff0000
    #define MASQUE_ALPHA 0xff000000
#endif

#endif /* MAIN_H_INCLUDED */

map.c
Secret (cliquez pour afficher)
Code : C
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : map.c
    function : Fonction de chargement, initialisation et libération de mémoire de la map
    author   : schadocalex

*/

#include "map.h"
#include "MySDL.h"

/* Calcule le nombre de lignes du curseur jusqu'au caractère stop_c
   sans affecter la position du curseur */
int numberLines(const char stop_c, FILE* f)
{
    long actualPosition = ftell(f);
    char c;
    int i = 0;

    do
    {
        c = fgetc(f);
        if(c == '\n')
            i++;
    } while(c != stop_c && c != EOF);
    fseek(f, actualPosition, SEEK_SET);

    return i;
}

int loadMapFloor(Map *map, FILE* f)
{
    int i;

    map->nomberCaseFloor = numberLines(EOF, f);

    if(!(map->floor = malloc(map->nomberCaseFloor * sizeof(Case))))
        return 1;

    for(i = 0; i < map->nomberCaseFloor; i++)
    {
        fscanf(f, "%hu %hu %hu %hu\n", &map->floor[i].position.x, &map->floor[i].position.y, &map->floor[i].chipset.x, &map->floor[i].chipset.y);
        map->floor[i].position.x *= 32;
        map->floor[i].position.y *= 32;

        map->floor[i].chipset.x *= 32;
        map->floor[i].chipset.y *= 32;
        map->floor[i].chipset.w = 32;
        map->floor[i].chipset.h = 32;
    }

    return 0;
}

/* Charge la map dans la structure map */
int loadMap(Map *map, const char* url)
{
    /* Initialisations */
    FILE* f = NULL;
    if(!(f = fopen(url, "r")))
    {
        fprintf(stderr, "Impossible de charger la map %s", url);
        return 1;
    }

    /* Récupération de la largeur et de la hauteur */
    fscanf(f, "%d %d\n\n", &map->w, &map->h);

    /* Chargement de la map */
    if(loadMapFloor(map, f))
        return 1;

    fprintf(stdout, "Chargement de la map réussi.\n");

    return 0;
}

/* Charge la map dans la structure map */
void loadMapChipset(Map *map, const char* url, const char* url_masque)
{
    map->chipset = loadImage(url);
    map->chipset_masque = loadImage(url_masque);
}

int initialiseMap(Map *map, int nb_map)
{
    if(nb_map == 1)
    {
        if(loadMap(map, "map/1.map"))
            return 1;
        loadMapChipset(map, "img/grass.png", "img/grass_masque.png");
    }
    return 0;
}

void freeMap(Map *map)
{
    free(map->floor);
}

map.h
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : map.h
    function : Structures (Case, Map) et prototypes des fonctions de map.c
    author   : schadocalex

*/

#ifndef MAP_H_INCLUDED
#define MAP_H_INCLUDED

#include "main.h"

typedef struct
{
    SDL_Rect chipset;
    SDL_Rect position;
} Case;

typedef struct
{
    SDL_Surface* chipset;
    SDL_Surface* chipset_masque;

    int w;
    int h;
    int nomberCaseFloor;

    Case* floor;
    Case* PF;
} Map;

int numberLines(const char stop_c, FILE* f);
int loadMapFloor(Map *map, FILE* f);
int loadMap(Map *map, const char* url);
void loadMapChipset(Map *map, const char* url, const char* url_masque);
int initialiseMap(Map *map, int nb_map);
void freeMap(Map *map);

#endif /* MAP_H_INCLUDED */

events.c
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : events.c
    function : Gestion des events propre
    author   : schadocalex (remerciements à Fvirtman pour son tutoriel)

*/

#include "main.h"
#include "events.h"

/* Mis à jour des events
   Enregistrement du moment ou l'on a appuyé sur une touche,
   Pour une meilleure gestion des events */
void UpdateEvents(Input* in)
{
	SDL_Event event;
	while(SDL_PollEvent(&event))
	{
		switch (event.type)
		{
            case SDL_KEYDOWN:
                if(in->key[event.key.keysym.sym] == 0)
                    in->key[event.key.keysym.sym] = SDL_GetTicks();
            break;
            case SDL_KEYUP:
                in->key[event.key.keysym.sym] = 0;
            break;
            case SDL_QUIT:
                in->quit = 1;
            break;
            default: break;
		}
	}
}

events.h
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : events.h
    function : Structure (Input) et prototype de events.c
    author   : schadocalex (remerciements à Fvirtman pour son tutoriel)

*/

#ifndef EVENTS_H_INCLUDED
#define EVENTS_H_INCLUDED

typedef struct
{
	int key[SDLK_LAST];
    char quit;
} Input;

void UpdateEvents(Input* in);

#endif /* EVENTS_H_INCLUDED */

pixel.c
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : pixel.c
    function : Fonctions d'écriture et de lecture de pixels
    author   : schadocalex (remerciements à Piwaï pour son tutoriel)

*/

#include "main.h"
#include "pixel.h"

Uint32 getPixel(SDL_Surface* surface, int x, int y)
{
    int BytesPerPixel = surface->format->BytesPerPixel;
    Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * BytesPerPixel;

    switch(BytesPerPixel)
    {
        case 1:
            return *p;
        case 2:
            return *(Uint16 *)p;
        case 3:
            if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
                return p[0] << 16 | p[1] << 8 | p[2];
            else
                return p[0] | p[1] << 8 | p[2] << 16;
        case 4:
            return *(Uint32 *)p;
        default:
            return 0;
    }
}

void setPixel(Uint32 pixel, SDL_Surface *surface, int x, int y)
{
    int BytesPerPixel = surface->format->BytesPerPixel;
    Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * BytesPerPixel;

    switch(BytesPerPixel)
    {
        case 1:
            *p = pixel;
        break;
        case 2:
            *(Uint16 *)p = pixel;
        break;
        case 3:
            if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
            {
                p[0] = (pixel >> 16) & 0xff;
                p[1] = (pixel >> 8) & 0xff;
                p[2] = pixel & 0xff;
            }
            else
            {
                p[0] = pixel & 0xff;
                p[1] = (pixel >> 8) & 0xff;
                p[2] = (pixel >> 16) & 0xff;
            }
        break;
        case 4:
            *(Uint32 *)p = pixel;
        break;
    }
}

pixel.h
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : pixel.h
    function : Structure (Pixel) et prototypes de pixel.c
    author   : schadocalex (remerciements à Piwaï pour son tutoriel)

*/

#ifndef PIXEL_H_INCLUDED
#define PIXEL_H_INCLUDED

typedef struct
{
    Uint8 r;
    Uint8 g;
    Uint8 b;
    Uint8 a;
} Pixel;

Uint32 getPixel(SDL_Surface* surface, int x, int y);
void setPixel(Uint32 pixel, SDL_Surface *surface, int x, int y);

#endif /* PIXEL_H_INCLUDED */

MySDL.c
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : MySDL.c
    function : Extension de la SDL
    author   : schadocalex

*/

#include <SDL/SDL_Image.h>

#include "main.h"
#include "MySDL.h"

/* Charge une image */
SDL_Surface* loadImage(const char* url)
{
    SDL_Surface* img = IMG_Load(url);
    if(!img)
    {
        fprintf(stderr, "Impossible d'ouvrir %s\n", url);
        exit(EXIT_FAILURE);
    }
    else
        fprintf(stdout, "Chargement de %s\n", url);
    return img;
}

/* Initialise la SDL et la fenêtre */
SDL_Surface* MySDL_Init(int largeur, int hauteur)
{
    /* Initialisation de la SDL */
    if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        fprintf(stderr, "Impossible d'initialiser la SDL : %s\n", SDL_GetError());
        exit(EXIT_FAILURE);
    }
    else
        fprintf(stdout, "Initialisation de la SDL\n");

    /* On ferme la SDL à la fin du programme */
    atexit(SDL_Quit);

    /* Création de la fenêtre */
    SDL_Surface* screen = SDL_SetVideoMode(largeur, hauteur, 32,
                                           SDL_SWSURFACE | SDL_DOUBLEBUF);
    if(!screen)
    {
        fprintf(stderr, "Impossible de créer une fenêtre de %dx%d : %s\n", largeur, hauteur, SDL_GetError());
        exit(EXIT_FAILURE);
    }
    else
        fprintf(stdout, "Création de la fenêtre\n");
    SDL_WM_SetCaption("Delthera - build 1", NULL);

    return screen;
}

MySDL.h
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : MySDL.h
    function : Prototype de MySDL.c
    author   : schadocalex

*/

#ifndef MYSDL_H_INCLUDED
#define MYSDL_H_INCLUDED

SDL_Surface* loadImage(const char* url);
SDL_Surface* MySDL_Init(int largeur, int hauteur);

#endif /* MYSDL_H_INCLUDED */

game.c (provisoire)
Secret (cliquez pour afficher)
Code : C
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : game.c
    function : Fonction game qui sert de boucle principale du jeu
    author   : schadocalex

*/

#include "main.h"
#include "map.h"
#include "game.h"
#include "MySDL.h"
#include "player.h"
#include "events.h"

int game()
{
    Map map;
    Player player;
    SDL_Surface *screen, *screenMasque;
    char continuer = 1;
    int i;

    if(initialiseMap(&map, 1))
        return 1;

    /* screen */
    if((screen = MySDL_Init(map.w * 32, map.h * 32)) == NULL)
        return 1;
    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));

    /* screen masque */
    screenMasque = SDL_CreateRGBSurface(SDL_HWSURFACE, map.w * 32, map.h * 32, 32, 0, 0, 0, 0);
    SDL_FillRect(screenMasque, NULL, SDL_MapRGB(screen->format, 255, 255, 255));

    /* décor */
    for(i = 0; i < map.nomberCaseFloor; i++)
    {
        SDL_BlitSurface(map.chipset, &map.floor[i].chipset, screen, &map.floor[i].position);
        SDL_BlitSurface(map.chipset_masque, &map.floor[i].chipset, screenMasque, &map.floor[i].position);
    }

    player_initialise(&player, "img/player.png");

    SDL_Rect temp;

    Input in;
    memset(&in,0, sizeof(in));

    while(continuer)
    {
        UpdateEvents(&in);

        if(in.quit || in.key[SDLK_ESCAPE])
            continuer = 0;

        temp.x = player.position.x;
        temp.y = player.position.y + 2;
        temp.w = player.player_act.w;
        temp.h = player.player_act.h;

        if(in.key[SDLK_LEFT] > in.key[SDLK_RIGHT])
            player.v_x = -4;
        else if(in.key[SDLK_RIGHT])
            player.v_x = 4;
        else
            player.v_x = 0;

        if(in.key[SDLK_UP] && collision(screenMasque, temp))
        {
            if(player.v_s <= 0)
                player.v_s = 6;
        }

        player_animation(&player, 60, screenMasque);
        player_move(&player, screenMasque);

        SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
        for(i = 0; i < map.nomberCaseFloor; i++)
        {
            SDL_BlitSurface(map.chipset, &map.floor[i].chipset, screen, &map.floor[i].position);
            SDL_BlitSurface(map.chipset_masque, &map.floor[i].chipset, screenMasque, &map.floor[i].position);
        }

        SDL_BlitSurface(player.charset, &player.player_act, screen, &player.position);

        SDL_Delay(40);

        SDL_Flip(screen);
    }

    freeMap(&map);
    SDL_free(screenMasque);

    return 0;
}

game.h
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : game.h
    function : Prototype des fonctions de game.c
    author   : schadocalex

*/

#ifndef GAME_H_INCLUDED
#define GAME_H_INCLUDED

int game(void);

#endif /* GAME_H_INCLUDED */

player.c
Secret (cliquez pour afficher)
Code : C
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : player.c
    function : Fonctions relatives au joueur (initialisation, déplacements, animation etc.)
    author   : schadocalex

*/

#include "main.h"
#include "player.h"
#include "pixel.h"
#include "MySDL.h"

/* Initialise un personnage pour le joueur */
void player_initialise(Player *player, const char* url)
{
    player->charset = loadImage(url);
    player->v_x = 0;
    player->v_y = 5;
    player->v_s = 0;
    player->player_act.x = 0;
    player->player_act.y = 0;
    player->player_act.w = PLAYER_WIDTH;
    player->player_act.h = player->charset->h / 4;
    player->position.x = 0;
    player->position.y = 100;
    player->jump = 0;
}

/* Change la frame du personnage si elle
   a été changée depuis plus de x ms */
void player_animation(Player *player, unsigned int x, SDL_Surface* screenMasque)
{
    static unsigned int previousTime = 0;
    if(SDL_GetTicks() - previousTime < x)
        return;
    else
        previousTime = SDL_GetTicks();

    /* Pour tester si le joueur est proche du sol ou d'une plateforme */
    SDL_Rect temp;
    temp.x = player->position.x;
    temp.y = player->position.y + 30;
    temp.w = PLAYER_WIDTH;
    temp.h = PLAYER_HEIGHT;

    int nextToFloor = collision(screenMasque, temp);
    int player_direction = (player->player_act.y < PLAYER_Y_LEFT) ? 0 : PLAYER_Y_LEFT;

    /** GAUCHE <-> DROITE **/
    if(player->v_x < 0 && player->player_act.y < PLAYER_Y_LEFT) /* Si le perso va à gauche, mais qu'il ne regarde pas à gauche */
        player->player_act.y += PLAYER_Y_LEFT;
    else if(player->v_x > 0 && player->player_act.y >= PLAYER_Y_LEFT) /* Sinon si le perso va à droite, mais qu'il ne regarde pas à droite */
        player->player_act.y -= PLAYER_Y_LEFT;

    /** JUMPING **/
    if(player->jump == 0 && player->v_s > 0) /* Si le perso doit sauter mais qu'il n'est pas prêt */
    {
        player->jump = 1;
        player->player_act.x = PLAYER_X_CAN_JUMP;
        player->player_act.y = (player_direction + PLAYER_Y_JUMPING);
    }
    else if(player->jump) /* Sinon si il peut sauter ou qu'il est entrain de sauter */
    {
        if(player->v_s <= 0 && nextToFloor) /* Si le joueur va atterir sur un sol ou une plateforme */
        {
            if(player->player_act.x > PLAYER_X_STOP_JUMPING) /* Si le perso n'est pas prêt pour courir */
                player->player_act.x -= PLAYER_WIDTH;
            else
            {
                player->jump = 0;
                player->player_act.x = PLAYER_WIDTH;
                player->player_act.y = player_direction;
            }
        }
        else
        {
            player->player_act.x += PLAYER_WIDTH;
            if(player->player_act.x >= player->charset->w)
                player->player_act.x = player->charset->w - PLAYER_WIDTH;
        }
    }

    /** NORMAL **/
    if(player->player_act.y == player_direction && player->v_s <= 0) /* S'il est entrain de courir */
    {
        if(player->v_x == 0) /* Si le joueur n'avance plus */
            player->player_act.x = 0;
        else
        {
            player->player_act.x += PLAYER_WIDTH;
            if(player->player_act.x >= player->charset->w)
                player->player_act.x = PLAYER_WIDTH;
        }
    }
}

/* Teste si il y a collision */
int collision(SDL_Surface* screenMasque, SDL_Rect player)
{
    SDL_LockSurface(screenMasque);
    Uint32 pixel;
    Uint8 r, g, b;
    int i, j;

    player.x += 10;
    player.w -= 20;
    player.h -= 1;

    if(screenMasque->w < player.x + player.w + 5 ||
       screenMasque->h < player.y + player.h ||
       player.x < 0                          ||
       player.y < 0)
        return 1;

    for(i = 0; i <= player.w; i++)
        for(j = 0; j <= player.h; j++)
        {
            pixel = getPixel(screenMasque, player.x + i, player.y + j);
            SDL_GetRGB(pixel, screenMasque->format, &r, &g, &b);
            if(r < 20 && g < 20 && b < 20)
            {
                SDL_UnlockSurface(screenMasque);
                return 1;
            }
        }

    SDL_UnlockSurface(screenMasque);
    return 0;
}

/* Incémente ou décrémente n pour se rapprocher de 0, ou ne fait rien si n = 0 */
int goZero(int n)
{
    return (n < 0) ? (n + 1) : ((n > 0) ? n - 1 : 0);
}

/* Bouge le joueur grâce au vecteur vitesse (v_x;v_y) ainsi qu'au vecteur vertical de saut v_s */
void player_move(Player *player, SDL_Surface* screenMasque)
{
    int dx = (int)player->v_x, dy = (int)player->v_y;

    /* Pour tester si le joueur est proche du sol ou d'une plateforme */
    SDL_Rect temp;
    temp.x = player->position.x;
    temp.y = player->position.y + 40;
    temp.w = PLAYER_WIDTH;
    temp.h = PLAYER_HEIGHT;

    int i = 0;
    int limitey = (dy < 0) ? -1 : 1;

    /* saut */
    if(player->v_s > 0 && player->jump) /* Si le joueur doit sauter */
    {
        dy = -player->v_s;
        player->v_s -= 0.5;
        if(player->v_s < 0)
            player->v_s = 0;
    }

    /* Boucle avec le vecteur vitesse attendu */
    while(1)
    {
        if(dy == limitey)
            break;

        temp.x = player->position.x + dx;
        temp.y = player->position.y + dy;

        if(!collision(screenMasque, temp))
        {
            player->position.x += dx;
            player->position.y += dy;
            return;
        }

        if(i % 2 == 0)
            dx = goZero(dx);
        else
            dy = goZero(dy);
        i++;
    }

    /* Si ce n'est pas concluant, boucle avec un vecteur vitesse horizontal */
    dx = (int)player->v_x;
    dy = 1;
    while(1)
    {
        if(dx == 0)
            break;

        temp.x = player->position.x + dx;
        temp.y = player->position.y + dy;

        if(!collision(screenMasque, temp))
        {
            player->position.x += dx;
            player->position.y += dy;
            return;
        }

        if(i % 2 == 0)
            dx = goZero(dx);
        else
            dy--;
        i++;
    }
}

player.h
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
     ____      _____    _       _____    _   _    _____    _____     _____
    |  __ \   |  ___|  | |     |_   _|  | | | |  |  ___|  |  _  |   |  _  |
    | |  | |  | |_     | |       | |    | |_| |  | |_     | |_| |   | |_| |
    | |  | |  |  _|    | |       | |    |  _  |  |  _|    |  _  /   |  _  |
    | |__| |  | |___   | |___    | |    | | | |  | |___   | | \ \   | | | |
    |____ /   |_____|  |_____|   |_|    |_| |_|  |_____|  |_|  \_\  |_| |_|

    name     : player.h
    function : Structure (Player), prototypes de player.c et #define des frames du charset
    author   : schadocalex

*/

#ifndef PLAYER_H_INCLUDED
#define PLAYER_H_INCLUDED

#define PLAYER_WIDTH 27
#define PLAYER_HEIGHT 39
#define PLAYER_Y_RIGHT 0
#define PLAYER_Y_LEFT (2*PLAYER_HEIGHT)
#define PLAYER_X_CAN_JUMP (5*PLAYER_WIDTH)
#define PLAYER_X_STOP_JUMPING (8*PLAYER_WIDTH)
#define PLAYER_Y_JUMPING PLAYER_HEIGHT

typedef struct
{
    SDL_Rect player_act; /* Frame du charset actuelle */
    SDL_Rect position; /* Position dans l'écran */

    SDL_Surface* charset; /* Image charset du joueur */

    double v_x, v_y, v_s; /* (v_x;v_y) => coordonées du vecteur vitesse */
                          /* v_s => Hauteur du saut, influe sur v_y */
    char jump; /* Est positionné pour sauter ou est entrain de sauter*/
} Player;

void player_initialise(Player *player, const char* url);
int player_direction(Player *player);
void player_animation(Player *player, unsigned int x, SDL_Surface* screenMasque);
int collision(SDL_Surface* screenMasque, SDL_Rect player);
int goZero(int n);
void player_move(Player *player, SDL_Surface* screenMasque);

#endif /* PLAYER_H_INCLUDED */


Fichiers annexes


1.map
Secret (cliquez pour afficher)
Code : Autre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
12 7

0 6 0 0
1 6 0 0
2 6 1 0
3 5 3 0
3 6 2 0
4 4 4 0
4 5 2 0
4 6 0 1
5 4 5 0
5 5 7 0
5 6 0 1
6 5 8 0
6 6 0 1
7 5 1 1
7 6 0 1
8 4 3 1
8 5 2 1
8 6 0 1
9 4 4 1
9 5 0 1
9 6 0 1
10 3 5 1
10 4 2 1
10 5 0 1
10 6 0 1
11 3 6 1
11 4 0 1
11 5 0 1
11 6 0 1

Images


Secret (cliquez pour afficher)

player.png
Image utilisateur

grass.png
Image utilisateur

grass_masque.png
Image utilisateur


Les seuls fichiers que je n'ai pas écrits sont pixel.c, pixel.h, events.h et en partie events.c.
Édité le 22/05/2011 à 13:18:32 par schadocalex
Hors ligne paraze # Posté le 06/02/2011 à 17:15:10
Tiësto is the best
Avatar

Ville : Gex
Pays : France métropolitaine

Merci schadocalex ! ;)
Quand tu apportera des modif', édite ton message précédant, et indique nous qu'il y a un changement.

Reino, désolé, je préfère qu'on reste juste en SDL. J'ai déjà accepté le C++. :ange:

WTF Public License : WTFPL

Vous souhaitez apprendre à programmer, mais vous ne savez pas comment vous y prendre ?


Exercices pour débutants en C >>> Venez vous entraîner afin de progresser !
Ce mois-ci, traduisez des acronymes avec zWTF !
 
Hors ligne schadocalex # Posté le 06/02/2011 à 17:18:23
Why not ?
Avatar

Ville : Saran
Pays : France métropolitaine

C'est ce que je comptais faire. Le C++ accepté ? Pourquoi pas, mais tu devrais ajouter des précisions vis à vis des librairies utilisables, par exemple interdire toute librairie ayant pour but la gestion de l'affichage.
Hors ligne Lucas-84 # Posté le 06/02/2011 à 17:21:34
[Tomber en marche]
Avatar
Validateurs
Flux RSS

Ville : Uchaux
Pays : France métropolitaine

Connecté Pouet_forever # Posté le 06/02/2011 à 18:27:13
Trance forever :)
Avatar

schadocalex > Il sert à quoi ton programme ? j'ai du mal à saisir. :-°

Image utilisateur
Image utilisateur


[Le préprocesseur C]
Fan officiel de Tiësto !
 
Hors ligne schadocalex # Posté le 06/02/2011 à 18:28:30
Why not ?
Avatar

Ville : Saran
Pays : France métropolitaine

Il n'est pas du tout fini, c'est le début du commencement d'un jeu de plate-forme ^^ En 3 mois, j'ai le temps.
Édité le 06/02/2011 à 18:36:04 par schadocalex
Hors ligne qnope # Posté le 06/02/2011 à 20:55:54

Shadocalex, il est précisé dans les contraintes que nous devons utiliser que la SDL, hors je vois que tu utilises SDL_Image? A t'on le droit? Je pense que oui, vu que c'est un peu la même chose, mais n'étant pas sur, je demande quand même ^^



 
Hors ligne paraze # Posté le 06/02/2011 à 21:07:36
Tiësto is the best
Avatar

Ville : Gex
Pays : France métropolitaine

Comme je l'ai précisé dans mon premier poste, je ne suis pas si diabolique que ça. :-°
Vous pouvez utiliser : SDL, SDL_Image, SDL_ttf, SDLP_Anim, SDL_Mixer, SDL_gfx et FMOD.
Édité le 06/02/2011 à 22:11:07 par paraze

WTF Public License : WTFPL

Vous souhaitez apprendre à programmer, mais vous ne savez pas comment vous y prendre ?


Exercices pour débutants en C >>> Venez vous entraîner afin de progresser !
Ce mois-ci, traduisez des acronymes avec zWTF !
 

Retour au forum "Langage C" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx


Lire aussi