[Tutorial] Apprendre а programmer en Pawn #1
#1

[CENTER][COLOR="Red"][SIZE="5"]Apprendre а programmer en Pawn - Chapitre I
[SIZE="4"]Mise en place des piliers[/SIZE][/SIZE][/COLOR]


[SIZE="3"]A. Le Pawn, c'est quoi ?

Il n'est pas un langage spйcifique а GTA:SA mais permet d'y exйcuter des instructions.
En effet, vous pourrez grвce а ce langage dйvelopper votre propre mode de jeu а l'intйrieur de GTA:SA.

B. Bien commencer ?

Commenзons par ouvrir notre traditionnel logiciel [URL="http://www.sa-mp.com/download.php"]Pawno[/URL] depuis notre serveur.
Comme je vous l'ai prйcisй, il n'est pas un langage spйcifique а GTA:SA. Vous devrez donc y inclure les fonctions de base de SA:MP grвce а cette instruction :

PHP Code:
#include <a_samp> 

C. Include ?

Cette instruction que vous voyez s'appelle une directive. Elle sert а dйclarer une instruction qui sera constante.
Nombreuses sont les autres directives et je vous invite donc а vous rediriger vers mon [URL="https://sampforum.blast.hk/showthread.php?tid=571819"]tutoriel[/URL] sur celles-ci afin d'en savoir plus. La directive define est expliquйe [URL="https://sampforum.blast.hk/showthread.php?tid=571802"]ici[/URL].

D. Commenзons !

Habituellement, tout gamemode contient la fonction main qui sera appelйe lors du dйmarrage de la console samp-server.exe. On la construit comme ceci:

