c# WPF游戏建议

本文关键字:游戏 WPF | 更新日期: 2023-09-27 18:03:20

我想创建一个游戏,在这个游戏中,给出了一个单词,但是缺少了一个字母,你需要从下面给出的字母中选择一个。作为c#的初学者,我发现很难做到这一点。现在,我有一个单词类,它有WordFull, LetterA, LetterB, LetterC, index(我需要把字母放进去)和一个CorrectLetter。然后,我加载这个word对象,我将字母一个接一个地放入文本框中,如果字母在单词(h[e] lo = 1)中的索引等于当前字母的索引属性(index = 1),那么它将显示空白带下划线的文本框。当你点击那个字母时,它会用CorrectLetter属性检查那个字母是否正确这就是我卡住的地方。我想把那个字母放在空文本框里。但我该如何选择呢?我想我做错了什么。博士TL;我想做一个字母游戏,我需要一个建议怎么做。我的XAML网格:

<TabItem Name="zaisti" Header="Vykdyti" IsSelected="True">
    <Grid Name="Grid">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*"/>
            <ColumnDefinition Width="1*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="7*"/>
            <RowDefinition Height="2*"/>
        </Grid.RowDefinitions>
        <Viewbox Grid.Row="0"  Grid.Column="0">
            <StackPanel Name="letters" Orientation="Horizontal">
            </StackPanel>
        </Viewbox>
        <Image Grid.Row="0" Grid.Column="1" Name="img" Margin="10" Source="pack://siteoforigin:,,,/pic.jpg"/>
        <Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Button.Click="Grid_Click">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Button Grid.Column="0" Margin="10">
                <Button.Content>
                    <Viewbox>
                        <Label Name="Option1" Content="{Binding LetterA}"></Label>
                    </Viewbox>
                </Button.Content>
            </Button>
            <Button Grid.Column="1" Margin="10">
                <Button.Content>
                    <Viewbox>
                        <Label Name="Option2" Content="{Binding LetterB}"></Label>
                    </Viewbox>
                </Button.Content>
            </Button>
            <Button Grid.Column="2" Margin="10">
                <Button.Content>
                    <Viewbox>
                        <Label Name="Option3" Content="{Binding LetterC}"></Label>
                    </Viewbox>
                </Button.Content>
            </Button>
        </Grid>

背后的代码:

public partial class MainWindow : Window
{
    List<Word> Words = new List<Word>()
    {
        ... data ...
    };
    int index = 0;
    public MainWindow()
    {
        InitializeComponent();
        pradzia.IsSelected = true;
        zaisti.IsEnabled = false;
    }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        zaisti.IsSelected = true;
        zaisti.IsEnabled = true;
        letters.Children.Clear();
        LoadWord(index);
        this.DataContext = Words[index];
    }
    private void Grid_Click(object sender, RoutedEventArgs e)
    {
        if (index == Words.Count() - 1) return;
        MessageBox.Show((((e.Source as Button).Content as Viewbox).Child as Label).Content.ToString());
        if ((((e.Source as Button).Content as Viewbox).Child as Label).Content.ToString() == Words[index].LetterCorrect)
        {
            letters.Children.Clear();
            LoadWord(++index);
            this.DataContext = Words[index];
        }
    }
    private void LoadWord(int i)
    {
        int a = 0;
        foreach (char l in Words[i].WordFull)
        {
            TextBlock letter = new TextBlock();
            letter.Foreground = new SolidColorBrush(Colors.Gray);
            letter.Text = l.ToString();
            letter.Margin = new Thickness(2);
            if (Words[i].index == a)
            {
                letter.Text = ((char)160).ToString() + ((char)160).ToString();
                // Create an underline text decoration. Default is underline.
                TextDecoration myUnderline = new TextDecoration();
                // Create a solid color brush pen for the text decoration.
                myUnderline.Pen = new Pen(Brushes.Red, 1);
                myUnderline.PenThicknessUnit = TextDecorationUnit.FontRecommended;
                // Set the underline decoration to a TextDecorationCollection and add it to the text block.
                TextDecorationCollection myCollection = new TextDecorationCollection();
                myCollection.Add(myUnderline);
                letter.TextDecorations = myCollection;
            }
            a++;
            letters.Children.Add(letter);
        }
    }
}

字类:

class Word
{
    public string WordFull { get; set; }
    public string LetterA { get; set; }
    public string LetterB { get; set; }
    public string LetterC { get; set; }
    public string LetterCorrect { get; set; }
    public int index { get; set; }
}

c# WPF游戏建议

根据我所看到的,我将执行以下操作

  • 将单个字母元素(包括下划线)的创建移动到它们自己的方法中,这些方法返回要显示的组件。
  • 当玩家选择正确的字母时,
    • 查找下划线元素,
    • 从字母视觉控制中删除它,
    • 并将其替换为正确的字母元素。

编辑-基于注释有几种方法可以访问Children集合中的元素。如果您知道实际的元素,

letters.Children.Remove(element);

将允许您删除指定的元素,或者

letters.Children[index];