Article     Discussion     Modifier     Historique     Forums     Salon IRC

Les fonctions personnalisées de 3d games creator

Un article de Games Creators Network.


Voici un article sur les fonctions: un des fondements de la programmation, notamment avec 3dgc.

Cet article est un peu difficile pour les novices, mais permet assurément de comprendre des codes sources plus compliqués !

[modifier] Quesako ?

Une fonction (personnalisée), c'est une commande que l'on rajoute à 3d games creator. Celle fournie avec 3dgc sont volontairement très généralistes, mais pour les besoins de votre jeu, vous pouvez en créer d'autres. Je vais prendre ici l'exemple de quelques fonctions qui pourraient être utile d'implanter sur un RPG:

  • load level() cette fonction pourrait charger le niveau de votre jeu.
  • fight() est la fonction qui se déclenche lorsqu'un combat commence.
  • die() est appelée lorsque le joueur meurt
  • save game()
  • load game()
  • etc...

En pratique, les fonctions se placent à la fin de votre code source, entre function nom_fonction() et endfunction. Votre première fonction

Il est temps pour vous de créer votre première fonction: draw menu().

Celle-ci va servir à afficher le menu principal de votre jeu:

function draw_menu()
	center text 320,100,"Nouvelle partie"
	center text 320,120,"Charger une sauvegarde"
	center text 320,140,"Enregistrer la partie"
	center text 320,160,"Quitter"
endfunction

Ligne 1: la déclaration de la fonction: après function on insère le nom de la nouvelle fonction.

Ligne 2 à 5: l'affichage du texte grâce au traditionnel center text, à l'intérieur d'une fonction, on programme totalement normalement.

Ligne 6: fin de la fonction (obligatoire !)

Bien sûr, le programme ne marche pas encore: les fonctions ne font pas partie directement partie du programme donc finalement, c'est comme si vous n'avez rien tapé (à part que maintenant, le programme final aura une fonction en plus en mémoire, mais ça ne sert à rien si on ne l'utilise pas !!)

Nous allons donc en plus de la déclaration faire notre vrai programme:

draw_menu()
function draw_menu()
	center text 320,100,"Nouvelle partie"
	center text 320,120,"Charger une sauvegarde"
	center text 320,140,"Enregistrer la partie"
	center text 320,160,"Quitter"
endfunction

Tiens, ça ne marche pas, ou si, mais une erreur est affichée ?!

Le programme s'est exécuté dans une déclaration de fonction: votre programme a atteint la ligne function et ça il ne faut pas !

Les déclarations de fonctions et le programme central sont deux parties totalement différentes, lorsque le PC lit le programme, il faut l'empêcher d'atteindre celle-ci.

Pour cela, un end suffit. Cette instruction arrête le programme et évite tout bug.

draw_menu()
wait key
end
function draw_menu()
	center text 320,100,"Nouvelle partie"
	center text 320,120,"Charger une sauvegarde"
	center text 320,140,"Enregistrer la partie"
	center text 320,160,"Quitter"
endfunction

Et voilà ! Sâchez qu'un do...loop aurait également très bien convenu.


[modifier] Passage de paramètres

Avant de commancer à parler des paramètres, observez ce code et testez le:

sync on
do
	cls
	if downkey()
		inc choix
		wait 500
	endif
	if upkey()
		dec choix
		wait 500
	endif
	if choix<0 then choix=0
	if choix>3 then choix=3
	draw_menu()
	sync
loop 
function draw_menu()
	center text 320,100,"Nouvelle partie"
	center text 320,120,"Charger une sauvegarde"
	center text 320,140,"Enregistrer la partie"
	center text 320,160,"Quitter"
	text 225,100+(choix*20),"0"
endfunction

Il ne se passe rien...

Pourquoi ? On a pourtant une variable choix qui varie et qui devrait faire bouger le 0 !

En fait, cela nous ramène au problème de portée (cf. article sur les variables et les tableaux).

Les variables dans chaque fonction et dans le programme principal sont différentes les unes des autes même si les variables portent le même nom! choix dans la fonction est donc toujours égal à 0.

Il n'y a donc à priori aucon moyen de communiquer entre le programme principal est les fonctions.

Cela nous mène tout droit au... paramètres ! Ces valeurs entre parenthèses qui suivent une fonction et qui précise son fonctionnement !

Ce code là va marcher:

sync on
do
	cls
	if downkey()
		inc choix
		wait 500
	endif
	if upkey()
		dec choix
		wait 500
	endif
	if choix<0 then choix=0
	if choix>3 then choix=3
	draw_menu(choix)
	sync
loop
function draw_menu(choix2)
	center text 320,100,"Nouvelle partie"
	center text 320,120,"Charger une sauvegarde"
	center text 320,140,"Enregistrer la partie"
	center text 320,160,"Quitter" text 225,100+(choix2*20),"0"
endfunction

Pour bien marquer le différences entre la variable choix de la fonction et celle du programme principal je les ai appelées différemment, mais elles pourraient tout aussi bien s'apeller choix toutes les 2.

Lors de la déclaration de fonction, on précise que l'on doit spécifier un nombre entier et dans le programme principal, on fait en sorte que lors de l'appel de la fonction, le nombre précisé soit égal à choix, tout rentre donc dans l'ordre !

Vous pouvez multiplier ces paramètres, mais la fonction sera plus lourde à comprendre et à utiliser, voici quelques exemples de déclaration (incomplètes) de fonction:

function fct(parametre1,parametre2,parametre3)
function fct(parametre1#)
function fct(parametre1$)
function fct(parametre1#,parametre2$,parametre3,parametre4#)

Vous l'aurez compris tout est possible et grâce aux signes # et $ on peut également passer en paramètre des nombres réels et des chaines.

[modifier] Les résultats

Les fonctions peuvent également (et surtout !) servir à faire des calculs:

a=addition(5,3)
print a
print multiplication(12,3)
print addition(multiplication(5,2),a)
wait key
end
function addition(a,b)
	res=a+b
endfunction res
function multiplication(a,b)
	result=a*b
endfunction result

Vous le voyez, il suffit de préciser après endfunction une valeur ou une variable pour qu'elle soit renvoyée.

Ainsi, vous pouvez très bien intégrer vos fonctions à un if...then, afficher son résultat ou l'enregistrer.


Voilà ! J'espère que cet article vous aura permis de comprendre plus précisément ce qu'est une fonction et comment l'utiliser.

Je précise par contre, pour ceux qui connaitrait d'autres langages, qu'avec 3dgc que les fonctions personnalisées ne peuvent ni posséder des paramètres facultatifs, ni surcharger d'autres fonctions personnalisées ou pas.

Note: pour sortir en urgence d'une fonction, utilisez exitfunction result où result est le résultat renvoyé (paramètre facultatif).

Ce document a été publié sur la version 3 du G.C.N. par MrCool.

  • Auteur Original : MrCool
  • Date de publication : 31 Juillet 2002

 

Rechercher
Installer l'extension de recherche Plus d'informations

 

Comprendre
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

 

Partager
La connaissance est la seule chose qui s'accroit lorsqu'on la partage. - Sacha Boudjema

 

Créer
L'imagination est plus importante que la connaissance. - Albert Einstein

 

 

Le wiki en images Le wiki en images Image du mois: «Snowball: un prototype de jeu développé avec NeL.