[TUTO] Les Tableaux : Jeu des 3 cartes
Publié : mer. 02/juin/2004 13:50
Voici un mini tutoriel pour partager mon expérience et vous monter comment il peut être pratique et simple d'utiliser des tableaux.
Dans ce mini tuto, le but va être de faire un petit algorithme pour préparer la création d'un jeu bien connu : Le jeu des trois cartes.
Le but ici n'est pas de vous montrer comment faire le jeu ou de vous donner un jeu dans son intégralité, mais de vous montrer comment gérer un aspect particulier de ce jeu.
Bon, déjà qu'est ce que le jeu des trois cartes ? Il s'agit d'un jeu simple de hasard. Trois cartes se présentent à vous face cachée. Le but sera de trouver parmi les trois cartes où est la Dame de Coeur. Un jeu archi connu, mais qui présente un aspect intéressant concernant la programmation de tirage de carte.
Nous allons nous pencher ici sur le tirage aléatoire des cartes. On pourrait utiliser ici 32 cartes et demander au programme de tirer trois carte et de faire deviner au joueur où est une des trois cartes.
Pour simplifier nous allons partir du principe que nous aurons toujours les trois même cartes. Vous pourrez alors vous concentrer sur l'aspect "tirage aléatoire" du jeu. Comme je l'ai dit au départ, le but n'est pas de vous montrer comment faire le jeu, mais de vous expliquer un algorithme possible pour le tirage des cartes.
Donc Nous avons trois cartes différentes. Que doit il se passer :
1°) l'ordinateur devra mélanger les cartes
2°) Il devra choisir la première, puis la seconde et la troisième en faisant attention de ne pas mettre de doublon. (bah oui, le but est d'avoir à chaque tirage trois cartes différentes, mêmes si au départ on a trois cartes différentes dans le jeu, quand l'ordinateur va faire le tirage, il faut qu'il comprenne qu'il ne doit pas tirer une carte déjà tirée auparavant).
C sur cet aspect que nous allons travailler. Comment faire comprendre à l'ordinateur qu'il a trois cartes différentes, et qu'il doit obligatoirement tirer chaque carte dans un ordre différent à chaque fois et surtout sans doublon.
Pour cela, nous allons utiliser trois tableaux. Attention, ce code n'est peut être pas le plus optimisé mais il permettra à quelques un de comprendre comment ca marche.
Commençons le tutorial tout de suite.
1°) Créer un nouveau fichier Source Purebasic vide. Et commencez par mettre ceci au début du code :
Petit rappel : Au début du programme il faut initialiser les composants du programme à savoir, l'utilisation des sprites, le clavier, la souris, le son...
UsePNGImageDecoder() nous permet d'utiliser des images au format PNG.
Continuons, nous allons maintenant déclarer les constantes et variables dont nous aurons besoin. Ajoutez ceci au code :
Nous commençons par déclarer la variable qui nous servira à la création de la fenêtre principale. Ensuite trois constantes qui représenteront en fait nos trois cartes. Je vous rappelle qu'en Purebasic, chaque sprite est défini par une constante. Au lieu d'utiliser des chiffres directement dans nos instructions, nous donnons à chaque chiffre représentant un sprite un nom. Ici Obj1, Obj2 et Obj3 rien de bien compliqué.
Créons notre fenêtre principale :
Petites instructions toute simple, on paramètre le taux de rafraichissement à 60 et on crée la fenêtre avec OpenScreen. Si jamais le programme n'arrive pas à créer la fenêtre on renvoie un message d'erreur.
Rentrons maintenant dans le vif du sujet. Nous voulons faire notre petit jeu des trois cartes. Pour simplifier un peu plus, et pour se concentrer uniquement sur le code et pas les graphismes, j'ai utiliser trois images qui représente chacune un carré bleu, un carré rouge, et un carré vert. Ces carrés représenteront nos cartes et nous permettront de bien comprendre.
Vous pouvez créer ces graphismes primaires avec n'mporte quel logiciel de dessin. Utilisez le format PNG dans notre exemple.
Parfait, nous avons nos trois images, nous allons maintenant les initialiser par le programme, et les charger :
Rien de difficile ici, on charge les images en leur attribuant à chacun une des constantes que nous avons déclarées en début de programme. Pour se repérer nous avons opté pour des noms significatifs.
Et c'est là que nous commençons à coder notre petit algorithme de tirage au sort des trois cartes. Ajoutez ceci :
Ici nous déclarons un tableau à une dimension qui aura trois case. Il faut savoir que dans Purebasic, la première case d'un tableau est numérotée 0, puis 1 et puis 2, ce qui fait trois cases. L'instruction DIM permet de déclarer le tableau. Ensuite nous remplissons chaque case du tableau avec les trois cartes. Ce qui donne au final, un tableau qui réunit dans une case, une des trois cartes. Il s'agit en fait d'une sorte de tiroir de rangement, c'est ici que le programme piochera au hasard une des cartes. C'est notre shémas de départ.
Ajoutez maintenant :
Ici, nous créons un second tableau. Celui ci respecte le même shémas que le premier (donc trois cases). Il permettra de savoir au programme si la carte qu'il a choisi a déjà été utilisé et donc tiré. Le tableau est initialisé par une boucle FOR NEXT qui remplit chaque case du tableau avec une valeur 0. Ce qui signifie que lorsque nous lancerons le programme, si la case qu'il regarde est à 0 c'est que la carte est disponible, si c'est à 1 le carte aura été utilisée et il faudra au programme en tirer une autre. Donc ici pour le moment et au début du programme tout est à 0.
Voici maintenant la plus importante partie du programme, ajoutez ceci :
Ici nous créons notre troisième tableau Obj_Al (pour Objet Aléatoire) qui aura également les même dimensions que les précédent. Il s'agira de notre tableau final autrement dit ce que l'ordinateur aura pioché.
La boucle FOR NEXT s'occupe maintenant de la partie aléatoire du jeu.
Nous initialisons la boucle avec X allant de 0 à 2 (pour les trois cases). Tout de suite après suis une autre boucle Repeat Until avec l'instruction Random. En fait le programme va tirer un nombre au hasard allant de 0 à 2. Ensuite il test si la valeur qu'il a pris au hasard n'est pas déjà prise dans le tableau Etat. Si c'est le cas il tire à nouveau un nombre au hasard. Sinon il passe à la suite des instructions.
Ex : Admettons que notre programme tire le nombre 1. Il va regardé dans le tableau Obj_Etat case 1 quelle est la valeur. Si la valeur est égale à 0 il continue ca veut dire que le numero n'a pas été tiré, sinon il recommence un tirage.
Donc si la carte (ou le numéro dans le code) n'a pas été tiré il continue. A ce moment là il attribue à la première case du tableau Obj_Al la carte qu'il a tiré grâce à Obj_Al(x) = Objets(a) en clair au premier tour de boucle FOR NEXT x sera égal à 0 donc ca sera notre première case du tableau Obj_Al ensuite Il prend la carte tiré dans le tableau Objets que vous avons défini au départ. Par ex si il tire le numéro 1, nous avons dit en début de programme que la case 1 (et donc la seconde) c'était #obj2 soit notre carré bleu.
Le programme va faire ceci jusqu'à qu'il est rempli le tableau Obj_Al et évidemment les trois cartes seront tirées grâce à ce procédé de manière aléatoire et sans doublon.
Il ne nous reste plus qu'à afficher le résultat du tirage, mais là rien de bien difficile : Ajoutez d'un coup :
La variable posx nous permet de faire varier la coordonnée de chaque sprite en X. Ensuite une boucle FOR NEXT pour afficher le résultat du tableau Obj_Al sous forme de sprite.
On rafraichit avec Flipbuffer() et enfin une petite boucle REPEAT UNTIL pour que le programme tourne indéfiniement jusqu'à qu'on appuie sur ECHAP.
Pour bien voir que ca marche lancez le programme plusieurs fois, vous verrez que l'ordre du tirage est toujours différent !
Voilà pour ce petit tut, si il y a des choses pas claires, je me tiens à votre disposition.
Dans ce mini tuto, le but va être de faire un petit algorithme pour préparer la création d'un jeu bien connu : Le jeu des trois cartes.
Le but ici n'est pas de vous montrer comment faire le jeu ou de vous donner un jeu dans son intégralité, mais de vous montrer comment gérer un aspect particulier de ce jeu.
Bon, déjà qu'est ce que le jeu des trois cartes ? Il s'agit d'un jeu simple de hasard. Trois cartes se présentent à vous face cachée. Le but sera de trouver parmi les trois cartes où est la Dame de Coeur. Un jeu archi connu, mais qui présente un aspect intéressant concernant la programmation de tirage de carte.
Nous allons nous pencher ici sur le tirage aléatoire des cartes. On pourrait utiliser ici 32 cartes et demander au programme de tirer trois carte et de faire deviner au joueur où est une des trois cartes.
Pour simplifier nous allons partir du principe que nous aurons toujours les trois même cartes. Vous pourrez alors vous concentrer sur l'aspect "tirage aléatoire" du jeu. Comme je l'ai dit au départ, le but n'est pas de vous montrer comment faire le jeu, mais de vous expliquer un algorithme possible pour le tirage des cartes.
Donc Nous avons trois cartes différentes. Que doit il se passer :
1°) l'ordinateur devra mélanger les cartes
2°) Il devra choisir la première, puis la seconde et la troisième en faisant attention de ne pas mettre de doublon. (bah oui, le but est d'avoir à chaque tirage trois cartes différentes, mêmes si au départ on a trois cartes différentes dans le jeu, quand l'ordinateur va faire le tirage, il faut qu'il comprenne qu'il ne doit pas tirer une carte déjà tirée auparavant).
C sur cet aspect que nous allons travailler. Comment faire comprendre à l'ordinateur qu'il a trois cartes différentes, et qu'il doit obligatoirement tirer chaque carte dans un ordre différent à chaque fois et surtout sans doublon.
Pour cela, nous allons utiliser trois tableaux. Attention, ce code n'est peut être pas le plus optimisé mais il permettra à quelques un de comprendre comment ca marche.
Commençons le tutorial tout de suite.
1°) Créer un nouveau fichier Source Purebasic vide. Et commencez par mettre ceci au début du code :
Code : Tout sélectionner
;Initialisation des composants
InitSprite()
InitKeyboard()
InitMouse()
InitSound()
UsePNGImageDecoder()
UsePNGImageDecoder() nous permet d'utiliser des images au format PNG.
Continuons, nous allons maintenant déclarer les constantes et variables dont nous aurons besoin. Ajoutez ceci au code :
Code : Tout sélectionner
;Initialisation des constantes
;Variables Globales
Global MaFenetre ;Fenêtre principale
;Constantes
#Obj1 = 2
#Obj2 = 3
#Obj3 = 4
Créons notre fenêtre principale :
Code : Tout sélectionner
;Création de la fenêtre principale
SetRefreshRate(60)
MaFenetre = OpenScreen(800,600,32,"Test")
If MaFenetre = 0
MessageRequester("Erreur", "Impossible d'ouvrir une fenêtre DirectX", #PB_MessageRequester_Ok)
EndIf
Rentrons maintenant dans le vif du sujet. Nous voulons faire notre petit jeu des trois cartes. Pour simplifier un peu plus, et pour se concentrer uniquement sur le code et pas les graphismes, j'ai utiliser trois images qui représente chacune un carré bleu, un carré rouge, et un carré vert. Ces carrés représenteront nos cartes et nous permettront de bien comprendre.
Vous pouvez créer ces graphismes primaires avec n'mporte quel logiciel de dessin. Utilisez le format PNG dans notre exemple.
Parfait, nous avons nos trois images, nous allons maintenant les initialiser par le programme, et les charger :
Code : Tout sélectionner
;Initialisation des images
LoadSprite(#Obj1,"rouge.png")
LoadSprite(#Obj2,"bleu.png")
LoadSprite(#Obj3,"vert.png")
Et c'est là que nous commençons à coder notre petit algorithme de tirage au sort des trois cartes. Ajoutez ceci :
Code : Tout sélectionner
;Tableau des cartes
Dim Objets(2)
Objets(0) = #Obj1
Objets(1) = #Obj2
Objets(2) = #Obj3
Ajoutez maintenant :
Code : Tout sélectionner
Dim Obj_Etat(2)
For x = 0 To 2
Obj_Etat(x) = 0
Next x
Voici maintenant la plus importante partie du programme, ajoutez ceci :
Code : Tout sélectionner
Dim Obj_Al(2)
For x = 0 To 2
Repeat
a = Random(2)
Until Obj_Etat(a) = 0
Obj_Al(x) = Objets(a)
Obj_Etat(a) = 1
Next x
La boucle FOR NEXT s'occupe maintenant de la partie aléatoire du jeu.
Nous initialisons la boucle avec X allant de 0 à 2 (pour les trois cases). Tout de suite après suis une autre boucle Repeat Until avec l'instruction Random. En fait le programme va tirer un nombre au hasard allant de 0 à 2. Ensuite il test si la valeur qu'il a pris au hasard n'est pas déjà prise dans le tableau Etat. Si c'est le cas il tire à nouveau un nombre au hasard. Sinon il passe à la suite des instructions.
Ex : Admettons que notre programme tire le nombre 1. Il va regardé dans le tableau Obj_Etat case 1 quelle est la valeur. Si la valeur est égale à 0 il continue ca veut dire que le numero n'a pas été tiré, sinon il recommence un tirage.
Donc si la carte (ou le numéro dans le code) n'a pas été tiré il continue. A ce moment là il attribue à la première case du tableau Obj_Al la carte qu'il a tiré grâce à Obj_Al(x) = Objets(a) en clair au premier tour de boucle FOR NEXT x sera égal à 0 donc ca sera notre première case du tableau Obj_Al ensuite Il prend la carte tiré dans le tableau Objets que vous avons défini au départ. Par ex si il tire le numéro 1, nous avons dit en début de programme que la case 1 (et donc la seconde) c'était #obj2 soit notre carré bleu.
Le programme va faire ceci jusqu'à qu'il est rempli le tableau Obj_Al et évidemment les trois cartes seront tirées grâce à ce procédé de manière aléatoire et sans doublon.
Il ne nous reste plus qu'à afficher le résultat du tirage, mais là rien de bien difficile : Ajoutez d'un coup :
Code : Tout sélectionner
posx = O
For x = 0 To 2
DisplaySprite(Obj_Al(x),posx,10)
posx = posx + 100
Next x
FlipBuffers()
Repeat
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
On rafraichit avec Flipbuffer() et enfin une petite boucle REPEAT UNTIL pour que le programme tourne indéfiniement jusqu'à qu'on appuie sur ECHAP.
Pour bien voir que ca marche lancez le programme plusieurs fois, vous verrez que l'ordre du tirage est toujours différent !
Voilà pour ce petit tut, si il y a des choses pas claires, je me tiens à votre disposition.
