예제 #1
0
 private void UebungsspielVorbereiten()
 {
     this.spielPhase          = SpielPhase.WeltErzeugen;
     this.aktuelleLevelNummer = 0;
     this.WeltErzeugen.Center(this);
     this.WeltErzeugen.Show();
 }
예제 #2
0
        public Main()
        {
            this.InitializeComponent();
            this.Audio.AlleAudiosVorbereiten();
            this.Goodies.AlleGoodiesVorbereiten();
            this.levelBild   = new Bitmap(this.Width, this.Height, PixelFormat.Format24bppRgb);
            this.herzAnzeige = new Herzen(this, this.Goodies);
            var spielerNamen = SpielerNamen.ZufallsNamenspaar;

            this.spielerEins = new Spieler(this, this.levelBild)
            {
                Name  = spielerNamen.Item1,
                Farbe = Brushes.YellowGreen,
                X     = this.StandardSpielerEinsX,
                Y     = Main.spielerBasisHoehe
            };

            this.spielerZwei = new Spieler(this, this.levelBild)
            {
                Name  = spielerNamen.Item2,
                Farbe = Brushes.MistyRose,
                X     = this.StandardSpielerZweiX,
                Y     = Main.spielerBasisHoehe
            };

            this.spielPhase          = SpielPhase.StartBildschirm;
            this.aktuelleLevelNummer = 0;
        }
예제 #3
0
 private void MissionFortsetzen()
 {
     this.spielPhase = SpielPhase.WeltErzeugen;
     ++this.aktuelleLevelNummer;
     this.spielPhase = SpielPhase.WeltWirdErzeugt;
     this.ErzeugeDieWelt();
     this.LevelSpielen();
 }
예제 #4
0
        private void RundeAustragen(SchussEingabe schussEingabe)
        {
            /* den schuss ausführen und schauen (ob) was getroffen wurde */
            this.spielPhase = SpielPhase.SpielrundeAktiv;
            var schussErgebnis = this.Schiessen(schussEingabe);

            /* wenn keiner getroffen wurde, rollen tauschen,
             * der andere spieler ist dran */
            if (schussErgebnis.Ergebnis == SchussErgebnis.GegnerGekillt || schussErgebnis.Ergebnis == SchussErgebnis.SelbstErschossen)
            {
                if (this.SpielerWurdeGetroffen(schussErgebnis))
                {
                    if (this.spielPhase == SpielPhase.WeltErzeugen)
                    {
                        if (this.TurnierModus)
                        {
                            schussErgebnis.GetroffenerSpieler.WiederAuferstehen();
                            this.BeginInvoke(new Action(() => { this.MissionFortsetzen(); }));
                            return;
                        }
                        else
                        {
                            return;
                        }
                    }
                }
                else
                {
                    this.ZurueckZumHauptmenu();
                    return;
                }
            }
            else
            {
                /* falls ein berg getroffen wurde, kann es sein, dass der andere spieler
                 * den boden unter sich verloren hat, und tiefer fällt */
                if (schussErgebnis.Ergebnis == SchussErgebnis.BergGetroffen)
                {
                    Audio.GeraeuschAbspielen(Geraeusche.SchussEinschlag);
                    new Explosion(Color.FromArgb(new Random().Next(int.MaxValue)), 50).Noobsplosion(this, this.levelBild, this.ausgangsZustand, schussErgebnis.EinschlagsKoordinateX, schussErgebnis.EinschlagsKoordinateY);
                }
            }

            this.AusgangszustandWiederherstellen();
            using (var zeichenFlaeche = Graphics.FromImage(this.levelBild))
            {
                this.dranSeiender.Zeichnen(zeichenFlaeche);
                this.Gegner.Zeichnen(zeichenFlaeche);
            }

            this.SpielerFallen(this.Gegner);
            this.SpielerFallen(this.dranSeiender);
            this.Refresh();

            /* spieler wechseln sich jetzt ab */
            this.dranSeiender = this.Gegner;
            this.RundeVorbereiten();
        }
