Click here to Skip to main content
15,891,375 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
help pls...i don't know how to do this:
Q1? After the Roll button is pressed, a timer will be enabled to generate random die rolls every 1/10 of a second...
Q2?, how can make dice#1 an integer or count as 1. because after the roll stop, need to add them all and display score.
i am using 5 picturebox, the imagelist has 6 picture(dice 1 to 6), 2 buttons(roll and play again).
Thank you...
C#
private Random m_rnd = new Random();
        private int[] i_Array = new int[5] { 0, 1, 2, 3, 4 };
        public Form1()
        {
            InitializeComponent();
            
            pictureBox1.Image = imageList1.Images[i_Array[0]];
            pictureBox2.Image = imageList1.Images[i_Array[1]];
            pictureBox3.Image = imageList1.Images[i_Array[2]];
            pictureBox4.Image = imageList1.Images[i_Array[3]];
            pictureBox5.Image = imageList1.Images[i_Array[4]];
        }

        private void btn_roll_Click(object sender, EventArgs e)
        {
            pictureBox1.Image = imageList1.Images[m_rnd.Next(0, 6)];
            pictureBox2.Image = imageList1.Images[m_rnd.Next(0, 6)];
            pictureBox3.Image = imageList1.Images[m_rnd.Next(0, 6)];
            pictureBox4.Image = imageList1.Images[m_rnd.Next(0, 6)];
            pictureBox5.Image = imageList1.Images[m_rnd.Next(0, 6)];

        }
Posted

I think you are going about this the wrong way. This is how I would do it. I am assuming you are trying to get random results from 5 dice, and setting the image for 5 pb's to correspond to each number rolled. I aslo assume your imageList contains six images which correspond to the six sides of a dice. First off I would store my PictureBoxes in a List<PictureBox> . That way I could access them from a loop. I would also have a List<int> to store my dice results, so i would declare them as form level variables, along with an int to store the total rolled and an instance of the Random class to generate random results :-

C#
Random r = new Random();
        List<int> diceResults = new List<int>();
        List<PictureBox> dice = new List<PictureBox>();
        int diceTotal;


Then I would add my PictureBoxes to my dice list in the form constructor(could also be done in FormLoad event) like this;

C#
public Form1()
        {
            InitializeComponent();
            dice.Add(pictureBox1);
            dice.Add(pictureBox2);
            dice.Add(pictureBox3);
            dice.Add(pictureBox4);
            dice.Add(pictureBox5);
        }


then in the click event of the roll button, you just construct a loop to generate random numbers and add as you go like this:-

C#
private void button1_Click(object sender, EventArgs e)
        {
            diceTotal = 0;
            diceResults.Clear();
            for (int i = 0; i <= 4; i++)
            {
                diceResults.Add(r.Next(1,6));
                int imageNumber = diceResults[i] - 1;
                dice[i].Image = this.imageList1.Images[imageNumber];
                diceTotal += diceResults[i];
            }
            lblDiceTotal.Text = diceTotal.ToString();
        }


notice i used 1 as the minimum for my random generator so I don't get 0 as a result, this means I must subtract 1 when want to generate the image index.

Hope this helps
 
Share this answer
 
Comments
[no name] 8-Oct-11 2:57am    
it did help, thank you so much...
Now, my problem is q1...
i solved the first question, now I'm having a hard time doing this:
When a label is clicked, the background color will be changed to red, indicating that that particular die will not be rolled. If the user clicks on a red die again, the color will return to green, indicating that that die will be rolled.

C#
        Random m_rnd = new Random();
        List<int> diceResults = new List<int>();
        List<picturebox> die = new List<picturebox>();
        PictureBox[] dice = null;
        int i_diceTotal = 0;
        //int totalScore = 0;
        int[] i_Array = new int[5];
        int rolls = 0;
        int i_rolling = 0;
        public Form1()
        {
            InitializeComponent();
            die.Add(pictureBox1);
            die.Add(pictureBox2);
            die.Add(pictureBox3);
            die.Add(pictureBox4);
            die.Add(pictureBox5);
            dice = new PictureBox[5]
            {
                pictureBox1,
                pictureBox2,
                pictureBox3,
                pictureBox4,
                pictureBox5
            };
            for (int i = 0; i < 5; i++)
            {
                dice[i].Image = imageList1.Images[i];
                i_Array[i] = i;
            }

            lbl_totalscore.Text = "0";
            lbl_rollscore.Text = "0";
            timer1.Interval = 10;

        }

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

        private void btn_Roll_Click(object sender, EventArgs e)
        {
            
            rolls++;
            lbl_rollscore.Text = rolls.ToString();
            if (rolls == 3)
            {
                btn_Roll.Enabled = false;
            }
            timer1.Start();
            
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            for (int i = 0; i < 5; i++)
            {
                i_Array[i] = m_rnd.Next(0, 6);
                dice[i].Image = imageList1.Images[i_Array[i]];
            }

            i_rolling++;
            if (i_rolling < 10) return;
            timer1.Stop();
            //int rollScore = 0;
            i_diceTotal = 0;
            diceResults.Clear();
            for (int i = 0; i <= 4; i++)
            {
                diceResults.Add(m_rnd.Next(1, 6));
                int imageNumber = diceResults[i] - 1;
                die[i].Image = this.imageList1.Images[imageNumber];
                i_diceTotal += diceResults[i];
            }
            lbl_totalscore.Text = i_diceTotal.ToString();
            
        }

        private void btn_playagain_Click(object sender, EventArgs e)
        {
            rolls = -1;
            dice = new PictureBox[5]
            {
                pictureBox1,
                pictureBox2,
                pictureBox3,
                pictureBox4,
                pictureBox5
            };
            for (int i = 0; i < 5; i++)
            {
                dice[i].Image = imageList1.Images[i];
                i_Array[i] = i;
            }
            rolls++;
            btn_Roll.Enabled = true;
            lbl_totalscore.Text = "0";
            lbl_rollscore.Text = "0";
        }
</picturebox></picturebox></int></int>
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900