예제 #1
0
        /// <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;
        }
예제 #2
0
        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;
        }