예제 #1
0
        // Costruttore che inizializza i componenti del form
        public MainView()
        {
            InitializeComponent();

            // creazione e inizializzazione di un campo minato interagibile di dimensioni massime
            _interactableMinefield = new InteractableZone[Minefield.MaxSide, Minefield.MaxSide];
            for (int y = 0; y < Minefield.MaxSide; y++)
            {
                for (int x = 0; x < Minefield.MaxSide; x++)
                {
                    // si crea una zona interagibile e se ne impostano alcune proprietà
                    _interactableMinefield[x, y] = new InteractableZone(x, y)
                    {
                        Enabled = false,
                        Visible = false
                    };
                    _interactableMinefield[x, y].MouseClick += InteractableZoneMouseClicked;

                    // si calcola e si imposta la posizione della zona interagibile
                    int positionX = EdgeSpacing + (_interactableMinefield[x, y].Width * x);
                    int positionY = TopEdgeSpacing + (_interactableMinefield[x, y].Height * y);
                    _interactableMinefield[x, y].Location = new Point(positionX, positionY);
                    // si aggiunge la zona interagibile alla raccolta di controlli del form
                    Controls.Add(_interactableMinefield[x, y]);
                }
            }
        }
예제 #2
0
        // Metodo che segnala quando una zona interagibile nel form è stata cliccata dall'utente
        private void InteractableZoneMouseClicked(object sender, MouseEventArgs e)
        {
            // conversione esplicita del riferimento al mittente in zona interagibile
            InteractableZone zoneClicked = (InteractableZone)sender;

            // si segnala che una zona interagibile nel form è stata cliccata dall'utente
            if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Right)
            {
                if (InteractableZoneClick != null)
                {
                    try
                    {
                        InteractableZoneClick(this, new InteractableZoneEventArgs(zoneClicked.X,
                                                                                  zoneClicked.Y,
                                                                                  zoneClicked.Status,
                                                                                  e.Button));
                    }
                    catch { }
                }
            }
        }