Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[RESOLU] Aide pour visual basic


Raphdu01

Messages recommandés

Bonjour

 

Je doit realiser une bataille navale ultra simplifiée sur visual basic et j'aurai besoin d'un petit coup de main.

 

Mon projet consiste a réaliser une bataile navale en 1D avec une listbox. J'ai donc créé cette liste de 20 lignes (c'est la consigne) avec une arraylist qui a pour valeur 0 pour chaque ligne, ensuite j'ajoute 8 "bateaux" avec un bouton qui met 1 en valeur dans l'arraylist pour indiquer la presence du bateau. (j'espere que c'est assez clair)

 

le problème c'est que je doit faire la même chose mais automatiquement car je joue contre l'ordinateur ! je voudrait donc que lorsque je charge mon application 8 "bateaux" se mettent automatiquement et aleatoirement dans la listbox de l'ordinateur. Et la je suis vraiment a cours d'idée ! J'ai pensé a randomize mais je ne sais pas comment l'appliquer pour arriver à ce que je veux..

 

Si quelqu'un pouvait me filer un peztit coup de main, voire un grand ^^ ca m'aiderai beaucoup..

 

merci d'avance a+

Modifié par Raphdu01
Lien vers le commentaire
Partager sur d’autres sites

  • Modérateurs

En général, les modules de tirage aléatoire rendent une valeur comprise entre 0 et 1. Dans ton cas, il suffit de multiplier le résultat par 20 et d'en prendre la valeur entière, qui sera donc comprise entre 0 et 19 inclus. Tu procèdes à plusieurs tirages successifs, dont tu notes les résultats dans une table de 20 postes. Tout tirage donnant un résultat déjà obtenu est ignoré. Tu arrêtes ta boucle lorsque tu as obtenu 8 valeurs distinctes... :P

Lien vers le commentaire
Partager sur d’autres sites

Merci de ton aide dylav je ne connaissait pas bien la fonction randomize et je ne savait pas comment faire pour que sa valeur soit forcement entre 0 et 19

j'ai tapé ce code il marche en partie mais le probleme c'est qu'il peut mettre 1 en arraylist deux fois sur la meme ligne et je ne vois pas coment faire est ce tu vois l'erreur ?

sinon ca ma vraimpent bien aidé. j'ai essayé de donner un peu d'explication sur le code que j'ai copié j'espere que c'est comprehesible.. bonne soirée a+

 

ptetre que ca peutr servir : batordi c'est le nom de mon arraylist

 

 

Randomize()
'boucle qui permet d'ajouter 8 bateaux
For i = 0 To 7
   'calcule un nombre entre 0 et 19
   index = Int(20 * Rnd())
   'si l'arraylist contient deja un bateau
   If batordi(index) = 1 Then
       'choisir un autre nombre
       index = Int(20 * Rnd())
       'mettre un bateau a l'element de la liste correspondant a index
       batordi(index) = 1
   'si l'arraylist ne contient pas de bateau on lui en met un
   Else
       batordi(index) = 1
   End If
Next 

Modifié par Raphdu01
Lien vers le commentaire
Partager sur d’autres sites

  • Modérateurs
ntirages=0
'Tant qu'on n'a pas obtenu 8 tirages distincts, on tire.
while (ntirages < 8)
  index = Int(20 * Rnd())
'Si la case est libre, on la bloque et on déclare avoir obtenu un tirage distinct de plus.
  if batordi(index)=0 then
  batordi(index)=1
  ntirages=ntirages+1
  end if
end while

Lien vers le commentaire
Partager sur d’autres sites

Oui bien vu ! J'ai continué de chercher j'ai trouvé une solution differente de la tienne mais qui a l'air de marcher. J'aimerai savoir si elle tient la route. En tous cas merci beaucoup pour le code !

Et au passage je me suis rendu compte qu'on pouvait ecrire le code plus clairement avec la codebox ce sera surement plus facile a comprendre ce coup la.

 

 
           'on realise 8 tirages      
           For i = 0 To 7
           index = Int(20 * Rnd())
           'si le nombre est deja prix on tire un nouveau nombre jusqu'a ce qu'on ai une case libre
           If batordi(index) = 1 Then
               Do
                   index = Int(20 * Rnd())
               Loop Until batordi(index) = 0
               batordi(index) = 1
           Else
               batordi(index) = 1
           End If
       Next

Modifié par Raphdu01
Lien vers le commentaire
Partager sur d’autres sites

Merci pour le complement d'info en fait j'avait pas tout a fait compris le fonctionnement de cet algo en effet il est beaucoup plus simple j'avait pensé a utiliser le while mais pas reussi :P

Merci beaucoup pour votre aide..

 

A bientot pour un prochain coup de main qui ne devrait pas tarder ^^

 

++

Lien vers le commentaire
Partager sur d’autres sites

Rebonjour

 

Comme prevu j'ai encore besoin d'aide !

J'ai créé des inputbox qui demandent a l'utilisateur un nombre de cases puis un nombre de bateaux

j'ai fait ca ->

 

       
Do
   nbbat = InputBox("Nombre de bateaux ?")
Loop Until String.IsNullOrEmpty(nbbat)
Do
   nbcases = InputBox("Nombre de cases ?")
Loop Until String.IsNullOrEmpty(nbcases)

 

J'ai trouvé ce bout de code sur un site qui apparement permettait de faire en sorte que, tant que l'utilisateur n'a rien saisi, l'inputbox reapparaisse mais ca ne marche pas.

 

J'ai donc pensé un truc :

-si l'utilisateur n'a rien saisi : nbbat = 8 et nbcases=20

-si l'utilisateur clique sur annuler : idem

 

Mais la c'est hors de mes competences et je n'arrive pas a trouver de sites qui pourrait me dire si c'est possible ou non

 

J'espere que je demande pas l'impossible !

 

Merci d'avance

++

Modifié par Raphdu01
Lien vers le commentaire
Partager sur d’autres sites

les inputbox ne retourne que des strings.

 

pour passer en integer je passe par une variable de transition. (peut être y'a til mieux a faire, moi je connais pas.)

 

 

il est possible de donner des valeurs par defaut a une inputbox.

rien ne t'empêche de mettre des variables en paramètre.

 

 

A = inputbox(prompt,title,defaut)

 

 

 

do

nbbat = inputbox("nombre de bateaux ?","combien de bateaux voulez vous","8")

 

loop until isempty(nbbat)

 

 

attention dans cette exemple, si l'utilisateur saisi "ggggg" tu sort de la boucle.

 

donc le mieux est de prévoir ce cas. soit

 

dim nbbat as string

dim batnb as variant

 

do

re:

 

nbbat = inputbox("nombre de bateaux ?","combien de bateaux voulez vous","8")

 

batnb = nbbat

 

if isnumeric(batnb) = false then

msgbox "veuillez saisir un nombre"

goto re:

end if

 

loop until batnb < 1 or batnb > 8

 

pour la dernière ligne, cela permet de fixer une plage de valeurs autorisées.

 

 

A+

Lien vers le commentaire
Partager sur d’autres sites

Salut scuny

merci pour beaucou pour ton aide !

j'ai recopié betement le code que tu as fait sans vraiment tout comprendre et ca marche pas : en fait l'inputbox revient a chaque fois que je clique sur ok.

Tu aurai une autre idée ?

par contre la valeur par defaut niquel :P

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...