Bien, il est tant d'appliquer ce que
vous venez d'apprendre n'est-ce pas?
Si vous ne voulez pas tant pis, mais je l'ai déjà
écris et vous me fairez le plaisir de lire...
Légende:
Sprites
Sounds
Background
Paths
Scripts
Fonts
Timelines
Objects
Rooms
Groupe
Event
Action
§Point étape
!Information
importante
|
1) Le jeu
Tout d'abord, qu'allons nous faire?
Un jeu vidéo simple multijoueur sur internet, pour éviter
tous calculs mathématiques périlleux, nous allons donc
limiter
notre jeu à 2 joueurs.
Que diriez vous d'un jeu où deux joueur se déplacent dans
une room?
Ce n'est pas vraiment un jeu, mais c'est un moyen de vous apprendre
à
vous servir du multijoueur et de créer quelques chose
d'intéressant et simple à programmer.
2) Le système dont
nous allons user
Maintenant, quel protocole allons nous utiliser?
Les message seraient intéressant pour un tchat, mais les shared
data sont beaucoup plus intéressants pour une mise à
jour en temps réel des informations sur le joueur comme les
variables x,y.
Donc ici nous userons des Shared data.
3) Mise en application
Vous êtes prêt?
Ok, on y va!
Bien nous allons tout d'abord définir les paramètres
globaux du jeu, ainsi que le script de connexion serveur et client.
Nous allons créer l'unique script de
connexion:
script_connect
ip
= get_string("Ip:","127.0.0.1");
if (mplay_init_tcpip(ip) != 1)
{
show_message("Connexion
Imossible.");
break;
}
else
{
global.name = get_string("Nom du
joueur","daminetreg");
}
if (mplay_session_find() == 0)
{
game_name = get_string("Nom
de la partie:","Serv");
global.gamename =
game_name;
mplay_session_create(game_name,2,global.name);
global.ident = 1;//Pour
définir qui est le joueur 1
//Jeu en préchargement
}
else
{
global.gamename = mplay_session_name(0);
mplay_session_join(mplay_session_name(0),global.name);
global.ident = 2;//Pour
définir qui est le joueur 2
}
global.number = mplay_player_find();//Nous
n'en aurons pas usage |
On règle sur 2 le nombre max de joueur.
!
Soyez conscient qu'il faut toujours qu'il y est un joueur qui fasse le
serveur et l'autre le client, sinon le jeu ne peut pas fonctionner.
Maintenant créons un objet:
Y_control
Y_control
Vous y entrerez les paramètres suivant:
Selectionnez l'event
create
puis entrez y l'action
Execute a piece of code:
mplay_data_mode(false);//Les
données seront en mode non garanti
script_connect(); |
§Vous en
êtes là, Step 1:
Voir l'image en
grand
Récapitulatif:
-Vous avez créé le script_connect
-Vous avez
créé un objet Y_control
|
Bien maintenant il nous faut créer les scripts de
maintenance des
joueurs, c'est à dire les scripts qui vont mettre à jour
et qui vont
lire les mises à jour des déplacement des joueurs.
Nous inclueront aussi dans ce script, un système pour savoir si
un des deux joueurs quitte la partie.
Donc, créons dans Scripts un groupe que nous nommerons:
Maintenance
Nous y placerons les deux scripts qui suivent:
script_update_p1
//Script
de maintenance du joueur 1
//lecture des déplacements
x = mplay_data_read(5);
y = mplay_data_read(6);
//Déplacements
if global.ident = 1//si
le joueur est l'hôte
{
if (keyboard_check(vk_up))
{
y -= 6
mplay_data_write(6,y);
}
if (keyboard_check(vk_down))
{
y +=6
mplay_data_write(6,y);
}
if (keyboard_check(vk_left))
{
x -= 6
mplay_data_write(5,x);
}
if (keyboard_check(vk_right))
{
x +=6
mplay_data_write(5,x);
}
}
//Si l'autre joueur quitte
//if (mplay_player_find() < 2)
//{
// show_message('...::Le joueur adverse a
quitté la session::...');
// game_end();
//}
|
script_update_p2
//Script
de maintenance du joueur 2
//Synchronisation des déplacements
x = mplay_data_read(11);
y = mplay_data_read(12);
//Déplacements
if global.ident = 2//Si
le joueur est le client
{
if (keyboard_check(vk_up))
{
y -= 6
mplay_data_write(12,y);
}
if (keyboard_check(vk_down))
{
y +=6
mplay_data_write(12,y);
}
if (keyboard_check(vk_left))
{
x -= 6
mplay_data_write(11,x);
}
if (keyboard_check(vk_right))
{
x +=6
mplay_data_write(11,x);
}
}
//Si l'autre joueur quitte
//if (mplay_player_find() < 2)
//{
// show_message('...::Le joueur adverse a
quitté la session::...');
// game_end();
//}
|
!Nous
avons créer deux scripts quasiment similaire, pour bien vous montrer qu'il faut
utiliser des slots différents pour les données du joueur
1 et les données du joueur 2. En réalité il serait préférable de ne faire qu'un seul script se basant sur une variable d'identifiant de joueur associée a un objet joueur unique, mais ici c'est un anti-pattern à but pédagogique.
Prenez la 11ème ligne:
Le 12
est le slot utilisé, et le y la valeur qui est attribué
à ce slot.
On ne peut pas utilisé deux fois le même slot? bien
compris? des réticences? Non? vous
êtes un bon élève. :p
Maintenant nous allons créer un groupe nommé
Joueurs dans objects, nous y
inclueront les objets:
J1
et
J2
Vous créerez aussi un groupe
Joueurs
dans sprite et vous y incluerez les sprites:
spr_j1
et
spr_j2
Suite à cela vous chargerez les sprites de votre choix et les
assignerez à leurs objets
respectifs, c'est à dire:
spr_j1
pour
J1
et
spr_j2
pour
J2.
Dans J1
vous entrerez une piece of code dans step
(
comme vu plus haut ) pour executer: script_update_p1
Ensuite pour J2
dans step
placez une piece of code pour executer: script_update_p2
Puis vous créerez une
room nommée Y_room .
Vous y placerez les objets J1
, J2
et Y_control
Sauvegardez le tout puis cliquez sur la
petite flèche verte qui permet de faire démarrer le jeu.
Il vous suffit après avoir sauvegardé votre gm6, de
l'ouvrir deux fois et de le démarrer deux fois, entrez y dans
chacun l'ip 127.0.0.1 de
cettes façon vous pourrez tester le jeu en local sur votre ordinateur. ;p
Si cela ne fonctionne pas assurez vous que vous avez la version
Enregistrée de GM 6 ou +, cherchez si vous ne vous êtes
pas trompé
quelque part, éssayez de refaire le tutorial, ou alors
connectez vous
sur http://lecbna.com/ direction: Le
Forum, là il y aura bien quelqu'un pour vous aider ( Moi par
exemple ).
Topic du tutorial: http://
§Vous en
êtes là, Step Final:
Voir l'image en grand
Récapitulatif:
-Vous avez créé le script_connect
-Vous avez
créé un objet Y_control
-Vous
avez créé le script_update_p1
-Vous
avez créé le script_update_p2
-Vous avez crée le sprite spr_j1
-Vous avez créé le sprite spr_j2
-Vous avez crée l'objet J1
-Vous avez crée l'objet J2
-Vous avez créé le script_update_p2
|
Alors après tout ça? vous
trouvez toujours aussi dur de créer un jeu multijoueur?
Vous vous rendez compte, c'est tout simple, c'est même enfantin,
mais
ça semble faire peur à tout le monde, au moins maintenant
vous savez
comment faire, et vous savez que ce n'est pas difficile. ;-)
J'espère
simplement que cela vous aidera à créer de super jeux
multijoueurs, et si jamais vous en créez un, contactez moi: lecbna@estvideo.fr , je serais
très heureux d'y jouer et de le publier sur Le CBNA.
J'ai passé un agréable moment avec vous merci, vous
êtes un bon élève. :)
Buhl
Damien
allias daminetreg
Fondateur du CBNA
http://lecbna.com/
@3