예제 #5
0
        private async void StartCloud_Click(object sender, EventArgs e)
        {
            this.spielPhase = SpielPhase.AufMitspielerWarten;
            this.WeltErzeugen.Hide();
            this.SpielerNamenZeigen();
            this.CloudVerbindung.Show();
            var mitspielerGefunden = false;

            do
            {
                var warteZustand = new LevelBeschreibung
                {
                    MitspielerStatus    = MitspielerFindenStatus.Wartend,
                    BergZufallszahl     = this.MultiplayerCloud.BergZufallszahl,
                    BergMinHoeheProzent = this.MindesthoeheProzent.Value,
                    BergMaxHoeheProzent = this.HoechstHoeheProzent.Value,
                    BergRauhheitProzent = this.RauheitsfaktorProzent.Value
                };

                warteZustand = await this.MultiplayerCloud.MitspielerFinden(warteZustand);

                switch (warteZustand.MitspielerStatus)
                {
                case MitspielerFindenStatus.HeloGesagt:
                    this.MitspielerFindenFortschritt.Value = 0;
                    break;

                case MitspielerFindenStatus.Wartend:
                    this.MitspielerFindenFortschritt.Value = new Random().Next(this.MitspielerFindenFortschritt.Maximum);
                    await Task.Delay(1500);

                    break;

                case MitspielerFindenStatus.AndererNimmtBeiMirTeil:
                    mitspielerGefunden = true;
                    this.meinSpieler   = this.spielerEins;
                    break;

                case MitspielerFindenStatus.IchNehmeBeiAnderemTeil:
                    /* in dem fall müssen wir die werte vom anderen übernehmen,
                     * damit wir das gleiche level haben wir er */
                    mitspielerGefunden = true;
                    this.meinSpieler   = this.spielerZwei;
                    this.MultiplayerCloud.BergZufallszahl = warteZustand.BergZufallszahl;
                    this.MindesthoeheProzent.Value        = warteZustand.BergMinHoeheProzent;
                    this.HoechstHoeheProzent.Value        = warteZustand.BergMaxHoeheProzent;
                    this.RauheitsfaktorProzent.Value      = warteZustand.BergRauhheitProzent;
                    break;
                }
            } while (!mitspielerGefunden);

            this.CloudVerbindung.Hide();
            this.KampfStarten();
        }
예제 #6
0
        private void ErzeugeDieWelt()
        {
            this.WeltErzeugen.Hide();
            this.ScorchGore.Hide();
            this.DerZornDerSanften.Hide();
            this.Copyright.Hide();
            this.SpielerNamenZeigen();
            this.SchussEingabefeld.Left = this.Width / 2 - this.SchussEingabefeld.Width / 2;
            this.ausgangsZustand        = new Bitmap(this.Width, this.Height, PixelFormat.Format24bppRgb);
            this.BackgroundImage        = this.levelBild;
            LevelBeschreibung levelBeschreibung;

            if (this.aktuelleLevelNummer == 0)
            {
                /* berg-steilheit und rauhheit und höhenprofil mit zufallszahlen bestimmen */
                levelBeschreibung = new LevelBeschreibung
                {
                    BergZufallszahl     = MultiplayerCloud.BergZufallszahl,
                    BergMinHoeheProzent = this.MindesthoeheProzent.Value,
                    BergMaxHoeheProzent = this.HoechstHoeheProzent.Value,
                    BergRauhheitProzent = this.RauheitsfaktorProzent.Value
                };
            }
            else
            {
                levelBeschreibung = LevelSequenzierer.ErzeugeLevelBeschreibung(this.aktuelleLevelNummer);
                this.LevelNamenZeigen(levelBeschreibung);
            }

            using (var zeichenFlaeche = Graphics.FromImage(this.levelBild))
            {
                LevelZeichner.Zeichne(this, this.levelBild, levelBeschreibung, zeichenFlaeche);

                /* nur zum test für fallenlassen / fallschirm! */
                if (this.aktuelleLevelNummer == 0)
                {
                    var goodie = new Goodie(this, this.levelBild, this.Goodies, GoodieWirkung.Chrom_Dreifachschuss)
                    {
                        X = 166
                    };

                    goodie.FallenLassen(zeichenFlaeche);
                }
            }

            this.Refresh();
            this.spielPhase = SpielPhase.SpielerFallenRundeBeginnt;
            this.AusgangszustandSichern();
            this.spielerEins.Positionieren(levelBeschreibung.SpielerPosition1, this.StandardSpielerEinsX);
            this.SpielerFallen(this.spielerEins);
            this.spielerZwei.Positionieren(levelBeschreibung.SpielerPosition2, this.StandardSpielerZweiX);
            this.SpielerFallen(this.spielerZwei);
        }
