예제 #1
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();
        }
예제 #2
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);
        }
예제 #3
0
        internal async Task<LevelBeschreibung> MitspielerFinden(LevelBeschreibung meineLevelBeschreibung)
        {
            /* reihenfolge der levelbecshreibungs-werte und rückgabewerte:
             * siehe MitspielerFinden.csx cloud function skript */
            var levelParameter = $@"{ meineLevelBeschreibung.BergZufallszahl },{ meineLevelBeschreibung.BergMinHoeheProzent },{ meineLevelBeschreibung.BergMaxHoeheProzent },{ meineLevelBeschreibung.BergRauhheitProzent }";
            var findenAntwort = await this.RoundTrip(
                MultiplayerCloud.cloudBaseUrl,
                "HELO",
                new Tuple<string, string>("u", this.ownPlayerID.ToString("N").ToLowerInvariant()),
                new Tuple<string, string>("lp", levelParameter)
            );

            switch(findenAntwort.ToLowerInvariant())
            {
                case "heloed":
                    meineLevelBeschreibung.MitspielerStatus = MitspielerFindenStatus.HeloGesagt;
                    break;

                case "waiting":
                    meineLevelBeschreibung.MitspielerStatus = MitspielerFindenStatus.Wartend;
                    break;
                    
                case "allured":
                    meineLevelBeschreibung.MitspielerStatus = MitspielerFindenStatus.AndererNimmtBeiMirTeil;
                    break;
            }

            if(findenAntwort.StartsWith("joined,"))
            {
                /* in dem fall müssen wir die berg-erzeugungswerte vom anderen übernehmen,
                 * damit unsere level gleich ausschauen */
                var bestandTeile = findenAntwort.Split(',');
                meineLevelBeschreibung.MitspielerStatus = MitspielerFindenStatus.IchNehmeBeiAnderemTeil;
                this.joinedSessionID = Guid.Parse(bestandTeile[1]);
                meineLevelBeschreibung.BergZufallszahl = int.Parse(bestandTeile[2]);
                meineLevelBeschreibung.BergMinHoeheProzent = int.Parse(bestandTeile[3]);
                meineLevelBeschreibung.BergMaxHoeheProzent = int.Parse(bestandTeile[4]);
                meineLevelBeschreibung.BergRauhheitProzent = int.Parse(bestandTeile[5]);
            }

            this.IsOnlineGame = meineLevelBeschreibung.MitspielerStatus == MitspielerFindenStatus.AndererNimmtBeiMirTeil || meineLevelBeschreibung.MitspielerStatus == MitspielerFindenStatus.IchNehmeBeiAnderemTeil;

            return meineLevelBeschreibung;
        }
예제 #4
0
 private void LevelNamenZeigen(LevelBeschreibung levelBeschreibung)
 {
     this.PlayerNames.Text = $"{ levelBeschreibung.MissionsNummer }-{ levelBeschreibung.LevelNummerInMission }: { levelBeschreibung.LevelName }";
     this.PlayerNames.Show();
 }