Pour les cours d'informatique et de programmation vers Lorient, cliquer ici

PstarEngine
PstarEngine




(Dernière mise à jour : 9 mai 25)


Présentation du projet


Début du projet : octobre 2024

Je suis en train de construire un petit moteur de jeu (ou plutôt un framework pour être précis) avec Processing et P5js

Il s'agit d'en avoir 2 versions : en Java avec Processing et en Javascript avec P5js.

L'idée de ce projet est, d'une part, de pouvoir créer de petits jeux en 2D en pouvant comprendre et accéder au code du moteur sans avoir besoin de comprendre le C++ et d'autre part, notamment pour la version JAVA, de pouvoir utiliser des bibliothèques auxquelles les moteurs de jeux n'ont pas accès en général (comme pour faire du FTP par exemple) et de l'utiliser dans des applications en maîtrisant complètement son interface graphique.

Tout est fait en utilisant l'éditeur de Processing qui est bien plus accessible que les programmes utilisés par les professionnels (voir ci-dessous).
L'utilisation de concepts de programmation relativement avancés comme de nombreux patrons de conception (design pattern) peux aussi être formateur pour beaucoup de personnes (me semble-t-il) qui pourraient trouver utile d'étudier son code.

Concepts d'interfaces graphiques

       



L'éditeur de code de Processing (et P5js)

Un éditeur simple à maîtriser et contenant tout ce qui est véritablement nécessaire pour se concentrer sur le code et pas sur les fonctions... de l'éditeur .

... et l'installer est simplissime : juste, téléchargez Processing, ajouter P5js (si vous en avez besoin) en cliquant sur le menu déroulant en haut à droite (marqué Java sur l'image) et tout s'installe automatiquement en quelques secondes.

De plus, vous aurez avec, plein d'exemples de codes. C'est un must pour débuter en Java ou en Javascript !

Et l'on peut faire des choses avancées avec (si on veut) !

(C'est le code que l'on écrit qui compte, pas la complexité de l'éditeur !)


(PstarEngine version JAVA 0.21.5 ouvert ci-dessous)

L'éditeur de Processing et P5js




Roadmap


PstarEngine

Ce que j'ai fait jusqu'ici...

J'ai écrit plusieurs versions à partir de zéro du coeur du programme jusqu'à passer du temps à approfondir la question des Design Patterns.
J'ai aussi regardé l'organisation de 2 excellents moteurs de jeux vidéo existants : Godot Engine et Defold.

Suite à cela, j'ai à nouveau tout repris à partir de zéro et j'ai commencé à utiliser GIT en local tout en écrivant en parrallèle la version Java et javascript.
Je veille à ce que les deux versions soient le plus identique possible pour l'utilisateur afin de faciliter la traduction du code d'une version à l'autre.

L'organisation de mon code me semble cohérente maintenant avec ce que je souhaite mettre en place.

J'essaie vraiment d'avoir un code modulaire et cohérent pour pouvoir l'étendre sans que cela devienne incompréhensible !
C'est pour cela que j'ai passé autant de temps à faire et à refaire le coeur du programme !

N.B. Je m'attends à devoir faire pas mal de refactorisations quand je m'occuperai du moteur physique mais... chaque choses en son temps ! :)

Fait

Le "coeur du programme"
Arbre de "Nodes" similaire dans l'esprit à Godot Engine avec un système de composants similaire à Defold !
Nodes graphiques particuliers pour l'interface graphique dans le même arbre (donc là, pas comme dans Defold du tout)
Je ferai une explication plus poussée au début de la documentation mais cela essaie de répondre à des critiques que j'aurais à faire tant à Godot que Defold
C'est logique : puisque je fais un nouveau truc !

Système d'interfaces graphiques avec une gestion de thèmes pouvant être changés à tout moment (tous les widgets se mettent à jour automatiquement).

Visualisation de l'arbre des nodes et composants en cours (même principe dans l'esprit que dans Godot)
La sortie est dans la console pour l'instant mais sera dans un widget quand celui-ci sera disponible.

Messages d'erreurs pour le déboggage dans une fonction particulière (même remarque que ci-dessus).

Fonctions pLoad...(ou méthodes)
(attente automatique du chargement de fichiers avec une barre de défilement)

Gestion des entrées claviers avec modifications possibles pendant le déroulement du programme
(notamment pour gérer les différents claviers / langues).

