Cauldron – la carte

A la base, ce jeu est un mélange de deux types de jeu : un shoot-them-all (un shmup) et un jeu de plate-formes. Le shmup est la partie aérienne avec la sorcière qui vole. Le jeu de plate-formes est dans les diverses grottes. Dans les deux cas, je pense gérer ça avec le principe des « tiles ». L’idée est qu’avec un nombre fini de petits graphiques, il est possible de faire des cartes extrêmement grandes. Et pour faire ça, je vais utiliser un outil dont la vie est de gérer ce type de carte et qu’il y a un moment que j’ai envie de découvrir : Tiled Map Editor, maintenant nommé tout simplement mapeditor. https://www.mapeditor.org

Exemple de tiled :

C’est donc parti pour la découverte de ce logiciel très simple mais très puissant sur le sujet. En plus, le format de fichier généré est en json, donc très facilement parsable quelque soit le langage.

Exemple de carte :

Après avoir trouvé une carte complète du jeu fait à partir de copies d’écran de la version ZX Spectrum, j’ai implémenté ma propre version réalisée à partir de copie d’écran de la version C64. Les cartes sont différentes ! Même à ce niveau le jeu n’est pas le même !

La carte ZX Spectrum : 

Et voici un extrait de celle que je réalise :

Je n’ai pas encore terminé le niveau aérien, mais ça vous donne une bonne idée du concept.

Il ne me restera plus qu’à lire tout ça depuis C# et à l’afficher avec SkiaSharp.

Cauldron – plateforme et moteur graphique

J’ai maintenant le sujet et les premiers graphismes : il est temps de commencer à s’amuser à coder !

Je n’ai pas décidé sur quelle plateforme je veux que ça tourne. Je travaille sur Mac, ça serait plus facile pour moi si ça tournait sur Mac mais je n’ai jamais codé un programme Mac de ma vie ! Par contre je sais faire du multiplateformes avec Xamarin Forms et la version Mac de XF est en béta depuis un moment. Allez, je tente cette piste. C’est parti pour la création de mon premier projet Mac en Xamarin Forms ; la version 3.1 pour être précis.

Maintenant il me faut un « moteur » graphique. Chez Xamarin, ça parle de CocoSharp, de Urho et de SkiaSharp. Les deux premiers me sont vaguement connus et très bien documentés avec une forte communauté derrière eux grâce au nombre d’années d’existences. Mais SkiaSharp me tente bien, c’est assez neuf et me semble très prometteur. Je tente donc cette piste ! Un jour il faudra que je me lance dans Unity 3D… mais avec ce que j’ai a faire,  je pense que c’est carrément trop puissant rapport à mon besoin. Jai également hésité avec la lib QT.

Pour me mettre à SkiaSharp, j’ai simplement utilisé cet article de blog : https://blog.xamarin.com/drawing-with-skiasharp/

Et c’est un succès, ça fonctionne sur Android, iOS … et sur mon Mac !

 

Pour information, SkiaSharp est une encapsulation de Skia en dotnet utilisable en C#. Skia est un moteur vectoriel graphique, racheté par Google en 2005, codé en C++ et qui est open source. C’est le moteur graphique de Firefox, Androïd et Chrome. C’est ce qui le rend intéressant à utiliser.

 

Pour mon développement, la phase d’affichage sera déclenchée par un « InvalidateSurface » et la constitution de l’affichage sera lors de l’événement « PaintSurface ». Cette constitution d’affichage se fera sur un « canvas » sur lequel je peux dessiner du bitmap et effectuer du scaling avec plusieurs algorithmes de resizing. Bref, tout ce dont j’ai besoin.

Structure du programme :
– Je charge les divers éléments nécessaires (graphismes par exemple)
– Je planifie un calcul du monde du jeu 60 fois par secondes
– Je dessine et affiche le monde du jeu dès qu’il y a un changement

Cadeau, un webinar sur Skia et SkiaSharp : https://channel9.msdn.com/Events/Xamarin/Xamarin-University-Presents-Webinar-Series/SkiaSharp-Graphics-for-XamarinForms