es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Aleatoriamente colocar una imagen en lugares específicos usando C#

Soy un traductor de español que traduce documentos de IT. Traduce lo siguiente al español. No traduzcas el código y la salida en Markdown.

Soy absolutamente nuevo con C#, así que espero que mi pregunta no esté completamente fuera de lugar.

Como puedes ver en la imagen de arriba, tengo un formulario, en el que hay una tabla (image) y un botón. En los recursos del proyecto, tengo otra imagen (black_rectangle.png), que es un rectángulo negro, exactamente del mismo tamaño que cada una de las celdas de la tabla. Esto es lo que estoy tratando de lograr:

Cada vez que se hace clic en el botón ‘Again’, quiero que los seis rectángulos negros cubran dos de las tres celdas de cada columna, de manera aleatoria. Por ejemplo, después del primer intento, la tabla podría verse así:

Básicamente estoy atascado al principio:

“` csharp
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

<pre><code>private void button1_Click(object sender, EventArgs e)
{
Random rand = new Random();
List<picturebox> items = new List<picturebox>();
PictureBox newPic = new PictureBox();
newPic.Height = 50;
newPic.Width = 50;
newPic.BackColor = Color.Maroon;

int x = rand.Next(10, this.ClientSize.Width – newPic.Width);
int y = rand.Next(10, this.ClientSize.Height – newPic.Height);
newPic.Location = new Point(x, y);
}
</code></pre>

}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    Para lograr el resultado deseado, se pueden seguir los siguientes pasos:

    1. Crear una matriz de cajas de imagen para contener los rectángulos negros.
    2. Cargar la imagen de rectángulo negro en cada caja de imagen.
    3. Para cada columna en la tabla, seleccionar al azar dos celdas para cubrir con los rectángulos negros y establecer las cajas de imagen correspondientes en visible.

    Aquí hay una implementación de código muestra:

    public partial class Form1 : Form
    {
        private PictureBox[][] blackRectangles;
    
        public Form1()
        {
            InitializeComponent();
            InitializeBlackRectangles();
        }
    
        private void InitializeBlackRectangles()
        {
            blackRectangles = new PictureBox[3][];
            // 3 columnas en la tabla
            for (int col = 0; col < 3; col++)
            {
                blackRectangles[col] = new PictureBox[6];
                // 6 filas en cada columna
                for (int row = 0; row < 6; row++)
                {
                    blackRectangles[col][row] = new PictureBox();
                    blackRectangles[col][row].Image = Properties.Resources.black_rectangle;
                    blackRectangles[col][row].SizeMode = PictureBoxSizeMode.StretchImage;
                    blackRectangles[col][row].Visible = false;
                    // Establecer la posición del rectángulo negro
                    blackRectangles[col][row].Location = new Point(
                        image.Location.X + (col * image.Columns[0].Width) + 1,
                        image.Location.Y + (row * image.Rows[0].Height) + 1
                    );
                    // Agregar el rectángulo negro al formulario
                    Controls.Add(blackRectangles[col][row]);
                }
            }
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            // Restablecer todos los rectángulos negros a invisible
            foreach (var rectangle in blackRectangles)
            {
                foreach (var box in rectangle)
                {
                    box.Visible = false;
                }
            }
    
            // Seleccione aleatoriamente dos filas en cada columna y establezca los rectángulos negros correspondientes en visible
            Random rand = new Random();
            for (int col = 0; col < 3; col++)
            {
                var availableRows = Enumerable.Range(0, 6).ToList();
                for (int i = 0; i < 2; i++)
                {
                    int rowIndex = rand.Next(availableRows.Count);
                    int row = availableRows[rowIndex];
                    availableRows.RemoveAt(rowIndex);
                    blackRectangles[col][row].Visible = true;
                }
            }
        }
    }
    

Comments are closed.