Graphismes pour le jeu en caml

image en cc-by-sa réalisée par Daniel Cook
, par
Quelques indications pour trouver des graphismes agréables et libres de droits et pour les intégrer à vos programmes en caml.
Pour améliorer le graphisme de vos programmes vous pouvez utiliser des images trouvées sur internet. Il vous faudra commencer par trouver des images libres de droits, vous donnant la possibilité de les utiliser comme vous l’entendez. N’oubliez pas de citer le nom des auteurs de ces images, au moins dans votre code source.
trouver des images
Parmi les licences libres les plus connues il y a les licences creative commons. Le site http://search.creativecommons.org/?... procure un (meta)moteur de recherche pour trouver des ressources sous licence libre.
L’image en tête de cet article a été trouvée sur le site http://www.lostgarden.com, elle est le fruit du travail de Daniel Cook et il est important que vous le mentionniez en tant qu’auteur si vous utilisez son travail.
Vous pouvez aussi vous tourner vers des sites spécialisés dans les graphismes pour jeux libres tel que http://opengameart.org ou bien effectuer des recherches à partir des mots clés open sprite sheets. Si vous voulez vous lancer dans un jeu isométrique (ce sera plus difficile), Kenney fournit un ensemble de tuiles à partir desquelles vous pourrez construire des terrains complexes. Vous pouvez aussi tenter l’expérience d’un jeu hexagonal.
traitement de l’image
Une fois que vous avez une image intéressante, vous pouvez la redimensionner et éventuellement effectuer quelques autres traitements. Les dimensions seront donnés en pixels. Il n’y a pas de question à se poser sur la résolution ou une taille physique de l’image. Les images de votre programme ne sont pas destinées à être imprimées ou affichées sur un écran haute définition.
Pour redimensionner une image vous pouvez utiliser la commande convert de ImageMagick (sous linux / mac os).
- $ convert beetleship.png -resize 40x bettleship40.png
Préférez un format final en png avec transparence, pour un beau rendu …et surtout pour pouvoir passer à la dernière étape.
Intégration dans votre programme
Il reste à intégrer l’image à votre programme. Le module Graphics de ocaml ne fournit pas de fonction permettant de lire un fichier image pour l’intégrer à la fenêtre de rendu. Nous devons pour cela utiliser le module lablgtk2, qui ne sera pas forcément installé sur votre ordinateur.
Une fois compilé, le programme suivant lit une image en png fournie en argument et affiche sur sa sortie standard un tableau de tableau de paires, aux dimensions de l’image, où chaque paire représente un pixel par le code de sa couleur (au sens du module Graphics) et sa valeur de transparence.
- (*
- ocamlfind ocamlc -package lablgtk2 graphics -I . -c imagefromfile.ml
- ocamlfind ocamlc graphics.cma -package lablgtk2 -linkpkg -w s imgfromfile.ml -o imgfromfile
- #require "graphics";;
- #require "lablgtk2";;
- *)
- open Gpointer;;
- let locale = GtkMain.Main.init ();;
- let gp = GdkPixbuf.get_pixels pixb in
- let nthpixel gp n =
- let x = 4 * n in
- let f = Gpointer.get_byte gp in
- in
- let w = GdkPixbuf.get_width pixb in
- let h = GdkPixbuf.get_height pixb in
- for y = 0 to h - 1 do
- for x = 0 to w - 1 do
- let c, t = nthpixel gp (y * w + x) in
- print_int c;
- print_int t;
- print_string ";"
- done;
- done;
- ;;
Compiler ce fichier est un peu compliqué, le plus simple étant d’utiliser opam pour gérer les paquets ocaml nécessaires. Mais on y gagne beaucoup en confort, notamment avec utop. Cela fera l’objet d’un autre article.
En attendant vous pouvez utiliser le fichier images.ml joint à ce article, il contient déjà un certain nombre d’images de Daniel Cook qui vous permettront de faire vos essais.
- Version pour OCaml d’illustrations créées par Daniel Cook http://www.lostgarden.com
À compiler (comme module) à l’aide de la commande :
- $ ocamlc images.ml
puis à charger dans l’interprète
- # #load "images.cmo";;
Les images ont alors des noms préfixés par le nom de module (Images) qui a été créé à partir du nom de fichier.
Un grep sur le fichier source vous renseignera sur les images présentes dans le fichier.
- $ grep let images.ml
- let ship =
- …
Par contre c’est à vous de trouver comment afficher ces images avec ocaml (et exploiter la transparence) !
Mise à jour
Les tuiles isométriques de Kenney Vleugels sont fournies ici avec un fichier .ml construit sur le même principe que le fichier images.ml. Attention, les noms des fichiers png ont été repris à l’identique pour construire les noms en ml et ils sont parfois un peu inconsistant (inversion des coins).