PHP Code:
#include <a_samp>
main()
{



Place aux explications. Les parenthиses permettent d'insйrer ce que l'on appelle des paramиtres. La fonction main, de base, ne contient aucun paramиtre.
Tout ce qui se trouvera entre les accolades sera ce que la fonction main devra exйcuter.
Elle exйcutera chaque instruction ligne par ligne par ordre chronologique et laissera entre chaque instruction un temps presque incalculable par nous-mкme.

Par exemple :

PHP Code:
#include <a_samp>
main()
{
    print(
"Je dйmarre ma console !");


Ici, la fonction main exйcutera l'instruction print qui contient la chaоne Je dйmarre ma console !.
L'instruction print est avant tout une fonction qui permet d'afficher un message dans la console, mais sans aucun argument derriиre,
contrairement а la fonction printf qui peut contenir des arguments, voici la diffйrence:

PHP Code:
#include <a_samp>
main()
{
    print(
"Je dйmarre ma console !");
    
printf("%s""Je dйmarre ma console !");


Ici, la chaоne de caractиres Je dйmarre ma console ! est passйe en argument grвce а ce qu'on appelle un spйcificateur, qui ici est %s,
autrement dit un spйcificateur qui permet de passer en argument une chaоne de caractиres.
Vous pouvez йgalement passer en argument un entier ou un nombre dйcimal grвce а deux autres spйcificateurs: %i et %f :

PHP Code:
#include <a_samp>
main()
{
    
printf("%i"10);
    
printf("%f"10.10);


Les spйcificateurs sont trиs pratiques si vous souhaitez dynamiser des valeurs, notamment grвce aux opйrations d'addition, de soustraction, de division ou de multiplication. Il en existe d'autres que je vous prйsenterai dans un prochain tutoriel.
Je vais donc vous parler avant tout des variables.

E. Les variables

Une variable est un йlйment dans lequel nous pouvons stocker une donnйe et la faire varier а tout moment.
Nous notons plusieurs types de variables telles que les variables qui peuvent contenir entier/caractиres,
les variables flottantes qui contiennent des dйcimaux et les variables boolйennes qui ne retournent que vrai ou faux.
On peut les distinguer comme ceci:

PHP Code:
#include <a_samp>
new Entier 10;
new 
Chaine[4] = "Dix";
new 
Float:Decimal 10.0;
new 
bool:Vrai true;
new 
bool:Faux false

Tout d'abord, en Pawn, peu importe le type de variable, celle-ci sera toujours prйcйdйe de new qui permet de dйclarer la variable.

La variable Entier contient la donnйe stockйe qui est la valeur 10.

La variable Chaine contient la donnйe stockйe qui est une chaоne de 3 caractиres. Ce fameux [4] s'appelle un tableau.
En effet, en Pawn, une variable qui contient une chaоne de caractиres doit obligatoirement кtre suivie d'un tableau,
qui est tout simplement le nombre de caractиres stockйs dans la variable mais йgalement le nullbyte qui est 1.
Le nullbyte, en Pawn, doit кtre ajoutй aux tableaux des chaоnes de caractиres pour dire
au compilateur de s'arrкter un pas aprиs le dernier caractиre, sinon il s'arrкterait un pas avant
.

Ce que vous voyez avant la variable Demical s'appelle un tag.
En effet, ce tag permet de dйclarer une variable de type dйcimale,
qui stockera une donnйe de valeur dйcimale (chiffres aprиs la virgule plus simplement).
Une variable qui contient une valeur dйcimale doit toujours кtre prйcйdйe du tag float.

Les variables Vrai et Faux sont appelйes des boolйennes.
En effet, elles ne peuvent retourner que true ou false, soit vrai ou faux.
Elles peuvent йgalement retourner des valeurs (si supйrieure а 0, alors la variable retournera true, si йgale а zйro, alors elle retournera false).

Il existe d'autres variables telles que les constantes ou statiques que j'expliquerai dans un autre tutoriel.

J'en reviens donc а ma fonction printf, dans laquelle je peux directement insйrer mes variables :

PHP Code:
#include <a_samp>
main()
{
    new 
Entier 10;
    new 
Chaine[4] = "Dix";
    new 
Float:Decimal 10.0;
    
printf("%i %s %f"EntierChaineDecimal);


On ne passe gйnйralement que trиs rarement une variable boolйenne en argument, car celle-ci est plus utilisйe pour ce que l'on appelle des conditions, dont je vais vous parler juste aprиs.

Finissons cette partie sur les opйrations. En effet, l'utilisation d'une variable permet de faire varier une donnйe а tout moment. Nous pouvons donc incrйmenter une variable :

PHP Code:
#include <a_samp>
main()
{
    new 
Entier 10;
    
printf("%i"Entier);
    
Entier += 10;
    
printf("%i"Entier);


Ici, nous incrйmentons la variable Entier de 10 grвce а une addition. On l'affiche juste aprиs car souvenez-vous : Le compilateur va exйcuter les instructions par ordre chronologique.

Nous pouvons soustraire, multiplier ou bien diviser :

PHP Code:
#include <a_samp>
main()
{
    new 
Entier 10;
    
printf("%i"Entier);
    
Entier += 10// Addition
    
Entier -= 10// Soustraction
    
Entier 10// Multiplication
    
Entier 10// Division
    
printf("%i"Entier);


F. Les conditions

Une condition va nous permettre de comparer plusieurs donnйes, notamment grвce aux dйclarations if, else, else if et bien d'autres que nous verrons dans d'autres tutoriels.

Commenзons par effectuer une comparaison trиs simple grвce а notre variable Entier:

PHP Code:
#include <a_samp>
main()
{
    new 
Entier 10;
    if(
<= Entier <= 10// Si Entier est plus grand ou йgal а 0 et plus petit ou йgal а 10.
    
{
        
printf("Variable Entier comprise entre 0 et 10. Valeur : %i"Entier);
    }
    else if(
10 &ltEntier <= 20// Si Entier est strictement supйrieur а 10 et plus petit ou йgal а 20.
    
{
         
printf("Variable Entier strictement supйrieure а 10 et infйrieure ou йgale а 20. Valeur : %i"Entier);
    }
    else 
// Si aucune des conditions n'est vraie.
    
{
        print(
"Variable Entier ni comprise entre 0 et 10 ou entre 10 et 20.");
    }


La variable Entier est dйclarйe comme Integer (entier) et stocke comme valeur 10.
Ici, nous sommes en prйsence de trois dйclarations: if, else if et else.
Elles permettent pourtant toutes de comparer des donnйes mais ne jouent pas dans le mкme ordre.
Il faut savoir que else ne sera jamais placй avant if. else if ne sera jamais placй avant if non plus.
Le code donne "si [...] ou alors que si [....] sinon [...]".

Il existe plusieurs types de conditions:

PHP Code:
#include <a_samp>
new 1;
new 
Float:1.1;
if(
== y// si x est йgal а y
if(!= y// si x n'est pas йgal а y
if(&gty// si x est strictement supйrieur а y
if(>= y// si x est supйrieur ou йgal а y
if(&lty// si x est strictement infйrieur а y
if(<= y// si x est infйrieur ou йgal а y
if(== || == 1.1// si x est йgal а 1 et si y est йgal а 1.1 

J'ai dйclarй ici deux variables; un Entier et un Flottant. De base, y est plus grand que x.
Pourtant, chacune de ces conditions va vйrifier une chose bien diffйrente.
Passons maintenant aux callbacks !

G. Les callbacks

Une callback est en rйalitй comparable а une fonction que vous allez appeler а un moment prйcis dans votre programme.
Elle dйtermine une suite d'instructions а exйcuter lors de son appel.
Voici comment se construit une callback manuelle (les callbacks que j'appelle "automatiques" sont celles de base de SA:MP):

PHP Code:
#include <a_samp>
forward Connexion(playerid);
public 
Connexion(playerid)
{
    return 
true;


forward et public sont des Initialisers. Sachez que lorsque vous crйez une callback dans votre mode,
celle-ci devra avant tout кtre dйfinie par forward avec ses mкmes paramиtres (qui ici est seulement playerid).
Ce fameux return true signifie que la callback Connexion retournera toujours vrai, les instructions y seront donc exйcutйes correctement.
Vous pouvez retourner faux dans votre callback avec une condition:

PHP Code:
#include <a_samp>
forward Connexion(playerid);
public 
Connexion(playerid)
{
    new 
Entier 10;
    if(
Entier != 10)
    {
        return 
false;
    }
    return 
true;


Je peux maintenant appeler ma callback Connexion dans la callback de base de SA:MP OnPlayerSpawn:

PHP Code:
#include <a_samp>
public OnPlayerSpawn(playerid)
{
    
Connexion(playerid);
    return 
1;


Pour finir, apprenons а commenter nos instructions:

H. Le commentaire d'instructions

J'ai commentй plusieurs fois certaines instructions dans mon tutoriel comme ceci:

PHP Code:
#include <a_samp>
// Je commente ! 

En effet, ce systиme est trиs utilisй. Il sert parfois а dйcrire quelque chose.
Il faut que vous sachiez que le compilateur n'exйcutera jamais un commentaire, ce pourquoi il est si utile.
Il existe plusieurs maniиres de commenter, lignes par lignes ou alors en bloc directement comme ceci:

PHP Code:
#include <a_samp>
// Premier commentaire
// Second commentaire
/* 
Premier commentaire
Second commentaire
*/ 

Ce tutoriel est а prйsent terminй.
J'accepte toute critique mais seulement а partir du moment oщ celle-ci est constructive.
Ce tutoriel est assez court, mais ce n'est que notre premiиre partie.
Je vous remercie d'avoir pris le temps de me lire, а trиs vite ![/SIZE]
[/CENTER]
Reply
#2

Jolie tutoriel !
Reply
#3

zetano;3605671 Wrote:Jolie tutoriel !

Merci а toi ! ;)
Reply
#4

MERCI !
Reply
#5

C'est plutфt expert tout зa, tu n'expliques pas ce qu'est bool, float et d'autres termes.
Merci pour ce tutoriel.
Reply
#6

Pas mal pas mal !

Juste quelques dйtails, tu йcris ceci :
PHP Code:
new float:Decimal 

Sauf que, le tag "float:" prend un "F" majuscule, c'est trиs important, sinon bonjour les tag mismatch dans les fonctions comme printf etc.

Ensuite tu emploies le terme "callback" en utilisant forward et public, mais tu devrais plutфt parler de fonctions publiques. En plus de зa, tu aurais aussi dы parler des fonctions basiques.

Et donc, comparer les deux types de fonctions pour dйcrire leurs diffйrences.
Par exemple, une fonction publique est enregistrйe dans la mйmoire et peut donc кtre utilisйe dans des fonctions comme funcidx, CallLocalFunction etc.
Ou alors, une fonction basique peut contrairement а une fonction publique retourner des tableaux ou chaоnes de caractиres, elle peut aussi avoir des valeurs par dйfaut en paramиtre etc.
Reply
#7

Yaniii;3605691 Wrote:MERCI !

Pas de quoi ;)

Herka;3605693 Wrote:C'est plutфt expert tout зa, tu n'expliques pas ce qu'est bool, float et d'autres termes.
Merci pour ce tutoriel.

J'ai parfaitement expliquй ce que c'йtait ;)

Dutheil;3605695 Wrote:Pas mal pas mal !

Juste quelques dйtails, tu йcris ceci :
PHP Code:
new float:Decimal 

Sauf que, le tag "float:" pour un "F" majuscule, c'est trиs important, sinon bonjour les tag mismatch dans les fonctions comme printf etc.

Ensuite tu emploies le terme "callback" en utilisant forward et public, mais tu devrais plutфt parler de fonctions publiques. En plus de зa, tu aurais aussi dы parler des fonctions basiques.

Et donc, comparer les deux types de fonctions pour dйcrire leurs diffйrences.
Par exemple, une fonction publique est enregistrйe dans la mйmoire et peut donc кtre utilisйe dans des fonctions comme funcidx, CallLocalFunction etc.
Ou alors, une fonction basique peut contrairement а une fonction publique retourner des tableaux ou chaоnes de caractиres, elle peut aussi avoir des valeurs par dйfaut en paramиtre etc.

Je m'excuse pour cette grande erreur, c'est corrigй, merci а toi !
Il est vrai que je suis allй un peu vite niveau callbacks mais j'ai expliquй ce que je savais, aprиs tu m'apprend un truc donc merci а toi ;)
Reply
#8

Trиs bon tutoriel. ;) Sympa de ta part de contribuй a la communautй sa:mp.
Reply
#9

alex46400;3605728 Wrote:Trиs bon tutoriel. ;) Sympa de ta part de contribuй a la communautй sa:mp.

C'est un immense plaisir ;)
Reply
#10

Bravo, tu aurais pu complйter quelques fois mais c'est dйjа bien !
Reply
#11

Buthers, envoie-moi ton Skype en privй ou ajoute-moi, j'ai un truc qui te plaira surement !
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)