Tableau
Re: Tableau
Je vais regarder a quoi correspond les cases dans l'IDE (j'ai pas encore vu ca dans mon tuto et je crois pas qu'il y est ^^)
Au passage, je tourné avec le tuto de tripamort
Et le message en boucle donc il s'affiche pas... ok
Au passage, je tourné avec le tuto de tripamort
Et le message en boucle donc il s'affiche pas... ok
- TazNormand
- Messages : 1297
- Inscription : ven. 27/oct./2006 12:19
- Localisation : Calvados (14)
Salut
un case, cela te permet de tester plusieurs possibilités de valeurs d'une variable.
Prenons un exemple de test de variable contenant un animal, en "français" cela se traduit par :
Traduisible en Purebasic par :
Concernant ton code, enfin plutôt celui du Soldat Inconnu, il marche bien, j'ai bien le messagerequester "dans l'eau" compte tenu que tu teste la valeur du tableau en (0,0) et que tu as affecté au tableau en (1,1)
un case, cela te permet de tester plusieurs possibilités de valeurs d'une variable.
Prenons un exemple de test de variable contenant un animal, en "français" cela se traduit par :
Code : Tout sélectionner
variable Animal type chaîne
variable Cri type chaîne
SELON valeur de "Animal"
CAS où Animal égal à "Chien"
Cri = "Ouaf"
CAS où Animal égal à "Chat"
Cri = "Miaouh"
CAS où Animal égal à "Canard"
Cri = "Coin"
CAS où Animal égal à Autre Chose
Cri = "???"
FIN_SELON
Code : Tout sélectionner
Dim Animal.s
Dim Cri.s
Select Animal
Case "Chien"
Cri = "Ouaf"
Case "Chat"
Cri = "Miaouh"
Case "Canard"
Cri = "Coin"
Default
Cri = "???"
EndSelect
Re: Tableau
Ok ok merci bien, je vais tester ca quand j'aurais le temps et je vous redirais, merci encore
(par contre je sens que j'aurais encore d'autre problèmes lol pas aussi simple que je ne le pensais, comme quoi faut pas se fier aux apparences !!!)

(par contre je sens que j'aurais encore d'autre problèmes lol pas aussi simple que je ne le pensais, comme quoi faut pas se fier aux apparences !!!)
Re: Tableau
rholala ça sent le cochon grillé à une minute près LSI
Juste parce que j'ai rempli le Case 2 chuis sûr

Juste parce que j'ai rempli le Case 2 chuis sûr

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
- TazNormand
- Messages : 1297
- Inscription : ven. 27/oct./2006 12:19
- Localisation : Calvados (14)
Re: Tableau
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
Re: Tableau
Pas de procédures pour ne pas compliquer la compréhension, c'est quoi ce petit procédure alors ?
Perso, j'essaie avec les tableaux histoire de comprendre un peu le stockage de données
Voici mon code actuel
Après il faut que je m'occupe de la relation boutton et tableau et les tests etc...
Mais ton code Taznormand, c'est pas de la POO ?

Perso, j'essaie avec les tableaux histoire de comprendre un peu le stockage de données

