/// <summary> /// /// </summary> /// <param name="e"></param> public void ReceiveShot(AimAndFireEventArgs e) { //erhält eine Kordinate, wo hingeschossen wurde //und fragt jedes seine Schiffe, ob es an dieser Stelle getroffen wurde Impact result = new Impact(); for (int i = 0; i < fleet.Ships.Length; i++) { result = fleet.Ships[i].TryToGetHit(e.Coord); if (result.HitDetection != HitDetection.Miss) //wenn ein Schiff getroffen wurde, { // müssen wir nicht mehr prüfen, break; //ob ein anderes Schiff getroffen wurde } } if (result.HitDetection == HitDetection.Sink) //wenn das getroffene schiff versenkt wurde, { //dann prüfen ob dieses Versenken das Spiel entschieden hat bool defeat = false; for (int i = 0; i < fleet.Ships.Length; i++) { defeat = fleet.Ships[i].Destroyed; if (!defeat) break; } if (defeat) { Program.Winner = Program.DetermineWinner(this._PLAYERTYPE); } } if (result.HitDetection == HitDetection.Miss) //wenn kein Schiff getroffen wurde, { // kann auch kein schuff sagen wo es getroffen wurde Coord[] coords = new Coord[1] { e.Coord }; //also müssen wir die impact-Koordinate selbst angeben result.Coords = coords; } this.RefreshTiles(result.Coords, result.HitDetection); this.Redraw(); e.Impact = result; }
public Impact TryToGetHit(Coord coord) { // ermittelt anhand einer Koordinate, ob ein treffer an dieser Koordinate Das schiff trifft, verfehlt, oder versenkt. Impact impactResult = new Impact(); impactResult.HitDetection = HitDetection.Miss; for (int i = 0; i < this._size; i++) { if (Coord.Equals(this.bulkheads[i].Coord, coord)) //Bulkhead wurde getroffen { this.bulkheads[i].ReceiveHit(); bool sunk=false; for (int j = 0; j < this._size; j++) //prüfen, ob dieser Treffer das Schiff versenkt { sunk = this.bulkheads[j].Damaged; if (!sunk) break; } if (sunk) //wurde das Schiff versenkt, geben wir die Koordinaten zurück { //und stellen das schiff auf versenkt impactResult.HitDetection = HitDetection.Sink; impactResult.Coords = this.GetCoords; this._destroyed = true; return impactResult; } else { impactResult.HitDetection = HitDetection.Hit; Coord[] coords = new Coord[1]; coords[0] = coord; impactResult.Coords = coords; return impactResult; } } } //wenn nach Durchlaufen aller Bulkheads keiner getroffen wurde impactResult.HitDetection = HitDetection.Miss; // glauben wir, dass dieses schiff nicht getroffen wurde return impactResult; }