Tous droits réservés

La SDL

Dans ce premier chapitre, nous allons voir ce qu’est la SDL et apprendre à faire un projet l’utilisant. C’est donc un chapitre d’introduction qui nous informera sur la SDL et sur le tutoriel. Nous y apprendrons les prérequis nécessaires pour suivre ce tutoriel et comment celui-ci se déroulera.

Présentation de la SDL

Qu’est-ce que la SDL

La SDL c’est-à-dire la Simple DirectMedia Layer est une bibliothèque multimédia. Elle permet un accès de bas-niveau à l’audio, au clavier, à la souris, au joystick, aux graphiques… Cela veut dire qu’elle permet d’afficher des fenêtres, d’afficher des images, de jouer des sons, de gérer le clavier…

Il s’agit d’une bibliothèque libre, multiplateforme et assez connue. Elle est écrite en C, mais peut également être utilisée en C++ et de nombreux portages existent dans d’autres langages, notamment en C#, en OCaml ou encore en Python. Depuis sa version 2, elle est placée sous la licence zlib.

Logo de la Simple Direct MediaLayer
Logo de la Simple Direct MediaLayer

Que peut faire la SDL

Très bien, la SDL est une bibliothèque multimédia.

Mais concrètement, quel type de projet peut-on faire avec ?

La SDL permet de faire différents types de projet. Elle est typiquement utilisée pour faire des jeux 2D, mais ce n’est pas sa seule utilité. Elle se veut être une bibliothèque qui permette de faire assez de choses. Notamment, la version 2 de la bibliothèque, sortie en 2013, rajoute des fonctionnalités utiles.

Pour faire un petit jeu 2D et s’amuser en C, c’est un bon choix. La SDL est assez généraliste pour nous permettre de faire n’importe quel type de jeu. Réaliser un Tétris, un Casse-brique, un Pong ou un Bomberman ne pose pas de problèmes. On peut même faire :

  • des « Shoot ’em up » (Space Invaders) ;
  • des jeux de combats ;
  • des jeux de plateforme (Super Mario Bros par exemple) ;
  • des RPG 2D (Zelda par exemple).

Bien sûr, réaliser ces jeux demande plusieurs compétences. Par exemple, dans le cas du RPG, il faudra gérer :

  • le « tile mapping » ;
  • les collisions ;
  • les évènements ;
  • les combats.

Tout ça sans oublier le son, les animations et tout le contenu. Ce travail est facilité par l’utilisation d’un moteur de jeu (nous pouvons créer un moteur de jeu minimaliste avec la SDL pour nous faciliter ce travail).

Portage sous Android du jeu Blip & Blop (*Shoot ’em up* à scrolling horizontal).
Portage sous Android du jeu Blip & Blop (Shoot ’em up à scrolling horizontal).

La SDL peut également être utilisée pour créer de petits utilitaires, mais ce n’est clairement pas son rôle premier. Dans ce cas, il faut plutôt se renseigner sur des bibliothèques comme GTK+.

Pourquoi choisir la SDL

C’est une question essentielle.

Quels sont les avantages de la SDL sur les autres bibliothèques ?

Le plus grand avantage de la SDL est sa grande souplesse. En effet, comme nous l’avons dit, elle permet de faire des petits jeux plus ou moins facilement.

De plus, elle ne dispose pas de beaucoup de fonctions (moins de 600), et est donc assez rapide à appréhender. Son utilisation n’est cependant pas simple, mais elle reste un bon choix, notamment pour l’apprentissage. Notons que de petites bibliothèques viennent compléter la SDL ce qui nous permet par exemple de manipuler les réseaux ou le son plus facilement qu’avec seulement la SDL.

La licence peut aussi motiver le choix de cette bibliothèque. En voici les termes.

Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.

Nous pouvons utiliser la SDL dans n’importe quel projet, libre ou non, gratuit ou payant, et nous pouvons même modifier la SDL ; tout cela avec très peu de restrictions. Ce qui nous intéresse dans ce tutoriel, ce n’est pas de modifier la SDL, mais seulement de l’utiliser. La seule restriction à cela est de ne pas mentir en revendiquant la création de la SDL. La licence ne nous oblige même pas à mentionner l’usage de la SDL (même si c’est apprécié) !

Un autre argument pour l’utilisation de la SDL est le fait qu’elle soit multiplateforme. Nous pouvons en effet réaliser des programmes pour Windows, Linux, OSX et pour une multitude d’autres plateformes. Nous pouvons même écrire des programmes pour Android !

Bien sûr, le meilleur argument reste les projets qu’elle permet de réaliser.

Configurer un projet avec la SDL

Windows

Les utilisateurs de Code::Blocks ou de MinGW peuvent utiliser ce tutoriel qui les aidera à configurer un projet qui utilise la SDL. Sinon, Internet et le site de la SDL donnent des informations à ce propos.

Linux

Sous Linux, la méthode la plus simple est d’utiliser son gestionnaire de paquet pour installer le paquet de développement de la SDL. Par exemple, sous Debian et ses dérivés, cette commande peut être utilisée.

apt-get install libsdl2-dev

Une grande majorité des distributions disposent du paquet de développement (peut-être sous un autre nom que libsdl2-dev) dans leurs paquets, mais s’il n’est pas disponible, il est également possible de compiler les sources soi-même (voir la page d’installation de la SDL).

