Bon, je vais me coucher tard avec tout ça, mais voilà un exemple de ce que tu peux faire :
Code : Tout sélectionner
; Hit Me !!!
; Simili bataille navale
; ©.2010 TazNormand aka "il était temps que tu te serves de PB"
; Pas de procedures pour ne pas compliquer la compréhension
; les "bateaux" sont représentés par un gadget bouton sans label (texte), il ne font qu'un bouton de large/haut
; un bouton enfoncé le reste (désactivé)
; si un bateau se trouve sous le bouton enfoncé, le bouton voit un X dans son label
; quand tout les bateaux ont été trouvé et/ou que tous les boutons ont été cliqués ==> fin du jeu
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;
;- Gadget Constants
;
Enumeration
#Button_01 =1
#Button_02
#Button_03
#Button_04
#Button_05
#Button_06
#Button_07
#Button_08
#Button_09
#Button_10
#Button_11
#Button_12
#Button_13
#Button_14
#Button_15
#Button_16
#Button_17
#Button_18
#Button_19
#Button_20
#Button_21
#Button_22
#Button_23
#Button_24
#Button_25
#Text_1
#Text_2
#Text_3
#Text_4
#Text_5
#Text_A
#Text_B
#Text_C
#Text_D
#Text_E
#Text_NbTouch
#Text_NbRest
#Text_NbCoup
#Text_LbT
#Text_LbR
#Text_LbC
#Titre_Fenetre
EndEnumeration
Procedure Ouvre_Fenetre()
If OpenWindow(#Titre_Fenetre, 340, 65, 184, 240, "Hit Me !!!", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
ButtonGadget(#Button_01, 45, 35, 20, 20, "")
ButtonGadget(#Button_02, 70, 35, 20, 20, "")
ButtonGadget(#Button_03, 95, 35, 20, 20, "")
ButtonGadget(#Button_04, 120, 35, 20, 20, "")
ButtonGadget(#Button_05, 145, 35, 20, 20, "")
ButtonGadget(#Button_06, 45, 60, 20, 20, "")
ButtonGadget(#Button_07, 70, 60, 20, 20, "")
ButtonGadget(#Button_08, 95, 60, 20, 20, "")
ButtonGadget(#Button_09, 120, 60, 20, 20, "")
ButtonGadget(#Button_10, 145, 60, 20, 20, "")
ButtonGadget(#Button_11, 45, 85, 20, 20, "")
ButtonGadget(#Button_12, 70, 85, 20, 20, "")
ButtonGadget(#Button_13, 95, 85, 20, 20, "")
ButtonGadget(#Button_14, 120, 85, 20, 20, "")
ButtonGadget(#Button_15, 145, 85, 20, 20, "")
ButtonGadget(#Button_16, 45, 110, 20, 20, "")
ButtonGadget(#Button_17, 70, 110, 20, 20, "")
ButtonGadget(#Button_18, 95, 110, 20, 20, "")
ButtonGadget(#Button_19, 120, 110, 20, 20, "")
ButtonGadget(#Button_20, 145, 110, 20, 20, "")
ButtonGadget(#Button_21, 45, 135, 20, 20, "")
ButtonGadget(#Button_22, 70, 135, 20, 20, "")
ButtonGadget(#Button_23, 95, 135, 20, 20, "")
ButtonGadget(#Button_24, 120, 135, 20, 20, "")
ButtonGadget(#Button_25, 145, 135, 20, 20, "")
TextGadget(#Text_1, 20, 35, 20, 20, "1", #PB_Text_Center | #PB_Text_Border)
TextGadget(#Text_2, 20, 60, 20, 20, "2", #PB_Text_Center | #PB_Text_Border)
TextGadget(#Text_3, 20, 85, 20, 20, "3", #PB_Text_Center | #PB_Text_Border)
TextGadget(#Text_4, 20, 110, 20, 20, "4", #PB_Text_Center | #PB_Text_Border)
TextGadget(#Text_5, 20, 135, 20, 20, "5", #PB_Text_Center | #PB_Text_Border)
TextGadget(#Text_A, 45, 15, 20, 20, "A", #PB_Text_Center | #PB_Text_Border)
TextGadget(#Text_B, 70, 15, 20, 20, "B", #PB_Text_Center | #PB_Text_Border)
TextGadget(#Text_C, 95, 15, 20, 20, "C", #PB_Text_Center | #PB_Text_Border)
TextGadget(#Text_D, 120, 15, 20, 20, "D", #PB_Text_Center | #PB_Text_Border)
TextGadget(#Text_E, 145, 15, 20, 20, "E", #PB_Text_Center | #PB_Text_Border)
TextGadget(#Text_LbT, 25, 165, 95, 20, "Bateaux Touchés :")
TextGadget(#Text_LbR, 25, 190, 95, 20, "Bateaux Restants :")
TextGadget(#Text_LbC, 25, 215, 95, 20, "Nombre de coups :")
TextGadget(#Text_NbTouch, 125, 165, 35, 20, "", #PB_Text_Border)
TextGadget(#Text_NbRest, 125, 190, 35, 20, "", #PB_Text_Border)
TextGadget(#Text_NbCoup, 125, 215, 35, 20, "", #PB_Text_Border)
EndIf
EndProcedure
; Structures
Structure Bateau
Numero.b ; N° du bateau
Abscisse.b ; Coordonnées horizontales (A,B,C,D ou E)
Ordonnee.b ; Coordonnées verticales (1,2,3,4 ou 5)
EndStructure
; Ouverture de l'écran
ecran=Ouvre_Fenetre()
; Variables
Dim Barques.Bateau(5) ; Représente nos bateaux sur la grille, du type Bateau qu'on a défini ci-dessus
Dim Grille.b(5,5) ; Représente la grille, qi nous permettra de savoir s'il y a un bateau en x,y
; C'est la que tout commence vraiment
Debut:
NbCoup.b=0 ; Nombre de coups joués
NbTouche.b=0 ; Nombre de coups gagnés
NbReste.b=5 ; Nombre de cases gagnantes restant à trouver, 25 au début
PosX.b=0 ; Position X et Y aléatoires
PosY.b=0
i.b=0 ; variable compteur
j.b=0 ; variable compteur
bat.b=1 ; variable compteur
; Initialiser la grille
For i=1 To 5
For j=1 To 5
Grille(i,j)=0
Next j
Next i
; Générer aléatoirement la position de 5 "bateaux" sur la grille
While Not bat>5 ; Tant que bat n'est pas > 5
Barques(bat)\Numero=bat ; Comme on boucle 5 fois de 1 en 1, on affecte la valeur de "bat" à notre n° de barque
PosX=Random(4)+1 ; Position en X aléatoire sur la grille (+1 au cas ou on aurait 0)
PosY=Random(4)+1 ; Position en Y aléatoire sur la grille (+1 au cas ou on aurait 0)
; Tester si la place n'est pas déjà prise
If Grille(PosX,PosY)=0 ; Rien à cet endroit, on affecte la position à un bateau
Barques(bat)\Abscisse=PosX
Barques(bat)\Ordonnee=PosY
grille(PosX,PosY)=1 ; On "marque" la grille comme occupée à cet endroit
bat+1 ; et on passe au bateau suivant en incrémentant bat de 1
EndIf
; Pas de else dans ce cas, car on recommence tant que la place est occupée
Wend
; On a nos 5 bateaux de positionnés, on peut attaquer la partie intéressante
SetGadgetText(#Text_NbTouch,"0")
SetGadgetText(#Text_NbCoup,"0")
SetGadgetText(#Text_NbRest,"5")
; Boucler tant qu'on a pas trouvé tous les bateaux et/ou qu'il ne reste plus de case à "cocher"
Repeat
evenement=WaitWindowEvent() ; attendre un évenement type clic sur bouton
Select evenement
Case #PB_Event_Gadget
QuelGadget=EventGadget()
; Incrémenter le nombre de coups
NbCoup+1
; astuce : on sait que nos gadgets(boutons) sont répertoriés de 1 à 25 (cf énumération)
; on va donc se servir de cela pour tester si le bouton "cache" un bateau
; Pour les Pos X, faire un module (%) du n° de gadget par 5
BtnX=QuelGadget % 5
If BtnX = 0 ; si le modulo donne 0, alors on est sur la 5eme colonne (la colonne E)
BtnX=5
EndIf
; Pour les pos Y, il faut tester en fonction du n° de gadget
Select QuelGadget
Case 1 To 5
BtnY=1
Case 6 To 10
BtnY=2
Case 11 To 15
BtnY=3
Case 16 To 20
BtnY=4
Case 21 To 25
BtnY=5
EndSelect
If Grille(BtnX,BtnY)=1
; Touché !!! On incrémente le nb de touché, on décrémente le nb de coups restants
; On inscrit un X
NbTouche+1
NbReste-1
SetGadgetText(QuelGadget,"X")
SetGadgetText(#Text_NbTouch,Str(NbTouche))
SetGadgetText(#Text_NbRest,Str(NbReste))
EndIf
; Dans tous les cas on le désactive
DisableGadget(QuelGadget,1)
SetGadgetText(#Text_NbCoup,Str(NbCoup))
;Case #PB_Event_CloseWindow
;Select EventWindow()
;Case 1
;CloseWindow(1)
;Break
;EndSelect
EndSelect
Until evenement=#PB_Event_CloseWindow Or NbTouche=5
If Nbcoup<25 ; Gagné sans avoir découvert toutes les cases
msg=MessageRequester("Gagné !!!","Bravo, vous avez décimé la flotte ennemie, Rejouer ?",#PB_MessageRequester_YesNo)
Else
msg=MessageRequester("Perdu !!!","Vous avez été obligé de cliquer sur toutes les cases, Rejouer ?",#PB_MessageRequester_YesNo)
EndIf
If msg=#PB_MessageRequester_Yes
; Remettre tous les boutons à leur état initial
For i=1 To 25
DisableGadget(i,0)
SetGadgetText(i,"")
Next i
Goto Debut
EndIf
; Sinon on se casse
CloseWindow(#Titre_Fenetre)
End