valores de array aleatorios en C#...URGENTE PORFAVOR

Iniciado por kanlet, 19 Junio 2011, 20:09 PM

0 Miembros y 1 Visitante están viendo este tema.

kanlet

hola...tengo una array con valores y quiero cargar esos valores de forma aleatorios cada vez que lo ejecute...en c#....estoy haciendo el juego de la escoba como proyecto de la uni y he conseguido cargar las cartas pero siempre me sale el mismo orden...he puesto una funcion que recorre la array y me los de aleatorias las cartas pero ni me da error ni me funciona lo que yo quiero...haber si me podeis ayudar porfavor...es urgente
gracias...

saludos......

aqui les dejo el codigo completo de lo que tengo hasta ahora... haber si me podeis ayudar porfavor....

Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace cartas
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }
       int puntos = 0;
       string[] cartas = { "2 bastos", "2 copas", "2 espadas", "2 oros", "3 bastos", "3 copas", "3 espadas", "3 oros", "4 bastos", "4 copas", "4 espadas", "4 oros", "5 bastos", "5 copas", "5 espadas", "5 oros", "6 bastos", "6 copas", "6 espadas", "6 oros", "7 bastos", "7 copas", "7 espadas", "7 oros", "1 asbastos", "1 ascopas", "1 asespadas", "1 asoros", "9 caballobastos", "9 caballocopas", "9 caballoespadas", "9 caballooros", "10 reybastos", "10 reycopas", "10 reyespadas", "10 reyoros", "8 sotasbastos", "8 sotascopas", "8 sotasespadas", "8 sotasoros" };
       PictureBox[] miscartas = new PictureBox[4];
       private void groupBox1_Enter(object sender, EventArgs e)
       {

       }
     
       
       int posi2 = 0;
       int posi = 1;
       private void button1_Click(object sender, EventArgs e)
       {
         
           foreach (Control C in Controls)
           {
               if (C is GroupBox)
               {
                   foreach (PictureBox E in C.Controls)
                   {

                       E.Image = imageList1.Images[posi];
                       E.Tag = posi;
                       
                           posi += 1;
                       
                   }
               }
           }
               
           
       }

       private void button2_Click(object sender, EventArgs e)
       {
         
           foreach (Control C in Controls)
           {
               if ((C is GroupBox)&&(C !=groupBox5))
               {
                   foreach (PictureBox E in C.Controls)
                   {

                       E.Image = imageList1.Images[posi];
                       E.Tag = posi;
                       

                       posi += 1;
                       if (posi == 40)
                       {
                           posi = 1;
                       }
                   }
               }
           }
       }
       int turno = 1;
       private void cambiodeturno()
       {
           if (carta != null)
           {
               carta.Image = null;

               mover = false;
               turno += 1;
               switch (turno)
               {
                   case 1:

                       groupBox1.Visible = true;
                       groupBox4.Visible = false;

                       break;

                   case 2:

                       groupBox2.Visible = true;
                       groupBox1.Visible = false;


                       break;

                   case 3:

                       groupBox3.Visible = true;
                       groupBox2.Visible = false;


                       break;

                   case 4:

                       groupBox4.Visible = true;
                       groupBox3.Visible = false;
                       turno = 0;

                       break;
             
              }
               carta.Location = new System.Drawing.Point(carta.Location.X, carta.Location.Y + 3);
               
               }
               else
               {
                   MessageBox.Show("no hay carta seleccionada", "Atención", MessageBoxButtons.OK);
               }
         
       }

       private void button3_Click(object sender, EventArgs e)
       {
           if (puntos == 15)//si la suma de los puntos de la cartas es 15.....pasa el resto de la cadena
           {
               //foreach lo que hace esd recorrer....POR CADA....
               foreach (PictureBox a in groupBox1.Controls)//te recorre todas las cartas que tengo en el grupbox
               {// a es el nombre de cada piturebox
                   for (int i = 0; i <= 4; i++)//recorre las cartas clicadas
                   {
                       if (miscartas[i] != null)//si tengo cartas en la array de mis cartas
                       {
                           if (a.Name == miscartas[i].Name)//....las miro si son iguales
                           {
                               a.Image = null;//te quita las cartas seleccionadas
                           }
                       }
                   }
               }
               MessageBox.Show("correcto");
           
           }
           else
           {
               MessageBox.Show("no es correcto");
               puntos = 0;
           }
           
           cambiodeturno();
       }

       private void button4_Click(object sender, EventArgs e)
       {
           
           PictureBox micarta = new PictureBox();
           micarta.Location = new System.Drawing.Point(pictureBox16.Location.X + 80, pictureBox16.Location.Y);
           micarta.Size = new System.Drawing.Size(41, 71);
           micarta.Image = carta.Image;
           groupBox5.Controls.Add(micarta);
           cambiodeturno();
       }



       private bool isDragging = false;


       private void carta_MouseDown(object sender, MouseEventArgs e)
       {
           isDragging = true;
       }  
       private void carta_MouseUp(object sender, MouseEventArgs e)
       {
           isDragging = false;
           
       }


       private void carta_MouseMove(object sender, MouseEventArgs e)
       {
           Control ctrl = sender as Control; if (isDragging)
           {
               Point p1 = ctrl.PointToScreen(e.Location);
               Point p2 = ctrl.Parent.PointToClient(p1);
               ctrl.Location = p2;
           }
       }



