J'avais compris que tu voulais faire des calculs d'ajout en croix avec les cases (textbox) pour trouver le résultat de calcul maxi.(mais je croyais que tu voulais ajouter toutes les valeurs)
Bon, Résumons, nous avons un plateau de 64 cases (textbox) de 8x8
Des nombres sont placé aléatoirement sur quelques cases (dans les textbox).
On parcours toutes les cases.
Si la case (textbox) est vide, on recherche le plus grand nombre dans les cases (textbox) adjacentes (haut, bas, droite, gauche) et on lui ajoute le nombre que l'ordi a généré automatiquement. Ce résultat est mis dans cette case (textbox) vide. On continu la boucle.
Avant de se lancer dans ce genre de chose, on réfléchi sur papier, on met une méthode/algorithme au point, et quand elle/il fonctionne, on code.
Tu as plusieurs approche.
- Tu traites tous les cas individuellement (très lourd - ce que tu veux éviter)
- tu fais une table des traitements que tu interprétes ensuite par code (encore assez lourd, puisque tu doit référencer tous les cas)
- tu crés un algorithme de traitement (plus complexe - mais moins de code)
- tu fais un mixe des solutions pour simplifier
Une orientation parmis d'autres
- tu traites les 4 angles a part (4 méthodes)
- tu traites les 4 bords à part (4 méthodes - 2 si tu réfléchis bien - voire même une - 3 si tu veux suivre une logique de parcours des cases linéairement)
- tu traite le centre (une méthode)
[Edit]
Autre orientation
Un algo qui traite tout,
Il suffit de vérifier les bords (avec des if) et tu ne traites pas les zones hors plateau
[/Edit]
Décompose tes traitements
- recherche du plus grand nombre et calcul.
- contrôle du résultat du calcul afin d'ajuster celui-ci suivant les contrainte de ton/tes labels et nouveau résultat.
Traductions d'articles :
La mémoire en .NET - Qu'est-ce qui va où ?
Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.
Si c'est le fonctionnement que tu attends.
L'init
recherche le plus grand nombre dans les cases
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub frmJeuNombreAleatoire_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load rempliPlateau() End Sub Private GenerateurNombre As System.Random = New System.Random() Sub rempliPlateau() Dim n As Integer = 0 For x As Integer = 1 To 64 n = GenerateurNombre.Next(1, 50) If n Mod 3 = 0 Then Panel1.Controls("TextBox" & x).Text = n.ToString Next End Sub
Appel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Function CalculCase(UneCase As Integer) As Integer Dim val As Integer = 0 ' calcul case haut If UneCase > 8 Then If (Panel1.Controls("TextBox" & UneCase - 8).Text <> "") AndAlso (Panel1.Controls("TextBox" & UneCase - 8).Text > val) Then val = Panel1.Controls("TextBox" & UneCase - 8).Text End If ' calcul case bas If UneCase < 57 Then If (Panel1.Controls("TextBox" & UneCase + 8).Text <> "") AndAlso (Panel1.Controls("TextBox" & UneCase + 8).Text > val) Then val = Panel1.Controls("TextBox" & UneCase + 8).Text End If ' calcul case gauche If UneCase Mod 8 <> 1 Then If (Panel1.Controls("TextBox" & UneCase - 1).Text <> "") AndAlso (Panel1.Controls("TextBox" & UneCase - 1).Text > val) Then val = Panel1.Controls("TextBox" & UneCase - 1).Text End If ' calcul case droite If UneCase Mod 8 <> 0 Then If (Panel1.Controls("TextBox" & UneCase + 1).Text <> "") AndAlso (Panel1.Controls("TextBox" & UneCase + 1).Text > val) Then val = Panel1.Controls("TextBox" & UneCase + 1).Text End If Return val End Function
Voici donc une base de travail (remplace "TextBox" par "a")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click For i As Integer = 1 To 64 If Panel1.Controls("TextBox" & i).Text = "" Then Panel1.Controls("TextBox" & i).Text = CalculCase(i) + GenerateurNombre.Next(1, 50) Next End Sub
Traductions d'articles :
La mémoire en .NET - Qu'est-ce qui va où ?
Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.
@rvt26t: quelques petites remarques sur le code (rien de bien dramatique) ; tu fais appel à Randomize pour rien et tu as un random (r) défini au niveau de la classe qui ne sert à rien (mais qui devrait plutôt servir à remplacer les random définis dans les méthodes à chaque fois. De plus plutôt que de faire des tests sur les valeurs de UneCase pour les cas spécifiques ; pour ne pas directement appeler l'indéxeur Controls et vérifier qu'on n'obtient pas Nothing (ce qui éliminera le cas où du plantage sur un controle mal nommé donc non-trouvé au passage) ?
Sinon j'ai toujours pas compris pourquoi un tel niveau de complexité ; déjà un code qui repose sur la manière de nommer les controles c'est pas la panacée (je dirais même que c'est jamais bon mais c'est déjà plus subjectif).
Pourquoi ne pas "simplement" utiliser un TableLayoutPanel avec 8 lignes et 8 colonnes en mettant un TextBox/Label/Whatever dedans ; après il suffira juste de boucler sur les éléments du TableLayoutPanel (et l'accès aux éléments mitoyens en sera également simplifié)
Cordialement !
Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
À quelle heure dormez-vous ?
Censément, quelqu'un de sensé est censé s'exprimer sensément.
L'utilisation du TableLayoutPanel est plus simple pour parcourir les éléments. Il faut avouer que si le besoin avait été exprimé clairement dés le début.
Dans sa toute première discussion sur ce sujet, je lui avais montré avec une collection, lui indiquant que c'était plus propre. (que les noms)
(Pour les nombres aléatoires j'avais changé et pas fait le ménage, désolé) correction faite.
merci Sehnsucht
Traductions d'articles :
La mémoire en .NET - Qu'est-ce qui va où ?
Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager