Le code

Le programme est beaucoup plus compliqué que ce que nous apprenons en cours d'ISN. Nous allons alors mettre ici des fonctionnalités nouvelles que nous avons apporté dans notre code.

L'héritage:

Cela permet de créer une "arborescence" de classe. Par exemple on crée une classe acteur avec certaines propriétés, une classe personnage (ou terrain etc) qui dérive de celle ci gardera ces propriétés et aura des caractéristiques propres. Cela permet d’alléger un code où beaucoup d'éléments ont les mêmes lignes.  


Le switch:

Le switch ( variable ) {case...} est une fonction qui regroupe en réalité plusieurs fonctions If(condition) {...}. Dans le programme elle sert notamment pour les animations : on a une variable nbAnimation qui vaut soit 0,1,2,3,... à chaque nombre on associe une animation grâce aux case :...break;


Les fonctions cos et sin:

Ce sont des fonctions simple qui permettent d'avoir le cosinus ou le sinus d'une valeur, elle est surtout utile pour avoir une périodicité du temps avec millis(). On note alors cos( millis()/100.0f ); diviser avec un float (.0f) permet d'avoir une multitude de valeur et pas seulement les entiers.

La 3D:

On l'active avec size(500,500,P3D); et permet alors d'afficher un univers en 3dimensions, en rajoutant l'axe Z.

L'objet box(x) crée un cube de coté x, sphere(x) crée une sphère de rayon x.

Afficher de la 2D sur de la 3D:

Une problématique qui peut semble simple mais pas quand la caméra se met à bouger, or les informations du joueur doivent toujours rester devant la camera ! Nous avons trouver la solution au problème en désactivant le test de profondeur et la perspective.

Avec hint(DISABLE_DEPTH_TEST), on peut désactiver le test de profondeur ce qui permet au texte d'avoir un fond transparent et de s'afficher par dessus l'image coûte que coûte.

camera() réinitialise la caméra et perspective, la perspective, ensuite le programme se comportera comme un programme en 2D classique.


Les transformations:

Les transformations sont utiles dans un univers 3D :

          - rotateX() ou rotateY() ou rotateZ() sont des fonctions qui effectuent une rotation autour de l'axe donné dans le sens horaire. On y entre une valeur en radiant, exemple : rotateZ(PI/2).

          - translate( x, y, z) est une fonction qui permet un déplacement sur 3 axes.                            Exemple : translate( 1, 2.5, -6). Elle est très utile pour définir la position d'un objet en 3d car la fonction box() ou sphere() ne prennent pas en compte la position de l'objet.

          - scale(x, y, z) est la fonction qui permet de mettre à l'échelle sur les 3 axes.

scale(1, 1, 1), ne fait rien alors que scale(0,5, 2, 1), montrera un objet 2 fois plus haut,  avec une largeur divisée par 2 et une profondeur normale.

L'ArrayList:

C'est un tableau qui accepte les modifications en cours de route ( par exemple si un joueur quitte la partie en plein jeu ).


Le Byte :

Au même titre que le float ou le int, le byte est associé à une variable. Ce pendant c'est une variable entière et codée qu'avec 1 octet, elle va donc de 0 à 255. Cette variable utilise donc moins de mémoire et est utile pour l'animation ou les échanges rapides sur le réseau.


Gérer les exceptions:

Avec des fonctions apporter de librairie il faut parfois savoir gérer les exceptions afin que le programme ne plante pas lorsqu'elles se produisent. Il faut pour cela utiliser l'architecture try/catch.

Les boites de dialogues :

Il peut être parfois utile de demander directement des infos au joueur avec les boites de dialogue

La classe Robot :

Il s'agit d'une classe qui peut simuler des entrées claviers, des déplacements de souris etc... Dans notre cas, nous allons pouvoir réinitialiser la position de la souris avec Robot.mouseMove(500, 500);

Le réseau :

Pour se connecter en tant que client au serveur il faut utiliser la classe Socket. Elle prend à sa construction comme paramètre l'adresse IP et le port du serveur à joindre.

En tant que serveur, il faut créer un ServerSocket. Il va écouter sur un port de l'ordinateur à l'affût du moindre socket qui pourrait se connecter. Pour cela il y a la fonction ServerSocket.accept() qui bloque le thread jusqu'à ce qu'un Socket se connecte. Il renvoie à ce moment le socket qui s'est connecté.

Pour s'échanger les données, il y a les objets DataInputStream(socket.getInputStream()) et DataOutputStream(socket.getOutputStream()) .

DataOutputStream.write<type>() permet d'envoyer la une variable DataInputStream.read<type>() permet de la recevoir.

Exemple : writeInt(10) et int nbRecu = readInt();

Des améliorations à proposer ?

Créez votre site web gratuitement ! Ce site internet a été réalisé avec Webnode. Créez le votre gratuitement aujourd'hui ! Commencer