Exemplo n.º 1
0
        // použití tablelayoutpanelu (obdobné jako Java Grid Layout) aplikace se nehorázně zasekává -> ukázka automatického resizování buňěk
        // imho je lepší použít klasický panel, práce s tablelayoutpanelem je sice jednodušší a
        //nastaví si sám velikost jednotlivých buněk, avšak hrozně se to seká, nedoporučuju používat pro tyto účely (snažil sem se aby byl výsledek shodný ve všech jazycích)
        public void createField()
        {
            _form.field = new TableLayoutPanel();
            _form.field.CellBorderStyle = TableLayoutPanelCellBorderStyle.Outset;
            _form.field.AutoSize        = true;
            _form.field.Dock            = DockStyle.Fill;
            _form.field.GrowStyle       = TableLayoutPanelGrowStyle.FixedSize;

            _form.field.ColumnCount = _xLength;
            _form.field.RowCount    = _yLength;

            this.generateMines();
            _buttons = new MineButton[_xLength, _yLength];

            for (int y = 0; y < _yLength; y++)
            {
                // mění velikost řádku dle velikosti celé tabulky
                RowStyle rowstyle = new RowStyle(SizeType.Percent, (float)(100 / _xLength));
                _form.field.RowStyles.Add(rowstyle);

                for (int x = 0; x < _xLength; x++)
                {
                    // mení velikost sloupce v závislosti na celé tabulce
                    ColumnStyle colstyle = new ColumnStyle(SizeType.Percent, (float)(100 / _xLength));
                    _form.field.ColumnStyles.Add(colstyle);

                    _buttons[x, y]            = new MineButton(x, y);
                    _buttons[x, y].MouseDown += new MouseEventHandler(Mines_MouseDown);

                    _form.field.Controls.Add(_buttons[x, y], x, y);
                }
            }

            _form.Controls.Add(_form.field);
        }
Exemplo n.º 2
0
        // událost stisku tlačítka myši
        private void Mines_MouseDown(object sender, MouseEventArgs e)
        {
            // přetypování objektu který vyvolal tento event (tlačítko) na MineButton (přístup k souřadnícím)
            MineButton minebutton = (MineButton)sender;

            // levé tlačítko - lze vyvolat pokud je tlačítko aktivní a není označeno uživatelem za minové
            if ((e.Button == MouseButtons.Left) && (minebutton.Text != "?"))
            {
                minebutton.Enabled = false;

                // kontrola miny
                if (_minesArray[minebutton._x, minebutton._y])
                {
                    this.showField();
                    _form.timer1.Enabled = false;

                    if (MessageBox.Show("Prohrál jsi, na živu si vydržel po dobu: " + _form.time + "s!\nPak tě mina roztrhala na kusy.\n\nChceš to zkusit znovu?", "Prohra", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {
                        Application.Restart();
                    }
                    else
                    {
                        Application.Exit();
                    }
                }
                else
                {
                    minebutton.BackColor = Mines.getColor(this.checkMinesAround(minebutton._x, minebutton._y));
                    minebutton.Text      = this.checkMinesAround(minebutton._x, minebutton._y).ToString();

                    // pokud má v okolí nulový počet min najde v jeho okolí další s touto vlastností
                    if (this.checkMinesAround(minebutton._x, minebutton._y) == 0)
                    {
                        this.showFree(minebutton._x, minebutton._y);
                    }

                    // zkontroluje počet aktivních tlačítek a vyhodnotí vítězství
                    if (this.checkVictory())
                    {
                        this.showField();
                        _form.timer1.Enabled = false;

                        if (MessageBox.Show("Vyhrál jsi v čase: " + _form.time + "s!\nMáš schopnosti superhrdiny.\n\nHrát znovu?", "Výhra", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                        {
                            Application.Restart();
                        }
                        else
                        {
                            Application.Exit();
                        }
                    }
                }
            }
            else if (e.Button == MouseButtons.Right)// pravé tlačítko -> označení tlačítka uživatelem za minové
            {
                if (minebutton.Text == "?")
                {
                    minebutton.Text = "";
                }
                else
                {
                    minebutton.Text = "?";
                }
            }
        }