void BuildEnemyField(TableLayoutPanel field) { Action <Button> onClick = (b) => { if (world.GameState == GameStates.Game) { if (!world.canShoot) { MessageBox.Show("Больше нельзя стрелять"); return; } var shotAttempt = world.TryShoot(field.GetCellPosition(b).Row, field.GetCellPosition(b).Column); if (!shotAttempt) { MessageBox.Show("Сюда нельзя стрелять"); return; } var cell = world.enemyField[field.GetCellPosition(b).Row, field.GetCellPosition(b).Column]; b.Image = Converter.GetResource(cell); listBox1.ForeColor = Color.Black; listBox1.Items.Add($"Вы стреляете по позиции X: {field.GetCellPosition(b).Row} Y: {field.GetCellPosition(b).Column}"); if (Ship.IsShip(cell)) { listBox1.Items.Add("Вы подбили корабль!"); if (Ship.IsDead(world.enemyField, new Point(field.GetCellPosition(b).Row, field.GetCellPosition(b).Column))) { listBox1.Items.Add("Вы потопили корабль!"); } } else { listBox1.Items.Add("Промах"); } UpdateListBox(); if (world.canShoot) { endTurn.BackColor = Color.Orange; endTurn.Text = "Передать ход"; } else { endTurn.BackColor = Color.GreenYellow; endTurn.Text = "Ход завершен"; } endTurn.Enabled = true; if (world.enemyShipCount == 0) { MessageBox.Show("ПОБЕДА!!!"); listBox1.Items.Add("Победа!"); return; } } }; FieldConstructor.BuildField(field, onClick); }
void BuildPlayerField(TableLayoutPanel field) { Action <Button> onClick = (b) => { if (world.GameState == GameStates.Preparing) { if (selectedShip == null) { MessageBox.Show("Выберите корабль"); } else if (selectedShip.Item3 == 0) { MessageBox.Show("Все корабли этого типа уже расставлены"); } else { var shipPlaced = world.TryPlaceShip(field.GetCellPosition(b).Row, field.GetCellPosition(b).Column, selectedShip.Item4, direction); if (!shipPlaced) { if (world.GetPlacedShipCount() == world.playerShipCount) { MessageBox.Show("Все корабли расставлены"); } else { MessageBox.Show("Здесь нельзя разместить корабль"); } } else { if (selectedShip.Item4 == 1) { b.Image = Converter.GetResource(world.playerField[field.GetCellPosition(b).Row, field.GetCellPosition(b).Column]); } else { var x = field.GetCellPosition(b).Row; var y = field.GetCellPosition(b).Column; b.Image = Converter.GetResource(world.playerField[x, y]); for (var i = 1; i < selectedShip.Item4; i++) { if (direction == ShipDirection.Right) { var nextButton = PlayerField.Controls[(y + i) * 10 + x] as Button; nextButton.Image = Converter.GetResource(world.playerField[x, y + i]); } else { var nextButton = PlayerField.Controls[y * 10 + x - i] as Button; nextButton.Image = Converter.GetResource(world.playerField[x - i, y]); } } } UpdateSelectedTuple(selectedShip, selectedShip.Item3 - 1); selectedShip.Item2.Text = selectedShip.Item3.ToString(); } } } //UpdateCell(field.GetCellPosition(b).Row, field.GetCellPosition(b).Column, field, world.playerField); }; FieldConstructor.BuildField(field, onClick); }