IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Míny - Vygenerovanie pole

Tento článok je súčasťou nákupný programovacích jazykov C #, Java a game maker pri tvorbe klasických Min (Minesweeper) pozri: -> Miny aneb nákupný programovacích jazykov C #, Java, GM

Najprv je vhodné docieliť to, že zadáme šírku a výšku a vykreslí sa nám polia min.

C # a práce s tableLayoutem (Javovský ekvivalent GridLayout)

Použitím tejto komponenty síce docielite toho, že sa vám vygenerovaná tlačidla nádherne usporiadajú, ale ak budete chcieť potom resizovat väčšie tabuľku, už teraz hovorím, že je to strašne pomalé. C# všetko prepočítava znovu a hrozne sa to zasekáva.

// pole tlačítek
MineButton[,] _buttons = new MineButton[_xLength, _yLength];

// vytvoříme tablelayoutpanel a nastavíme mu základní vlastnosti
TableLayoutPanel field = new TableLayoutPanel();

// rámeček
field.CellBorderStyle = TableLayoutPanelCellBorderStyle.Outset;

// možnost automatické změny velikosti
field.AutoSize = true;

// table layout se roztáhne po celém formu
field.Dock = DockStyle.Fill;

// pevný počet řádků (nebudou se automaticky přidávat)
field.GrowStyle = TableLayoutPanelGrowStyle.FixedSize;

// počet řádků/sloupců
field.ColumnCount = _xLength;
field.RowCount = _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));
    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));
        field.ColumnStyles.Add(colstyle);

        // vytvoří se nové tlačítko a přidá se do pole
        _buttons[x, y] = new MineButton(x, y);
        _buttons[x, y].Text = " ";

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

Vytvoril som si nový komponent MineButton, ktorá navyše obsahuje informácie o svojej súradnici a má zmenený vzhľad. Komponent vytvoríme -> add Component, poděděním komponenty Button a prepísaním základných vlastností.

// vlastní komponenta dědící z tlačítka obsahující navíc informaci o souřadnicích a přepsaný vzhled
public partial class MineButton : Button
{
    public int _x;
    public int _y;

    public MineButton(int x, int y)
    {
        _x = x;
        _y = y;

        base.FlatAppearance.BorderSize = 0;
        base.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        base.BackColor = Color.CadetBlue;

        base.FlatAppearance.MouseOverBackColor = Color.LightSkyBlue;
        base.FlatAppearance.MouseDownBackColor = Color.LightGray;

        base.Margin = Padding.Empty;
        base.Dock = DockStyle.Fill;
    }
}

nastavenie okna

this.Width = mines._xLength * 50;
this.Height = mines._yLength * 50;

Java a jej GridLayout

Java má pre tieto účely vynikajúce GridLayout, ktorý automaticky prispôsobí prvky v ňom umiestnené a zmena veľkosti okna mu nerobí najmenší problém. Netreba toľko nastavovať a kód je o veľa kratšia ako v C #.

// vytvoření panelu s grid layoutem o patřičné velikosti
JPanel mines_field = new JPanel(new GridLayout(x_length,y_length));

// vytvoření pole tlačítek
JToggleButton buttons = new JToggleButton[x_length][y_length];

// a naplnění pole
for (int y = 0; y < y_length; y++)
{
    for (int x = 0; x < x_length; x++)
    {
        buttons[x][y] = new JToggleButton(" ");

        mines_field.add(buttons[x][y]);
    }
}

nastavenie okna

this.setTitle("Hledač min");
this.setSize(mines_field.x_length * 50, mines_field.y_length * 50);
this.setLocationRelativeTo(null);// vystředí okno
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Game maker a pridanie inštancií objektu podľa súradníc

V GM iba vytvoríme inštancia objektu tlačidla pričítaním súradníc. Nastavíme okno, aby nerobila problém zmena veľkosti okna.

// vytvoření pole
for (_x = 0; _x < x_length; _x += 1)
{
    for (_y = 0; _y < y_length; _y += 1)
    {
        instance_create(_x * spr_width + sprite_get_xoffset(spr_button), _y * spr_height + sprite_get_yoffset(spr_button), obj_button);
    }
}

Sprite tlačidla má rozmery 16x16 a má vycentrovaný origin.

nastavenie okna

spr_width = sprite_get_width(spr_button);
spr_height = sprite_get_height(spr_button);

view_wview[0] = x_length * spr_width;
view_hview[0] = y_length * spr_height;

window_set_size(x_length * spr_width, y_length * spr_height);
window_set_sizeable(true);
window_center();

Pokračovanie> Generujeme poľa min


 

Článok pre vás napísal David Jančík
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity