/// <summary> /// Aktuelle Spielfeldinformationen in der UI darstellen /// </summary> /// <param name="spielfeld"></param> public void SetzeSpielfeld(Spielfeld spielfeld) { //Ankreuzfelder in Spielfarbe setzen int zeile = 0; foreach (var ankreuzFelderSpielfarbe in spielfeld.AnkreuzFelderSpielfarbe) { Spielfarbe spielfarbe = ankreuzFelderSpielfarbe.Key; int spalte = 0; foreach (var ankreuzFeld in ankreuzFelderSpielfarbe.Value) { // Create the tile TileAnkreuzFeldSpielfarbe tile = new TileAnkreuzFeldSpielfarbe(ankreuzFeld, spielfarbe); // Add tap recognition. TapGestureRecognizer tapGestureRecognizer = new TapGestureRecognizer(); tapGestureRecognizer.Tapped += OnTileTappedAsync; tile.TileContentView.GestureRecognizers.Add(tapGestureRecognizer); gridAnkreuzFelderSpielfarben.Children.Add(tile.TileContentView, spalte, zeile); spalte++; } zeile++; } //Ankreuzfelder der Fehlversuche setzen int spalteAnkreuzFeldFehlversuch = 0; foreach (var ankreuzFeld in spielfeld.AnkreuzFelderFehlversuche) { // Create the tile TileAnkreuzFeldFehlversuch tile = new TileAnkreuzFeldFehlversuch(spalteAnkreuzFeldFehlversuch, ankreuzFeld.IstAngekreuzt, ankreuzFeld.IstNichtAnkreuzbar); // Add tap recognition. TapGestureRecognizer tapGestureRecognizer = new TapGestureRecognizer(); tapGestureRecognizer.Tapped += OnTileAnkreuzFeldFehlversuchTappedAsync; tile.TileContentView.GestureRecognizers.Add(tapGestureRecognizer); gridFehlversuche.Children.Add(tile.TileContentView, spalteAnkreuzFeldFehlversuch, 0); spalteAnkreuzFeldFehlversuch++; } }
/// <summary> /// Eventverarbeitung wenn ein Ankreuzfeld in Spielfarbe getapped wurde /// </summary> /// <param name="sender">View der getapped wurde</param> /// <param name="e"></param> async void OnTileTappedAsync(object sender, EventArgs args) { if (isBusy) { return; } isBusy = true; //Ermitteln welches TileAnkreuzFeldSpielfarbe zum getappeden View gehört View tileView = (View)sender; TileAnkreuzFeldSpielfarbe tappedTile = TileAnkreuzFeldSpielfarbe.Dictionary[tileView]; //Für User-Feedback Animation starten: Scale ContentView out and in await tappedTile.TileContentView.ScaleTo(1.5, 250, Easing.SinOut); await tappedTile.TileContentView.ScaleTo(1, 250, Easing.SinIn); Tapped?.Invoke(tappedTile.Spielfarbe, tappedTile.Augenzahl); isBusy = false; }