Une fois ceci fait, il nous faut juste modifier notre ligne de compilation pour indiquer que nous utilisons la SDL. Avec gcc par exemple, notre ligne pour compiler un fichier ressemblera à ça (nous conseillons de rajouter d’autres options de compilation comme -Wall et -Wextra).

gcc main.c $(sdl2-config --cflags --libs)

Nous indiquons juste qu’il faut lier la SDL à notre programme.

Ce billet fournit quelques explications pour une utilisation de la SDL avec Code::Blocks sous Linux.

OSX

Le site de la SDL (et d’autres ressources sur Internet) indiquent comment configurer un projet pour utiliser la SDL.


Pour vérifier que tout va bien, nous pouvons compiler ce code.

#include <SDL2/SDL.h>

int main(int argc, char *argv[])
{
    SDL_Init(SDL_INIT_VIDEO);
    return 0;
}

Normalement, la compilation devrait se faire sans erreur. Le programme créé ne fait rien, mais dès le prochain chapitre, nous verrons comment ouvrir une fenêtre.

Prérequis et état d'esprit du tutoriel

Prérequis

Pour suivre ce tutoriel, certaines connaissances sont requises. Des bases en langage C naturellement. Il n’est pas nécessaire d’être particulièrement à l’aise avec le langage (ce tutoriel peut d’ailleurs servir à pratiquer) quelques connaissances sont quand même indispensables :

  • les pointeurs et les tableaux ;
  • la gestion de la mémoire ;
  • les structures ;
  • la gestion des fichiers.

De plus, l’instruction goto sera utilisée à des fins de gestion d’erreur. Il faut juste voir son fonctionnement et savoir à quoi elle sert, son utilisation dans ce tutoriel étant assez basique.

Il ne sert à rien d’essayer d’utiliser une bibliothèque en C sans avoir acquis les bases non seulement du langage, mais aussi de la programmation.

Ce tutoriel par exemple, apprend à manipuler les notions citées. Le but n’est pas de le survoler, mais de prendre son temps, de bien l’exploiter, de regarder d’autres ressources, afin de connaître les bases nécessaires pour suivre ce tutoriel.

Le but du tutoriel

Le but de ce tutoriel est de présenter la SDL bien entendu. Mais un but plus profond est de présenter une première bibliothèque, d’apprendre à l’utiliser sans se sentir perdu, et de devenir indépendant.

Un autre des buts de ce tutoriel est de donner de bonnes habitudes. Le C est un langage difficile à bien utiliser. Il demande de la rigueur et écrire un code propre n’est pas facile. Ainsi, en proposant un code propre et gérant les erreurs et autres cas critiques pouvant toucher le programme, nous espérons aider le lecteur à acquérir de bonnes pratiques. Cependant, tous les codes ne feront pas de vérification (mais il faudra quand même les faire).

Finalement, le but (et c’est quand même le principal) est que cette présentation de la SDL soit bénéfique et apprenne à utiliser une nouvelle bibliothèque. Si quelqu’un a pour but de faire un petit programme et réussit, grâce à ce tutoriel, à le faire avec la SDL, alors ce but a été atteint.

Ce tutoriel ne présente que la SDL et pas des méthodes de conception de projet qui sont nécessaires pour mener correctement un projet.

Ce tutoriel présente parfois des notions qui ne sont pas forcément nécessaires pour créer un jeu. Le chapitre sur la modification pixels par pixels n’est par exemple pas essentiel à la compréhension de ce tutoriel et est en plus assez technique (mais il reste très intéressant). Nous pourrons donc passer dessus rapidement voire le sauter quitte à revenir dessus plus tard.

Néanmoins, il nous faut veiller à passer suffisamment de temps sur chaque chapitre et à pratiquer ce que nous apprenons. La programmation est un domaine où lire passivement n’aide pas à la progression, et bien que le tutoriel possède des TPs, il faut également pratiquer de son côté et faire ses propres tests pour s’approprier les notions vues.

La documentation

En programmation en général, mais en particulier pour apprendre à utiliser une bibliothèque ou un outil inconnu, la documentation est un ami dont on ne peut pas se passer. Ce tutoriel s’appuiera beaucoup sur elle. Pour chaque fonction présentée, nous verrons la page de la documentation correspondante. Elle nous procurera notamment, le prototype de la fonction, ce qui nous permettra d’analyser ses arguments et sa valeur de retour. Elle nous renverra de plus vers d’autres fonctions proches qui pourront être utiles.

La documentation nous donnera également des informations sur la fonction (les erreurs qu’elle peut rencontrer par exemple) et des exemples d’utilisation et on peut même y trouver une page au sujet de l’installation.

Tout cela nous montre bien combien la documentation est utile. Savoir la lire et l’utiliser est donc une compétence non négligeable (voire indispensable). Espérons que ce tutoriel aidera à prendre conscience de son utilité.

La documentation de la SDL (comme la documentation de la plupart des bibliothèques) est en anglais. Ce n’est pas de l’anglais très compliqué et avec un minimum d’efforts, même un débutant pourra comprendre ce qui est écrit assez rapidement.

Voici le lien de la documentation. Nous pouvons déjà la parcourir et voir comment elle est construite avant de passer à la suite.


Dans ce chapitre introductif, nous n’avons pas du tout programmé, mais nous avons vu ce qu’était la SDL, les possibilités qu’elle donnait et comment ce tutoriel allait se présenter. Dans le chapitre suivant, nous commencerons à programmer, en voyant comment manipuler les fenêtres.