Hallo zusammen,
zwar gehts es in meiner Frage auch um WPF/XAML aber ich denke man kann es unter Anfängerfrage verbuchen
Kurze Einleitung:
Ich habe ein Hangman-Programm geschrieben, das eigentlich auch geht.
Jetzt will ich den Code vereinfachen/verbessern.
Im Prinzip ist es ganz einfach aufgebaut:
- Man hat die Buchstabenreihe und jeweils auf einen Buchstaben klicken.
- Ist der Buchstabe falsch wird ein "Counter" hochgezählt
- Ist der Buchstabe falsch wird ein "Ncounter" runtergezählt
- Erreichen Counter bzw. Ncounter einen bestimmten Wert, erscheint ein spezifisches Bild.
Hier der Teil meines XAML Codes
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9:
| <Image Name="Fehler1" Source ="Hangman0.png" Grid.Row="2" Grid.ColumnSpan="3" Margin="20,25,3,86" Grid.Column="3" Visibility="Hidden"/> <Image Name="Fehler2" Source ="Hangman1.png" Grid.Row="2" Grid.ColumnSpan="3" Margin="20,25,3,86" Grid.Column="3" Visibility="Hidden"/> <Image Name="Fehler3" Source ="Hangman2.png" Grid.Row="2" Grid.ColumnSpan="3" Margin="20,25,3,86" Grid.Column="3" Visibility="Hidden"/> <Image Name="Fehler4" Source ="Hangman3.png" Grid.Row="2" Grid.ColumnSpan="3" Margin="20,25,3,86" Grid.Column="3" Visibility="Hidden"/> <Image Name="Fehler5" Source ="Hangman4.png" Grid.Row="2" Grid.ColumnSpan="3" Margin="20,25,3,86" Grid.Column="3" Visibility="Hidden"/> <Image Name="Fehler6" Source ="Hangman5.png" Grid.Row="2" Grid.ColumnSpan="3" Margin="20,25,3,86" Grid.Column="3" Visibility="Hidden"/> <Image Name="Fehler7" Source ="Hangman6.png" Grid.Row="2" Grid.ColumnSpan="3" Margin="20,25,3,86" Grid.Column="3" Visibility="Hidden"/> <Image Name="Gameover" Source="gameover.gif" Grid.Row="1" Grid.ColumnSpan="10" Margin="20.01,18.676,-10.005,-33.35" Visibility="Hidden" Grid.RowSpan="2" /> <Image Name="Highscore" Source="highscore.gif" Grid.ColumnSpan="10" Margin="-13,0,21,18" Visibility="Hidden" Grid.RowSpan="3" /> |
Wie ihr seht sind die Bilder voher versteckt und werden dann später erst sichtbar.
Mein alter C# Code sah ungefähr so aus:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| public void A(object sender, RoutedEventArgs e) { Letter3.Text = "A"; ncounter -= 1; if (counter == 1) Fehler1.Visibility = System.Windows.Visibility.Visible; if (counter == 2) Fehler2.Visibility = System.Windows.Visibility.Visible;
if (counter == 8) Gameover.Visibility = System.Windows.Visibility.Visible; if (ncounter == -8) Highscore.Visibility = System.Windows.Visibility.Visible; ItemA.IsEnabled = false; } |
Wie ihr seht ziehmlich unübersichtlich, wenn das bei jedem Buchstaben stehen soll.
Also dachte ich mir, bau ich einen string ein:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| string[] fehlerarray = { "Fehler1", "Fehler2", "Fehler3", "Fehler4", "Fehler5", "Fehler6", "Fehler7" };
public void A(object sender, RoutedEventArgs e) { Letter3.Text = "A"; ncounter -= 1; if (counter > 0 && counter < 8) fehlerarray[counter].Visibility = System.Windows.Visibility.Visible; if (counter == 8) Gameover.Visibility = System.Windows.Visibility.Visible; if (ncounter == -8) Highscore.Visibility = System.Windows.Visibility.Visible; ItemA.IsEnabled = false; } |
Jetzt kommt aber die Fehlermeldung:
'string' does not contain a definition for 'Visibility' and no extension method 'Visibility' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?)
Wisst ihr wie ich mein Problem lösen kann?
Bzw. versteht ihr was ich erreichen will?
Danke schonmal an dieser Stelle.
Viele Grüße,
DasHerz