public void GetTurn(int x, int y) { if (_game != null) { if (_game.field.GetCell(x, y) == Cell.Empty) { _game.field.SetCell(x, y, Cell.Missed); try { _callback.UpdateYourField(x, y, Cell.Missed); } catch (Exception) { } try { _game.Opponent.UpdateOpponentField(x, y, Cell.Missed); } catch (Exception) { } YouTurn(); return; } if (_game.field.GetCell(x, y) == Cell.DeadShip || _game.field.GetCell(x, y) == Cell.Fire || _game.field.GetCell(x, y) == Cell.Missed) { _game.Opponent.AlreadyClicked(); _game.Opponent.YouTurn(); return; } List<Point> list = new List<Point>(); list.Add(new Point(x, y)); _game.field.SetCell(x, y, Cell.Fire); bool killed = true; for (int i = 0; i < list.Count; i++) { int lx = list[i].x; int ly = list[i].y; if (lx > 0) { if (_game.field.GetCell(lx-1, ly) == Cell.Ship) { killed = false; break; } if (_game.field.GetCell(lx-1, ly) == Cell.Fire && !ListContained(list, lx-1, ly)) { list.Add(new Point(lx - 1, ly)); } } if (lx < 9) { if (_game.field.GetCell(lx + 1, ly) == Cell.Ship) { killed = false; break; } if (_game.field.GetCell(lx + 1, ly) == Cell.Fire && !ListContained(list, lx + 1, ly)) { list.Add(new Point(lx + 1, ly)); } } if (ly > 0) { if (_game.field.GetCell(lx, y-1) == Cell.Ship) { killed = false; break; } if (_game.field.GetCell(lx, ly-1) == Cell.Fire && !ListContained(list, lx, ly-1)) { list.Add(new Point(lx, ly-1)); } } if (ly < 9) { if (_game.field.GetCell(lx, ly+1) == Cell.Ship) { killed = false; break; } if (_game.field.GetCell(lx, ly+1) == Cell.Fire && !ListContained(list, lx, ly+1)) { list.Add(new Point(lx, ly+1)); } } } if (!killed) { try { _callback.UpdateYourField(x, y, Cell.Fire); } catch (Exception) { } try { _game.Opponent.UpdateOpponentField(x, y, Cell.Fire); } catch (Exception) { } _game.Opponent.YouTurn(); return; } for (int i = 0; i < list.Count; i++) { int lx = list[i].x; int ly = list[i].y; if (lx > 0) { if (_game.field.GetCell(lx - 1, ly) == Cell.Empty) { _game.field.SetCell(lx - 1, ly, Cell.Missed); try { _callback.UpdateYourField(lx - 1, ly, Cell.Missed); } catch (Exception) { } try { _game.Opponent.UpdateOpponentField(lx - 1, ly, Cell.Missed); } catch (Exception) { } } } if (lx > 0 && ly > 0) { if (_game.field.GetCell(lx - 1, ly-1) == Cell.Empty) { _game.field.SetCell(lx - 1, ly-1, Cell.Missed); try { _callback.UpdateYourField(lx - 1, ly-1, Cell.Missed); } catch (Exception) { } try { _game.Opponent.UpdateOpponentField(lx - 1, ly-1, Cell.Missed); } catch (Exception) { } } } if (ly > 0) { if (_game.field.GetCell(lx, ly-1) == Cell.Empty) { _game.field.SetCell(lx, ly-1, Cell.Missed); try { _callback.UpdateYourField(lx, ly-1, Cell.Missed); } catch (Exception) { } try { _game.Opponent.UpdateOpponentField(lx, ly-1, Cell.Missed); } catch (Exception) { } } } if (ly > 0 && lx < 9) { if (_game.field.GetCell(lx+1, ly-1) == Cell.Empty) { _game.field.SetCell(lx+1, ly-1, Cell.Missed); try { _callback.UpdateYourField(lx+1, ly-1, Cell.Missed); } catch (Exception) { } try { _game.Opponent.UpdateOpponentField(lx+1, ly-1, Cell.Missed); } catch (Exception) { } } } if (lx < 9) { if (_game.field.GetCell(lx+1, ly) == Cell.Empty) { _game.field.SetCell(lx+1, ly, Cell.Missed); try { _callback.UpdateYourField(lx+1, ly, Cell.Missed); } catch (Exception) { } try { _game.Opponent.UpdateOpponentField(lx+1, ly, Cell.Missed); } catch (Exception) { } } } if (lx < 9 && ly < 9) { if (_game.field.GetCell(lx+1, ly+1) == Cell.Empty) { _game.field.SetCell(lx+1, ly+1, Cell.Missed); try { _callback.UpdateYourField(lx+1, ly+1, Cell.Missed); } catch (Exception) { } try { _game.Opponent.UpdateOpponentField(lx+1, ly+1, Cell.Missed); } catch (Exception) { } } } if (ly < 9) { if (_game.field.GetCell(lx, ly+1) == Cell.Empty) { _game.field.SetCell(lx, ly+1, Cell.Missed); try { _callback.UpdateYourField(lx, ly+1, Cell.Missed); } catch (Exception) { } try { _game.Opponent.UpdateOpponentField(lx, ly+1, Cell.Missed); } catch (Exception) { } } } if (lx > 0 && ly < 9) { if (_game.field.GetCell(lx-1, ly+1) == Cell.Empty) { _game.field.SetCell(lx-1, ly+1, Cell.Missed); try { _callback.UpdateYourField(lx-1, ly+1, Cell.Missed); } catch (Exception) { } try { _game.Opponent.UpdateOpponentField(lx-1, ly+1, Cell.Missed); } catch (Exception) { } } } _game.field.SetCell(lx, ly, Cell.DeadShip); try { _callback.UpdateYourField(lx, ly, Cell.DeadShip); } catch (Exception) { } try { _game.Opponent.UpdateOpponentField(lx, ly, Cell.DeadShip); } catch (Exception) { } } _game.ships--; if (_game.ships == 0) { try { _game.Opponent.Win(); } catch (Exception) { } try { _callback.Loose(); } catch (Exception) { } Client client = _game.Opponent; _game = null; client.JoinTo(this); return; } _game.Opponent.YouTurn(); return; } }
public Client(IClientCallback callback, string name) { this._callback = callback; this._name = name; this._GUID = Guid.NewGuid().ToString(); callback.LogIn(this._GUID); foreach (var room in Client.Rooms) { callback.RoomCreated(room); } _room = null; _game = null; _ready = false; }
public void YouCheated() { _game = null; try { Callback.YouCheated(); } catch (Exception) { }; }
public Game LetsPlay(Client opponent) { if (!HaveGame) { _game = new Game(opponent); } _ready = false; return new Game(this); }
public void LeaveGame() { if (_game != null) { _game.Opponent.YouCheated(); } _game = null; }
public void JoinTo(Client opponent) { _game = opponent.LetsPlay(this); _ready = false; }