Voici mon code actuel
Code : Tout sélectionner
;****************************
;*** Bataille navale v0.2 ***
;****************************
;Initialisation des variables
#Taille_bouton = 100
a = 1
b = 1
Colonegadget = 0
Lignegadget = 0
Numerogadget = 1
IDgadget = 0
x = 5
y = 5
;Création du tableau
Dim grille1.b(x,y)
;Affectation des bateaux
grille1(0,0) = 1
grille1(4,4) = 1
OpenWindow(1,0,0,(#Taille_bouton+10)*x+10,(#Taille_bouton+10)*y+10,"Champ de bataille",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered)
;Création des 25 gadgets
For b=1 To y
For a=1 To x
ButtonGadget(Numerogadget,(#Taille_bouton+10)*Lignegadget+10,(#Taille_bouton+10)*Colonegadget+10,#Taille_bouton,#Taille_bouton,"")
Lignegadget = Lignegadget + 1
Numerogadget = Numerogadget + 1
Next a
Colonegadget = Colonegadget + 1
Lignegadget = 0
Next b
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
CloseWindow(1)
Mais ton code Taznormand, c'est pas de la POO ?
- TazNormand
- Messages : 1297
- Inscription : ven. 27/oct./2006 12:19
- Localisation : Calvados (14)
Re: Tableau
Oui, c'est vrai qu'il y a une procédure, celle générée par l'éditeur visuel.
Et non, c'est pas franchement de la Programmation Orientée Objet, mais du bon vieux code procédurale (sans procédure
)
Il faut savoir qu'un programme avec des goto/gosub/return à l'ancienne est dit abusivement procédural, c'est à dire qu'on des "espèces" de procédures/sous-programmes.
vas jeter un oeil ici pour connaître les différents type de programmation : Wikipedia La programmation
Et non, c'est pas franchement de la Programmation Orientée Objet, mais du bon vieux code procédurale (sans procédure

Il faut savoir qu'un programme avec des goto/gosub/return à l'ancienne est dit abusivement procédural, c'est à dire qu'on des "espèces" de procédures/sous-programmes.
vas jeter un oeil ici pour connaître les différents type de programmation : Wikipedia La programmation
Re: Tableau
Voilà je l'ai finis !!!
Bon aspect graphique c'est pas le top c'est vrai
Manque plus que le placement des bateaux et d'un mode deux joueurs :p
http://www.mediafire.com/?zjymzt0i22n

Bon aspect graphique c'est pas le top c'est vrai

Manque plus que le placement des bateaux et d'un mode deux joueurs :p
http://www.mediafire.com/?zjymzt0i22n
Re: Tableau
Salut à tous !!!!
Ma petite bataille navale avance petit à petit. Je travaille actuellement le placement aléatoire des bateaux.
J'ai fait ca pour placer 4 bateaux : un de 2, deux de 3 et un de 4.
Mais j'ai la mauvaise impression que certain bateaux s'emboitent et que mon code est quelque peu... minable, je pense que j'aurai pu faire avec des boucles, histoire que ca soit plus clair et plus simple.
Alors la question qui se pose, ai-je bien fait avec mon code actuel ? Comment auriez-vous fait ?
PS : les debug o sont pour un test perso
Ma petite bataille navale avance petit à petit. Je travaille actuellement le placement aléatoire des bateaux.
Code : Tout sélectionner
m = Random(x-3)
n = Random(y-3)
o = Random(10)
Debug o
grille1(m,n) = 4
If o > 4
grille1(m,n+1) = 4
grille1(m,n+2) = 4
grille1(m,n+3) = 4
Else
grille1(m+1,n) = 4
grille1(m+2,n) = 4
grille1(m+3,n) = 4
EndIf
m = Random(x-2)
n = Random(y-2)
o = Random(10)
Debug o
grille1(m,n) = 3
If o > 4
grille1(m,n+1) = 3
grille1(m,n+2) = 3
Else
grille1(m+1,n) = 3
grille1(m+2,n) = 3
EndIf
m = Random(x-2)
n = Random(y-2)
o = Random(10)
Debug o
grille1(m,n) = 2
If o > 4
grille1(m,n+1) = 2
grille1(m,n+2) = 2
Else
grille1(m+1,n) = 2
grille1(m+2,n) = 2
EndIf
m = Random(x-1)
n = Random(y-1)
o = Random(10)
Debug o
grille1(m,n) = 1
If o > 4
grille1(m,n+1) = 1
Else
grille1(m+1,n) = 1
EndIf
Mais j'ai la mauvaise impression que certain bateaux s'emboitent et que mon code est quelque peu... minable, je pense que j'aurai pu faire avec des boucles, histoire que ca soit plus clair et plus simple.
Alors la question qui se pose, ai-je bien fait avec mon code actuel ? Comment auriez-vous fait ?
PS : les debug o sont pour un test perso
Re: Tableau
up 

Re: Tableau
Tu sais ce qu'il manque ou tu me torture en me laissant chercher ? 

Re: Tableau
Bonjour,
Je n'ai pas exécuté le code en entier, mais rien que la première ligne me fait douté qu'il fonctionne.
Exécute ce code en mode débug et tu devrais comprendre:
Puis regarde dans l'aide la fonction random, c'est pas compliqué.
Je n'ai pas exécuté le code en entier, mais rien que la première ligne me fait douté qu'il fonctionne.
Exécute ce code en mode débug et tu devrais comprendre:
Code : Tout sélectionner
m=random(x-3)
debug m
Re: Tableau
Il te manque une grande partie du code. Entre autre :
Code : Tout sélectionner
;*************************************************
;*** Bataille Navale v1.0 codée par RobRock 55 ***
;*************************************************
;-Initialisation des variables
#taille = 70
colf = RGB(36,192,255)
IDgadget = 0
nbbateau = 4
colonegadget = 0
lignegadget = 0
numerogadget = 0
x.b = 10 : y.b = 10 ;Dimension du tableau
i.b = 0 : j.b = 0 : k.b = 0 ; Pour test dans le tableau
m.b = 0 : n.b = 0 : o.b = 0;¨Pour affectation aléatoire des bateaux
a.b = 1 : b.b = 1 ; Pour boucle for/next des créations de gadgets
c.b = 3 ;Pour boucle de vérification si coulé
;-Chargement des images
LoadImage(1,"Touché.bmp")
LoadImage(2,"Dansleau.bmp")
;-Création des tableaux
Dim grille1.b(x,y)
;-Affectation des bateaux
m = Random(x-3)
n = Random(y-3)
o = Random(10)
grille1(m,n) = 4
If o > 4
grille1(m,n+1) = 4
grille1(m,n+2) = 4
grille1(m,n+3) = 4
Else
grille1(m+1,n) = 4
grille1(m+2,n) = 4
grille1(m+3,n) = 4
EndIf
m = Random(x-2)
n = Random(y-2)
o = Random(10)
grille1(m,n) = 3
If o > 4
grille1(m,n+1) = 3
grille1(m,n+2) = 3
Else
grille1(m+1,n) = 3
grille1(m+2,n) = 3
EndIf
m = Random(x-2)
n = Random(y-2)
o = Random(10)
grille1(m,n) = 2
If o > 4
grille1(m,n+1) = 2
grille1(m,n+2) = 2
Else
grille1(m+1,n) = 2
grille1(m+2,n) = 2
EndIf
m = Random(x-1)
n = Random(y-1)
o = Random(10)
grille1(m,n) = 1
If o > 4
grille1(m,n+1) = 1
Else
grille1(m+1,n) = 1
EndIf
;-Procédure pour test quand l'utilisateur tire
Procedure test_bateau()
Shared IDgadget : Shared x : Shared y : Shared nbbateau : Shared c : Shared grille1() ;Récupération des variables et des tableaux
i = Int(IDgadget/x) ;calculs pour relation entre le boutton et le tableau
j = IDgadget%x
k = grille1(i,j)
If grille1(i,j) >= 5
MessageRequester("Résultat :","Déjà tiré !")
ElseIf grille1(i,j) >= 1
grille1(i,j) = grille1(i,j) + 5
SetGadgetAttribute(IDgadget,#PB_Button_Image,ImageID(1))
For c = 1 To 3
If i-c >= 0
If grille1(i-c,j) = k
Goto label
Else
EndIf
EndIf
If j-c >= 0
If grille1(i,j-c) = k
Goto label
Else
EndIf
EndIf
If i+c <= x
If grille1(i+c,j) = k
Goto label
Else
EndIf
EndIf
If j+c <= y
If grille1(i,j+c) = k
Goto label
Else
EndIf
EndIf
Next c
MessageRequester("Résultat :","Coulé !")
nbbateau = nbbateau -1
Else
grille1(i,j) = grille1(i,j) + 5
SetGadgetAttribute(IDgadget,#PB_Button_Image,ImageID(2))
EndIf
label:
EndProcedure
;-Ouverture fenêtre
OpenWindow(1,0,0,(#taille+10)*x+10,(#taille+10)*y+10,"Champ de bataille",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered)
SetWindowColor(1,colf)
;-Création gadgets
For b=1 To y
For a=1 To x
ButtonImageGadget(numerogadget,(#taille+10)*colonegadget+10,(#taille+10)*lignegadget+10,#taille,#taille,0)
numerogadget = numerogadget+1
colonegadget = colonegadget + 1
Next a
colonegadget = 0
lignegadget = lignegadget + 1
a = 1
Next b
;-Boucle fenêtre
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget ; Si un gadget et utilisé
IDgadget = EventGadget() ; Je retourne son ID dans la variable IDgadget
test_bateau()
If nbbateau = 0
MessageRequester("","Bravo !!! Vous avez gagné !!!")
Break
EndIf
Else
IDgadget = 0
EndIf
Until event = #PB_Event_CloseWindow
CloseWindow(1)
Re: Tableau
Si tu as des chevauchement de bateaux, je pense que c'est normal, car tu ne testes pas si il y a déjà quelque chose dans les cases. Il faut tester dans ton tableau les lignes et les colonnes pour savoir si un bateau est déjà présent dans la ligne ou la colonne qui est tiré au hasard.
Enfin c'est mon avis.
Enfin c'est mon avis.