/*
esto es para recorrer las cartas y colocar una si hay un sitio vacio
       foreach(Control c in Controls){
       if(c is PictureBox)
             {
          if(((PictureBox)c).Image==null)
               {
              ((PictureBox)c).Image=PictureBox//AQUI EN NUMERO DEL PITUREBOX DE DONDE SALDRA LA CARTA.image;
               }
             }
      }
*/



     
       Boolean mover = false;
       PictureBox carta;
     
       private void pictureBox11_Click(object sender, EventArgs e)
       {
           
           if (mover == false)
           {
               
               string cadena = (cartas[Convert.ToInt16(((PictureBox)sender).Tag)]);
               char[] sep = { ' ' };
               Array a = cadena.Split(sep);//te coje el numero especifico de la carta
               puntos += Convert.ToInt16(a.GetValue(0));//te coge la posicion de cada del nombre de la carta
               //en este caso por ejemplo 0 es el numero(2) y 1 es el nombre de la carta
               MessageBox.Show(Convert.ToString(puntos));
               posi2 = 0;
               miscartas[posi2] = ((PictureBox)sender);
               posi2++;

               
               ((PictureBox)sender).Location = new System.Drawing.Point(((PictureBox)sender).Location.X, ((PictureBox)sender).Location.Y - 14);
             
               carta = ((PictureBox)sender);
               
           }
           mover = true;
       }

       private void pictureBox1_Click(object sender, EventArgs e)
       {
         if (mover == false)
           {

               posi2 = 0;
               string cadena = (cartas[Convert.ToInt16(((PictureBox)sender).Tag)]);
               char[] sep = { ' ' };
               Array a = cadena.Split(sep);//te coje el numero especifico de la carta
               puntos += Convert.ToInt16(a.GetValue(0));//te coge la posicion de cada del nombre de la carta
               //en este caso por ejemplo 0 es el numero(2) y 1 es el nombre de la carta
               MessageBox.Show(Convert.ToString(puntos));

               miscartas[posi2] = ((PictureBox)sender);
               posi2++;

               ((PictureBox)sender).Location = new System.Drawing.Point(((PictureBox)sender).Location.X + 14, ((PictureBox)sender).Location.Y);
               carta = ((PictureBox)sender);
          }
           mover = true;
       }

       private void pictureBox8_Click(object sender, EventArgs e)
       {
           if (mover == false)
           {
               posi2 = 0;
               string cadena = (cartas[Convert.ToInt16(((PictureBox)sender).Tag)]);
               char[] sep = { ' ' };
               Array a = cadena.Split(sep);//te coje el numero especifico de la carta
               puntos += Convert.ToInt16(a.GetValue(0));//te coge la posicion de cada del nombre de la carta
               //en este caso por ejemplo 0 es el numero(2) y 1 es el nombre de la carta
               MessageBox.Show(Convert.ToString(puntos));

               miscartas[posi2] = ((PictureBox)sender);
               posi2++;

               ((PictureBox)sender).Location = new System.Drawing.Point(((PictureBox)sender).Location.X, ((PictureBox)sender).Location.Y + 14);
               carta = ((PictureBox)sender);
           }
           mover = true;
       }

       private void pictureBox5_Click(object sender, EventArgs e)
       {
           if (mover == false)
           {
               posi2 = 0;
               string cadena = (cartas[Convert.ToInt16(((PictureBox)sender).Tag)]);
               char[] sep = { ' ' };
               Array a = cadena.Split(sep);//te coje el numero especifico de la carta
               puntos += Convert.ToInt16(a.GetValue(0));//te coge la posicion de cada del nombre de la carta
               //en este caso por ejemplo 0 es el numero(2) y 1 es el nombre de la carta
               MessageBox.Show(Convert.ToString(puntos));

               miscartas[posi2] = ((PictureBox)sender);
               posi2++;

               ((PictureBox)sender).Location = new System.Drawing.Point(((PictureBox)sender).Location.X - 14, ((PictureBox)sender).Location.Y);
               carta = ((PictureBox)sender);
           }
           mover = true;
       }

       private void pictureBox14_Click(object sender, EventArgs e)
       {
           if (mover == false)
           {
               posi2 = 0;
               string cadena = (cartas[Convert.ToInt16(((PictureBox)sender).Tag)]);
               char[] sep = { ' ' };
               Array a = cadena.Split(sep);//te coje el numero especifico de la carta
               puntos += Convert.ToInt16(a.GetValue(0));//te coge la posicion de cada del nombre de la carta
               //en este caso por ejemplo 0 es el numero(2) y 1 es el nombre de la carta
               MessageBox.Show(Convert.ToString(puntos));

               miscartas[posi2] = ((PictureBox)sender);
               posi2++;

               ((PictureBox)sender).Location = new System.Drawing.Point(((PictureBox)sender).Location.X, ((PictureBox)sender).Location.Y - 14);
               carta = ((PictureBox)sender);
           }
           mover = true;
       }
   }
}

