// Обработка событий мыши на клетки игрового поля private void GameStart_MouseClick(object sender, MouseEventArgs e) { if ((e.X < 498) && (e.Y < 498)) { if (!button1.Visible) { return; } setShip(e); return; } Cell cell = null; if ((e.X <= 1100) && (e.X > 600) && (e.Y < 498)) { if (!is_your_turn) { return; } if (e.Button.ToString() == "Left") { cell = opponentfield.getCellByCoordinate(e.X - 600, e.Y); string msg = "shot:" + cell.getX().ToString() + '_' + cell.getY().ToString(); sendData(msg); string result = ""; try { result = receiveData(); } catch { MessageBox.Show("Проблемы с сервером"); this.Close(); } Graphics g = CreateGraphics(); if (result == "true") { cell.setState(5); cell.draw(g); if (opponentfield.checkFinishOpponent()) { MessageBox.Show("Победа " + this.Text.ToString() + '!'); this.Close(); } } else { cell.setState(1); cell.draw(g); is_your_turn = false; WhoTurnLabel.Text = "Сейчас ход противника"; WhoTurnLabel.Refresh(); // На поражение чекаем в waitForShot Thread clientThread = new Thread(new ThreadStart(waitForShot)); clientThread.Start(); } } } }
// Проверка соседствующих клеток на наличие кораблей private void Checkships(Cell cell) { Cell cell1; Graphics g = CreateGraphics(); int mainX = cell.getX(); int mainY = cell.getY(); for (int i = mainX - 50; i <= mainX + 50; i += 100) { if (i <= 0) { continue; } if (i >= 498) { continue; } for (int j = mainY - 50; j <= mainY + 50; j += 100) { if (j <= 0) { continue; } if ((i == mainX) && (j == mainY)) { continue; } if (j >= 498) { continue; } cell1 = startfield.getCellByCoordinate(i, j); if (cell1.getState() == 2) { MessageBox.Show("Боевые корабли соседствуют друг с другом!"); cell.setState(0); } } } }