예제 #7
0
        private void MissionVorbereiten()
        {
            this.spielPhase = SpielPhase.WeltErzeugen;
#if DEBUG
            this.aktuelleLevelNummer = 3;
#else
            this.aktuelleLevelNummer = 1;
#endif
            this.spielPhase = SpielPhase.WeltWirdErzeugt;
            this.ErzeugeDieWelt();
            this.LevelSpielen();
        }
예제 #8
0
        private bool SpielerWurdeGetroffen(Treffer schussErgebnis)
        {
            this.Audio.GeraeuschAbspielen(Geraeusche.SchussEinschlag);
            new Explosion(Color.FromArgb(new Random().Next(int.MaxValue)), 175).Noobsplosion(this, this.levelBild, this.ausgangsZustand, schussErgebnis.EinschlagsKoordinateX, schussErgebnis.EinschlagsKoordinateY);
            var getroffenerSpieler = schussErgebnis.Ergebnis == SchussErgebnis.SelbstErschossen ? this.dranSeiender : this.Gegner;

            getroffenerSpieler.Schaden(this.dranSeiender.Waffe.SchadensPunkte);
            schussErgebnis.GetroffenerSpieler = getroffenerSpieler;
            schussErgebnis.ObsiegenderSpieler = object.ReferenceEquals(getroffenerSpieler, this.dranSeiender) ? this.Gegner : this.dranSeiender;
            using (var zeichenFlaeche = Graphics.FromImage(this.levelBild))
            {
                this.herzAnzeige.Zeichnen(
                    this,
                    zeichenFlaeche,
                    object.ReferenceEquals(getroffenerSpieler, this.spielerEins) ? getroffenerSpieler : null,
                    object.ReferenceEquals(getroffenerSpieler, this.spielerZwei) ? getroffenerSpieler : null
                    );
            }

            this.Refresh();
            if (getroffenerSpieler.Tot)
            {
                using (var weiterMachen = this.TurnierModus ? (Form) new LevelUebergang(schussErgebnis) : (Form) new UebungNocheinmal(schussErgebnis))
                {
                    switch (weiterMachen.ShowDialog(this))
                    {
                    case DialogResult.OK:
                        this.spielPhase = SpielPhase.WeltErzeugen;
                        return(true);

                    case DialogResult.Retry:
                        this.spielPhase = SpielPhase.WeltErzeugen;
                        return(false);

                    case DialogResult.Abort:
                        this.spielPhase = SpielPhase.StartBildschirm;
                        return(false);
                    }
                }
            }
            else
            {
                return(true);
            }

            return(false);
        }
예제 #9
0
        private async void RundeVorbereiten()
        {
            this.NameDesDranSeienden.Text = $"{ (object.ReferenceEquals(this.spielerEins,this.dranSeiender) ? "← " : string.Empty) }{ this.dranSeiender.Name }{ (object.ReferenceEquals(this.spielerZwei,this.dranSeiender) ? " →" : string.Empty) }";
            this.Winkel.Text = this.Ladung.Text = string.Empty;
            if (this.meinSpieler == null || this.dranSeiender == this.meinSpieler)
            {
                this.spielPhase = SpielPhase.Schusseingabe;
                this.SchussEingabefeld.Show();
                this.Winkel.Focus();
            }
            else
            {
                /* warten, bis der andere spieler online was gemacht hat */
                this.spielPhase = SpielPhase.AufOnlineSchussWarten;
                this.AufGegnerWarten.Show();
                var schussEingabe = await this.MultiplayerCloud.AufGegnerSchussWarten();

                this.AufGegnerWarten.Hide();
                this.RundeAustragen(schussEingabe);
            }
        }
예제 #10
0
 private void KampfStarten()
 {
     this.spielPhase = SpielPhase.WeltWirdErzeugt;
     this.ErzeugeDieWelt();
     this.LevelSpielen();
 }