Voici uns de mes derniers jeu que je suis entrain de developper en VB.net
Il tourne sous le moteur de DirectX avec tzu3D
Quelques Screenshots :
Le menu principale
Enfaite il y a un gros personnage qui passe devant d'ecran c'est Tiny ^^
C'est un jeu qui se joue en multijoueurs (4 joueurs max <(pour l'instant , c'est déja assez compliqué comme ça !) )
Il y a le Mode FPS (Vue de l'acteur)
Et RPG (Caméra poursuite)
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
' Determiner une position de la caméra en circulaire autour du personnage
Procedure a utiliser :
{objet}_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
' déclarer les variables
dim ax ,droite ,rayonperso ,nb
if ax = "" then ax = form1.width / 2 ' placer au centre
if rayonperso = "" then rayonperso = "200"
if nb = "" then nb = "10"
' Mettre dans une variable décimale (nb) le degré de rotation ( déplacement x de la souris )
If MousePosition.X > ax Then ' si la position de la souris est supérieur a l'ancienne position alors on diminue nb
droite = droite + 0.05
nb = nb - 0.05
rota = 0.05
If droite > 4.2 Then droite = -2
Perso1.Angles = New Vector3(TZGlobal.DegToRad(-90), droite, 170) ' puis on fait tourner aussi le personnage
GoTo suit
End If
If MousePosition.X < ax Then 'si la position de la souris est inférieure a l'ancienne position alors on augmente nb
droite = droite - 0.05
nb = nb + 0.05
rota = -0.05
If droite < -2 Then droite = 4.2
Perso1.Angles = New Vector3(TZGlobal.DegToRad(-90), droite, 170) ' puis on fait tourner aussi le personnage
GoTo suit
End If
suit:
ax = MousePosition.X ' il faut indiquer à la variable ax la nouvelle position y de la souris
dr.Text = droite
' J'utilise le Cosinus pour deternimer la position circulaire de la caméra grace aux variables nb et rayonperso
xx = Math.Cos(nb) * rayonperso
yy = Math.Sin(nb) * rayonperso
Schéma :
Procedure a utiliser :
{objet}_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
' déclarer les variables
dim ax ,droite ,rayonperso ,nb
dim hautperso ' determiner hauteur (position y) su personnage
if ax = "" then ax = form1.width / 2 ' placer au centre
if rayonperso = "" then rayonperso = "200"
if nb = "" then nb = "10"
' Mettre dans une variable décimale (nb) le degré de rotation ( déplacement x de la souris )
If MousePosition.X > ax Then ' si la position de la souris est supérieur a l'ancienne position alors on diminue nb
droite = droite + 0.05
If droite > 4.2 Then droite = -2
Perso1.Angles = New Vector3(TZGlobal.DegToRad(-90), droite, 170) ' puis on fait tourner aussi le personnage
GoTo suit
End If
If MousePosition.X < ax Then 'si la position de la souris est inférieure a l'ancienne position alors on augmente nb
droite = droite - 0.05
If droite < -2 Then droite = 4.2
Perso1.Angles = New Vector3(TZGlobal.DegToRad(-90), droite, 170) ' puis on fait tourner aussi le personnage
GoTo suit
End If
suit:
ax = MousePosition.X ' il faut indiquer à la variable ax la nouvelle position y de la souris
dr.Text = droite
' Placer la caméra au niveau de la tête du personnage
' <<hautperso + 50>> position y du personnage (hauteur) + 50 <(la tête)
myCamera.Position = New Vector3(av, hautperso + 50, gauche)
' Puis faire une rotation de 2.85 ° si la nouvelle position x est supérieure
If MousePosition.X > labelx Then myCamera.Rotate(2.85, 0, 0)
' et une rotation de -2.85 ° si la nouvelle position est inférieure
If MousePosition.X < labelx Then myCamera.Rotate(-2.85, 0, 0)
Enfin Voilà , c'était une petite parentèse sur la caméra du jeu
,c'est tout con !
Il suffit d'indiquer au jeu le dossier de partage windows dans un serveur local ou internet , dans le jeu X')
Vous pouvez mettre un serveur locale , un serveur http / https / ftp ou ip
ex :
http://monserveur/jeux/cpcsmall3D/
http://169.254.168.224/jeux/cpcsmall3D/
\\monserveur/jeux/cpcsmall3D/
et puis il suffit le mettre toutes les 0.01 sec la position d'un personnage du jeu pour qu'un autre ordinateur récupère cette position et le placer dans le jeu
Attention , dans la programmation faites bien attention à bien fermer le fichier après lecture (close #{numéro-fichier} file.close({numéro-fichier}), sinon un code d'erreur s'annoncerait. /!\
Vous pouvez echaper à l'interruption avec " On error " .
chaques fois que l'ordinateur veut récupérer la position d'un personnage, il alerne et ne fait jamais en même temps sinon il y aura un mini bloquage de 100 ms toutes les secondes et votre fps sera d'en moyenne de 30 à 10 Fps aulieu d'une centaine !!
donc le jeu serais pretiquemement injouable !
donc il aterne genre:
schéma du RPDJ
toutes 5 ms il récupère la position d'un personnage
donc pour 1 rafraichissement il met :
RPDJ(1) + RPDJ(4) + RPDJ(3) + RPDJ(4)
5 + 5 + 5
= 20 ms
et une séparation de 10 ms
donc
pour une filière il met 20 ms
pour une filière complète il met 30 ms
et
20/3 = 6,6666666666666666666666666666667
donc l'ordinateur aura ~6 sec pour faires ses autres opération du jeu
et
20 - 6,6666666666666666666666666666667
= 13,333333333333333333333333333334
DONC :
L'ordinateur travaillera dans le processus du jeu 13.33 ms a placer les personnages du jeu
et
L'ordinateur travaillera dans le procesus du jeu, 6.66 ms a faire des autres opérations du jeu
donc cela fait en moyene un fps entre 400 et 430 fps !!!! .
Tout cela se passe dans 1 procedure ( la récéption )
Puis pour l'envoie de la position du personnage,
c'est tout con, toutes les 1 ms l'ordinateur inscrit la position du personnage dans le fichier.
Tout les fichiers lue et inscrit son dans le serveur "dossier de partage", il faut faire confiance a la capacité de l'ordinateur et du disc-dure de l'ordinateur qui est propriétaire du réseau, sinon il y aura du lag dans le jeu,
Dans le jeu , je prévois de mettre en place des veicules, donc (en sachant que ca va plus vite qu'un personnage, donc il y aura une 2eme procedure qui concernera tout véicules du jeu) , il aura même fonction pour le schéma du RPDJ du dessu avec le même intervale.
Page en cours d'ecriture...
1. 12/05/2011
super jeu !!
2. 16/04/2011
Bon commencement !!
Date de dernière mise à jour : 05/07/2021