2017-09-04 4 views
1

Je crée un projet où des images aléatoires s'affichent lorsque je clique sur un bouton et que le total des images (dés) devra être deviné. J'ai déjà en bas de l'image aléatoire la génération et le suivi du nombre de personnes. Toutefois; Je n'arrive pas à comprendre comment faire un dé (image) avoir une certaine valeur. Comme dés 5 spectacles et a une valeur de 4. La personne y met devine dans guessBx et clique sur le guessBtn et il apparaîtra si ils sont corrects ou non.Obtenir une valeur à partir d'une image en C#

Voici mon code dès maintenant:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace PetalsAroundTheRose 
{ 
public partial class Form1 : Form 
{ 
public Form1() 
{ 
InitializeComponent(); 
    } 
    int a = 0; 
    int diceRoll; 
    int diceImage; 
    int diceValue; 

    private void btnRoll_Click_1(object sender, EventArgs e) 
    { 
     Random random = new Random(); 
     picBx1.Image = imageList1.Images[random.Next(1, 6)]; 
     picBx2.Image = imageList1.Images[random.Next(1, 6)]; 
     picBx3.Image = imageList1.Images[random.Next(1, 6)]; 
     picBx4.Image = imageList1.Images[random.Next(1, 6)]; 

     a++; 
     txtBxRolls.Text = a.ToString(); 

     //each dice seperate 
     //dice 1 
     diceRoll = 1; 
     diceImage = imageList1.Images[(1)]; 
     diceValue = 0; 

     //dice 2 
     diceRoll = 1; 
     diceImage = imageList1.Images[(2)]; 
     diceValue = 0; 

     //dice 3 
     diceRoll = 1; 
     diceImage = imageList1.Images[(3)]; 
     diceValue = 2; 

     //dice 4 
     diceRoll = 1; 
     diceImage = imageList1.Images[(4)]; 
     diceValue = 0; 

     //dice 5 
     diceRoll = 1; 
     diceImage = imageList1.Images[(5)]; 
     diceValue = 4; 
    } 

    private void guessBx_TextChanged_1(object sender, EventArgs e) 
    { 
} 
} 
} 

Sur ma conception je btnRoll pour rouler les dés. guessBx pour entrer dans la conjecture, btnGuess, txtBxCorrect pour le montant exact qu'ils ont obtenu, et txtBxResult dire si elles sont correctes ou non

Les images sont dans un imageList

+0

Pouvez-vous expliquer plus. les images sont-elles l'image de chaque côté des dés? et vous voulez vérifier si l'image et le nombre entré sont les mêmes? –

+0

oui, chaque image est un côté de la matrice. Après que les images soient "roulées", soyez capable de vérifier si la valeur des images affichées est correcte. semblable aux pétales sont le jeu de rose. – CRogers

+0

Choisissez un nombre aléatoire de (1-7) .Cela vous indiquera la valeur de la matrice du dé.Utilisez cela comme index dans votre ImageList en fonction de la façon dont ils sont listés – Plutonix

Répondre

0

Tout d'abord je créer une classe avec ces deux propriétés

public class Dice 
{ 
    public int Indexer { get; set; } 
    public string PhotoPath { get; set; } 

    public Dice(int indexer, string photoPath) 
    { 
     Indexer = indexer; 
     PhotoPath = photoPath; 
    } 
} 

Après que je mets dans ma forme les cases d'image, puis j'ai créé deux méthodes le premier:

public void SetUp() 
    {   
     for (int i = 1; i <= 6; i++) 
     { 
      temp = random.Next(1, 6); 
      dice = new Die(temp, "C:\\Users\\giorg\\Desktop\\dice\\dice" + temp + ".PNG"); 
      dices.Add(dice); // list<Dice> dices = new list<Dice>(); 
     } 
    } 

et le second:

public void RollDices() 
    { 
     //this is not necessary but if you want to keep a sum of dices keep 
     //it 
     var count = 0; 
     foreach (var dice in dices) 
     { 
      count += dice.Indexer; 
     } 
     //pictureboxes 2-7 are guess boxes 
     if(textBox2.Text.Equals(dices[0].Indexer.ToString())) 
      pictureBox1.Image = Image.FromFile(dices[0].PhotoPath); 

     if (textBox3.Text.Equals(dices[1].Indexer.ToString())) 
      pictureBox2.Image = Image.FromFile(dices[1].PhotoPath); 

     if (textBox4.Text.Equals(dices[2].Indexer.ToString())) 
      pictureBox3.Image = Image.FromFile(dices[2].PhotoPath); 

     if (textBox5.Text.Equals(dices[3].Indexer.ToString())) 
      pictureBox4.Image = Image.FromFile(dices[3].PhotoPath); 

     if (textBox6.Text.Equals(dices[4].Indexer.ToString())) 
      pictureBox5.Image = Image.FromFile(dices[4].PhotoPath); 

     if (textBox7.Text.Equals(dices[5].Indexer.ToString())) 
      pictureBox6.Image = Image.FromFile(dices[5].PhotoPath);  
    } 

Mettez ces deux méthodes à votre bouton événement clic et vous êtes ok ... Prévenez-moi si vous êtes ok avec cette approche.

+0

depuis les images ne sont pas sur mon PC, ils sont dans une liste d'images, je ne pourrais pas mettre pour la nouvelle die ... (imageList1.Images) ?? – CRogers

+0

Pourquoi vous n'utilisez pas les dés de classe qui ont de la valeur (indexeur dans mon échantillon) et photopath, puis ajoutez "dés" dans une liste <> au lieu d'utiliser imageList? Y a-t-il une raison? – ggeorge