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(); }
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); }
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; }
private void LevelNamenZeigen(LevelBeschreibung levelBeschreibung) { this.PlayerNames.Text = $"{ levelBeschreibung.MissionsNummer }-{ levelBeschreibung.LevelNummerInMission }: { levelBeschreibung.LevelName }"; this.PlayerNames.Show(); }