2017-01-25 4 views
-1

Je veux générer le numéro 5 fois et le numéro 10 fois. J'essaie de les diffuser à travers une grille de chaînes dans Delphi au hasard. Je veux également remplir le reste de la grille qui n'est pas ou , avec . Je n'ai aucune idée de comment commencer même ici.Comment générer un certain nombre de nombres et les répartir aléatoirement sur une grille?

Il ressemblerait à quelque chose comme ça (P signifie joueur et il n'y aurait que 5 2 de et 10 des 1): https://gyazo.com/aeef05c3a92ce7847c0f42ad40faa733

+0

Qu'avez-vous fait jusqu'à présent? Quel est votre problème exact? Créer une liste de nombre à afficher? Mélanger cette liste? Écrire les nombres dans la grille? – Wosi

+0

J'ai créé la liste et les ai initialisés (1 tableau pour 2 5 fois et 1 tableau pour 1 10 fois). Je ne suis pas sûr de savoir comment les écrire au hasard dans la grille. –

+0

Placez toutes les coordonnées de la grille dans un tableau. Mélangez-le avec le shuffle Fisher-Yates. Remplissez les 5 premiers coords mélangés avec 2, les 10 suivants avec 1, et le reste avec 0. –

Répondre

3

Compte tenu d'une grille avec des dimensions m × n, créez un tableau de longueur m * n. Mettez cinq 2 et 10 1 dans le tableau, et remplissez le reste avec 0. (Nous supposerons que le produit de m et n est au moins de 15.) Mélangez le tableau. Copiez chaque élément du tableau mélangé dans des cellules successives dans la grille.

+0

Je dois utiliser un tableau dynamique car l'utilisateur entre le nombre de colonnes et le nombre de lignes. Lorsque j'essaie d'attribuer les 10 premiers numéros, j'obtiens cette erreur: violation d'accès à l'adresse 00409f9A dans le module 'Project1.exe'. Ecrire de l'adresse 00000000 –

+0

Cela n'affecte en rien cette réponse. On dirait que vous avez un peu de débogage à faire. Avez-vous fait le tableau de la taille qu'il doit être? (Appelez 'SetLength'. –

+0

Je sais que ce n'est pas de ta faute, je demande juste un conseil haha. Oui, je définis la longueur du tableau dynamique. J'ai ensuite utilisé 2 pour les boucles avec: N: = trésor [i]; Multi-rayures [i, j]: = IntToStr (N) –

0

Alors que l'approche représentée dans Robs répondra à l'emploi que je pense personnellement qu'il est compliqué pour son but.

Alors, quelle serait l'approche la plus simple?

Eh bien, votre objectif est de placer ces nombres à des positions aléatoires dans la grille.

Comment déterminez-vous la position de certains objets dans une grille? Vous le faites par ses coordonnées X (Colonne) et Y (Ligne).

Alors, comment obtenez-vous une position aléatoire dans une grille? Simple a choisi deux valeurs aléatoires pour les coordonnées X et Y.

Pour placer certains numéros de numéro 1 et numéro 2, utilisez deux boucles simples.

+1

Je ne suis pas sûr de voir comment c'est plus simple. Comment mesurez-vous la simplicité? (En passant, votre approche est erronée, car elle ne tient pas compte du cas où l'emplacement que vous choisissez a déjà été rempli lors d'une précédente itération.) Mon approche est à l'abri de ce cas.) –

+0

@RobKennedy peut être résolu par une simple vérification pour voir si la cellule à ces coordonnées aléatoires est vide. – SilverWarior

+0

C'est une vérification que mon approche n'a pas à s'inquiéter. Comment mesurez-vous la simplicité? –