Autor Beitrag
DasHerz
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 30.11.09 13:23 
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
ausblenden 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:
ausblenden 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;

                      // usw...
             
            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:
ausblenden 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
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 30.11.09 19:13 
:welcome:

Nimm ein einziges Image zur Darstellung. Die Bitmaps lädst du über BitmapImage und speicherst sie in einem Array, bei Bedarf wählst du davon eines aus und weist es der Source-Property des Images zu.


PS: Ich weiß nicht, aber ist WPF nicht ein wenig happig für einen Anfänger :nixweiss: ? Ich würde eigentlich jedem empfehlen, erst einmal mit WinForms anzufangen.

_________________
>λ=
DasHerz Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 03.12.09 09:55 
Hallo, danke für deine Antowrt.

Hab bisschen rumprobiert aber ich scheiter momentan hier:

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Die Bitmaps lädst du über BitmapImage und speicherst sie in einem Array.



ich lade das bitmap also so
ausblenden C#-Quelltext
1:
2:
3:
4:
BitmapImage Fehler1 = new BitmapImage();
            Fehler1.BeginInit();
            Fehler1.UriSource = new Uri(@"Hangman0.png");
            Fehler1.EndInit();

aber wie speicher ich es dann in einen Array?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 03.12.09 11:23 
Ich glaube nicht, dass das hier der richtige Ort ist, um den Umgang mit Arrays zu erlernen :| .
Das gehört zu den absoluten Grundlagen, die dir ein Buch wie Galileos Openbook besser beibringen sollte als ein Forum.

_________________
>λ=