.:UND3R:.


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

Edu

Usa una funcion como:

Código (csharp) [Seleccionar]

public static void RandomNumbers()
       {
           Random Rnd = new Random(unchecked((int)DateTime.Now.Ticks));
           for (int i = 0; i < Mazo.Length; i++)
               do
               {
                   Mazo[i] = Rnd.Next(1,22);
               } while (NumExists(Mazo[i], i) == true);
           Rnd = null;
       }


Mira eso y trata de modificarlo a tu gusto usando el valor de index de tu array en vez del contenido

Edit: Under, no es C++ es C# y tendria que ponerlo en la sección de .Net

.:UND3R:.


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

kanlet

gracias por el codigo zerox.....y gracias a los demas por la recomendacion...soy nuevo...en los siguientes temas tratare de adecuar mis mensajes en el lugar adecuando

gracias....

saludos.

kanlet

por cienrto XXX ZERO XXX que es NumExist???? una variable tuya propia????

saludos...

Edu

Es otra funcion para saber si ya existia ese numero random nuevo, para no repetir que es lo que quieres creo, me olvide de dejarla aca.

Código (csharp) [Seleccionar]

public static bool NumExists(int Num, int MaxPos)
        {
            bool resultado = false;
            for (int i = 0; i < MaxPos; i++)
                if (Mazo[i] == Num)
                {
                    resultado = true;
                    break;
                }
            return resultado;
        }


Te dejo codigo porque tienes que modificarlo a tu gusto, solo para que entiendas la idea es.