Détection de la langue de l'utilisateur (Javascript)

En cours de réalisation

Fonction unListen() de l'interface Observable dans la version JS :
1) marquer dans unListen() les éléments à supprimer avec un booleen
2) les supprimer du tableau avec la fonction splice(i,1) lors de son parcours
dans la fonction notify() (parcourir le tableau de la fin vers le début !)
(Faire quelque chose de similaire pour la suppression des nodes / toRemove / JAVA et JS)

Simplifier en supprimant les enum par un système de hashcode des String
(cf ce lien pour mémoire)

Modification du système des entrées au clavier pour prendre en compte
l'appui simultané sur plusieurs touches

Mouvements avec vélocité, accélération...

Gestion simplifiée de collisions (1° version)

Gestion d'animations

Système de particules (référence Shiffman)
(voir dans Godot et Defold / paramètrages à mettre en oeuvre)

Interface graphique classique version BASIC
(Vite fait graphiquement pour tester les fonctions / GUI)

Gestion de plusieurs langues (français et anglais en particulier) pour tous les textes.

Effets sonores et gestion des textes audio en plusieurs langues.

Dans un second temps

Interfaces graphiques FLAT et SF (graphismes soignés)

Un système de transition pour l'apparition et la disparition des éléments d'interface.

Interface circulaire

Pour plus tard

XML/JSON

Import/Export d'informations en utilisant d'une façon transparente pour l'utilisateur du framework du XML et du JSON.
(l'utilisation de fichiers externes sera indispensable à mon projet d'éditeur de site internet (quasi) statiques par exemple)

Widget d'éditeur de texte "riche" genre tinyHTML

(bbcode en interne, autre système... ?)
- Test d'une idée pour faire ça simplement dans un programme à part bientôt ! -

FTP

(depuis Processing ou en utilisant Processing dans un environnmenent Java classique)

Moteur physique 2D

Réflexion en cours

Ecriture du code (cf PixelPhysics par exemple)
Utilisation d'une biliothèque externe
(Box2D : Java, javascript
Matter.js : Java, Javascript
...)
Fonctionnalités 3D

Projets

Le programme de démonstration

Au départ, un simple jeu avec un petit vaisseau spatial dans un champs d'astéroïdes (interface graphique français/anglais, vélocité, accélérations, collisions, animations, système de particules, sons, textes audio français/anglais)

MyMemos

Jeux de mémos à partir d'un fichier XML et d'images associées pouvant être déterminées par un utilisateur pour permettre de mémoriser des associations par exemple feuilles/nom des arbres ou d'autres choses (les fonctions / XML pourront être utilisées ensuite dans le projet suivant)

Une application de création de sites internet statiques

(avec un aspect dynamique dedans !)

Fusion de templates html avec des données enregistrées en XML (ou JSON à voir) à partir d'une interface graphique.
Dans un second temps, utilisation de FTP par l'application pour envoyer les fichiers.
Puis, écriture facultative de fichiers PHP pour ajouter une partie dynamique pour certaines fonctions (comme un formulaire de contact).
Je finirai sûrement par utiliser aussi des programmes Javascript écrits avec la version JS du moteur !
(qui seront téléchargés sur le serveur par le programme)

et d'autres choses...




Démo


Un programme de démonstration est en cours de réalisation pour montrer les possibilités du moteur et donner un exemple de code.

Ce programme sera régulièrement mis à jour au fur et à mesure de l'écriture de PstarEngine.





Documentation

Pour commencer...


Le plan (UML)

voir ici

Javadoc

Version 0.21.5.

La version Javascript est quasiment identique.
Les petites différences seront expliquées dans un texte à part.

voir ici

(sans commentaires pour l'instant)




Code source

Git en local est utilisé.

Le code sera bientôt en ligne dans une forge logicielle.

License ?

License du type MIT, je pense


Aperçu du code source

Version 0.21.5. JAVA
(21 avril)

Version 0.21.3. Javascript
(18 avril)




Liens


Principaux

Processing
(pour la version JAVA et pour l'éditeur de code que j'utilise)

P5js
(pour la version Javascript)

Q5js
(qui sera probablement utilisé aussi dans quelques temps)

py5
(une version en Python de Processsing qui sera peutêtre utilisée plus tard)

Mon site internet personnel

En plus...

PixelPhysics
(une chaîne Youtube pour la création d'un moteur physique)