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