Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

grille pour bataille navale

4 réponses
Avatar
thierry
Bonjour,

Juste pour rire, je voudrais faire une bataille navale. mettre les
bateaux en mémoire ne pose pas de problème (tableau). par contre,
j'aimerais dessiner une grille pour afficher les navires. est ce qu'il
existe un objet que je pourrais utiliser pour cela ou est ce que je dois
dessiner chaque case de la grille avec un label?

cdt

Thierry

4 réponses

Avatar
X
Le plus simple serait de metre des labels comme tu dis, enfin, des
pictureBos, comme ça tu peux mettre le bateau dedans...

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"thierry" a écrit dans le message de news:

Bonjour,

Juste pour rire, je voudrais faire une bataille navale. mettre les
bateaux en mémoire ne pose pas de problème (tableau). par contre,
j'aimerais dessiner une grille pour afficher les navires. est ce qu'il
existe un objet que je pourrais utiliser pour cela ou est ce que je dois
dessiner chaque case de la grille avec un label?

cdt

Thierry


Avatar
Jean-Marc
"thierry" a écrit dans le message de
news:
Bonjour,

Juste pour rire, je voudrais faire une bataille navale. mettre les
bateaux en mémoire ne pose pas de problème (tableau). par contre,
j'aimerais dessiner une grille pour afficher les navires. est ce qu'il
existe un objet que je pourrais utiliser pour cela ou est ce que je


dois
dessiner chaque case de la grille avec un label?



Hello,

pourquoi pas un simple picture box?

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Clive Lumb
thierry wrote:
Bonjour,

Juste pour rire, je voudrais faire une bataille navale. mettre les
bateaux en mémoire ne pose pas de problème (tableau). par contre,
j'aimerais dessiner une grille pour afficher les navires. est ce qu'il
existe un objet que je pourrais utiliser pour cela ou est ce que je
dois dessiner chaque case de la grille avec un label?

cdt

Thierry



C'est le moment idéal de te lancer dans la création de classes contrôles
utilisateur....
Tu crées une classe "BNcase" qui est en effet un petit form sans bordures.
Tu ajoutes des propriétés et méthodes; exemple BNCase.coche pour mettre une
croix rouge là où tu as raté, BNCase.TypeNavire etc.
Ensuite dans ton jeu tu n'as qu'à ajouter le nombre de cases que tu veux.

Regardes le bout de code ci-après pour un jeu de Sudoku que j'ai fait.

Le contrôle utilisateur "square" est un carré qui affiche soit le numéro
choisi ou prédéfini, soit tous les numéros possibles.
De ce fait il a un label "lbig" qui fait la taille du carré et un groupe de
9 petit labels "lposs" qui font 1/3 de la taille


' La taille standard du carré
Dim Size As Integer
Const Subsize = 220
'Les couleurs d'affichage possible
Public Enum BigColours
Blue = vbBlue
Black = vbBlack
red = vbRed
End Enum
Dim BigColour As Long
Dim TimerOff As Boolean
Dim OriginalColour As Long
' le contrôle passe des evenements au parent
Public Event ValidClick()
Public Event ResetClick()
Public Event PossChanged()

Private Sub UserControl_Initialize()
Dim I As Integer, J As Integer
' on règle la taille
Size = 3 * Subsize
With UserControl
.Width = Size + 8
.Height = Size + 8
.ScaleWidth = Size + 8
.ScaleHeight = Size + 8
'on place le quadrillage
.Line1.X1 = 0
.Line1.X2 = Size
.Line1.Y1 = 0
.Line1.Y2 = 0

.Line2.X1 = 0
.Line2.X2 = Size
.Line2.Y1 = Size
.Line2.Y2 = Size

.Line3.X1 = 0
.Line3.X2 = 0
.Line3.Y1 = 0
.Line3.Y2 = Size

.Line4.X1 = Size
.Line4.X2 = Size
.Line4.Y1 = 0
.Line4.Y2 = Size
'on règle la taille des petits labels et on les place
For I = 0 To 2
For J = 0 To 2
.lPoss(I + 3 * J).Width = Subsize - 10
.lPoss(I + 3 * J).Height = Subsize - 10
.lPoss(I + 3 * J).Top = 10 + I * (Subsize - 2)
.lPoss(I + 3 * J).Left = 10 + J * (Subsize - 2)
.lPoss(I + 3 * J).Caption = Trim$(Str$(1 + I + 3 * J))
Next J
Next I

'on règle la taille du grand labels et on le place
.lBig.Left = 12
.lBig.Top = 12
.lBig.Width = Size - 24
.lBig.Height = Size - 24
.lBig.FontSize = 32
.lBig.Caption = "0"
.lBig.Visible = False
For I = 0 To 8
.lPoss(I).ToolTipText = "Press CTRL to see all the" & Str$(I + 1) &
"'s on the grid. SHIFT to see all the same number patterns."
Next I
End With
TimerOff = True
End Sub

Private Sub UserControl_Resize()
'empêcher le changement de taille du contrôle
Size = 3 * Subsize
With UserControl

.Width = Size + 8
.Height = Size + 8
End With
End Sub

'Exemple de comment changer la valeur du grand label
Public Property Get BigValue() As Integer
BigValue = Val(UserControl.lBig.Caption)
End Property

Public Property Let BigValue(ByVal vNewValue As Integer)
UserControl.lBig.Caption = Trim$(Str$(vNewValue))
If vNewValue = 0 Then
UserControl.lBig.Visible = False
UserControl.lBig.ForeColor = BigColour

Else
UserControl.lBig.Visible = True
UserControl.lBig.ForeColor = BigColour
End If
End Property

'Exemple de renvoi d'évenement
Private Sub lbig_MouseUp(Button As Integer, Shift As Integer, X As Single, Y
As Single)
If Button = 2 Then
If MsgBox("Reset this box?", vbOKCancel) = vbOK Then
UserControl.lBig.Caption = "0"
UserControl.lBig.Visible = False
RaiseEvent ResetClick
End If
End If
End Sub

------------------FIN EXEMPLE DE CODE
USERCONTROL----------------------------------

Ensuite dans le form principale ...
J'ai fait un groupe de 81 usercontrols "square"
Ce code va les placer comme je voudrais sur le form
Au lieu de tracer des lignes partout pour faire le quadrillage, je dessine
une boite noire et je place mes contrôles devant avec un petit écartement.

Private Sub Form_Load()
Dim I As Integer, J As Integer
Dim Gap As Integer, HGap As Integer, VGap As Integer
Dim CWidth As Integer
Dim CHeight As Integer
Dim Msg As String
ReDim nGrid(1 To 9, 1 To 9)
SettingUp = True
CWidth = Square(1).Width
CHeight = Square(1).Height
Gap = CWidth / 22
Me.Combo1.ListIndex = 1
Me.Combo2.ListIndex = 0
Me.BlackBox.Top = 0
Me.BlackBox.Left = 0
Me.BlackBox.Width = 4.5 * Gap + 9 * CWidth
Me.BlackBox.Height = 4.5 * Gap + 9 * CHeight
For I = 1 To 9
If I <= 3 Then HGap = Gap
If I > 3 And I <= 6 Then HGap = 2 * Gap
If I > 6 Then HGap = 3 * Gap
For J = 0 To 8
If J <= 2 Then VGap = Gap
If J > 2 And J <= 5 Then VGap = 2 * Gap
If J > 5 Then VGap = 3 * Gap
Square(I + 9 * J).Top = VGap + J * CHeight
Square(I + 9 * J).Left = HGap + (I - 1) * CWidth

Next J
Next I
Me.lblVersion.Caption = "Sudoku Helper Version: " & Trim$(Str$(App.Major)) &
"." & Trim$(Str$(App.Minor)) & "." & Trim$(Str$(App.Revision))
Me.lblVersion.Caption = Me.lblVersion.Caption & vbCrLf & "Copyright " &
App.LegalCopyright

Msg = "Welcome to Clive's SuDoku Helper." & vbCrLf & "Start by setting the
known numbers by clicking on the appropriate number in each box. If you make
a mistake a right-click will restore the box. When done click on ""Set-up
DONE""." & vbCrLf & "If you use Firefox you can copy the current grid from
Sudoku Fun: simply select all the grid with the mouse, press Ctrl-C then hit
the appropriate button." & vbCrLf & "You can also use the built-in generator
in the menu."
Me.Dial.Caption = Msg
HighlightOn = False
Call bGridInit

End Sub


Je pourrais t'envoyer le code source complet si tu veux
Avatar
thierry
In article <O$, clumb2
@Gratuit_in_English.fr.invalid says...
thierry wrote:
> Bonjour,
>
> Juste pour rire, je voudrais faire une bataille navale. mettre les
> bateaux en mémoire ne pose pas de problème (tableau). par contre,
> j'aimerais dessiner une grille pour afficher les navires. est ce qu'il
> existe un objet que je pourrais utiliser pour cela ou est ce que je
> dois dessiner chaque case de la grille avec un label?
>
> cdt
>
> Thierry

C'est le moment idéal de te lancer dans la création de classes contrôles
utilisateur....
Tu crées une classe "BNcase" qui est en effet un petit form sans bordures.
Tu ajoutes des propriétés et méthodes; exemple BNCase.coche pour mettre une
croix rouge là où tu as raté, BNCase.TypeNavire etc.
Ensuite dans ton jeu tu n'as qu'à ajouter le nombre de cases que tu veux.

Regardes le bout de code ci-après pour un jeu de Sudoku que j'ai fait.

Le contrôle utilisateur "square" est un carré qui affiche soit le numéro
choisi ou prédéfini, soit tous les numéros possibles.
De ce fait il a un label "lbig" qui fait la taille du carré et un groupe de
9 petit labels "lposs" qui font 1/3 de la taille


' La taille standard du carré
Dim Size As Integer
Const Subsize = 220
'Les couleurs d'affichage possible
Public Enum BigColours
Blue = vbBlue
Black = vbBlack
red = vbRed
End Enum
Dim BigColour As Long
Dim TimerOff As Boolean
Dim OriginalColour As Long
' le contrôle passe des evenements au parent
Public Event ValidClick()
Public Event ResetClick()
Public Event PossChanged()

Private Sub UserControl_Initialize()
Dim I As Integer, J As Integer
' on règle la taille
Size = 3 * Subsize
With UserControl




je te remercie pour ton aide, je vais essayer de comprendre comment
cela fontionne.