Xamarin Forms: Как создать матрицу головоломки поиска слова? - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь внедрить игру поиска слов в мое приложение xamarin. Только слова получают, когда я звоню в мою службу. С этими словами, как я могу сгенерировать матрицу букв?

Мне нужна матрица 10x10 букв, как показано на скриншоте ниже:

enter image description here

Слова спрятаны внутри скриншота, подобного матрице ниже (Стивен , Николас, Амвросий, Хуан Д iego, Ксавье, Сильвестр I):

enter image description here

Слова можно вставить в любой Формат: справа налево, слева направо, сверху вниз, снизу вверх или в поперечном направлении.

Есть ли какой-либо инструмент для этой функции? Мне нужно выбрать буквы, как показано на скриншоте 2, чтобы играть в эту игру.

Ответы [ 2 ]

0 голосов
/ 06 января 2020

Вы можете использовать CollectionView с ItemsLayout и Span для него. Отметьте MSDocs

. Для выбора букв можно использовать SelectionMode как «Несколько».

Код Xaml:

       <CollectionView
            SelectionMode="Multiple"
            ItemsSource="{Binding LettersCollection}">
            <CollectionView.ItemsLayout>
                <GridItemsLayout Orientation="Horizontal"
                    Span="10" />
            </CollectionView.ItemsLayout>
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Label Text="{Binding}"/>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>

Надеюсь, что это может помочь вашему требованию.

0 голосов
/ 06 января 2020

Вы можете использовать Сетка

Например

    public Page2()
    {
        InitializeComponent();

        // I used static source , you could get it from service
        var strList = new string[] { "A", "B", "C" , "D" ,"E" ,"F" ,"G" ,"H" ,"I",..... };


        CreateGame(strList , 10);
    }



    void CreateGame(string[] list , int count)
    {
        var grid = new Grid();
        grid.BackgroundColor = Color.Red;
        grid.HorizontalOptions = LayoutOptions.FillAndExpand;
        grid.SetBinding(Button.HeightRequestProperty, new Binding("Width", source: grid));



        for (int i = 0; i < count; i++)
        {
            for(int j = 0; j < count; j ++)
            {
                grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Auto) });



                var Rowbutton = new Button { Text = list[i* count + j ] };
                Rowbutton.HorizontalOptions = LayoutOptions.FillAndExpand;
                Rowbutton.VerticalOptions = LayoutOptions.FillAndExpand;
                Rowbutton.SetBinding(Button.HeightRequestProperty,new Binding("Width",source:Rowbutton));
                grid.Children.Add(Rowbutton, j, i);
            }
            grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
        }



        Content = new StackLayout { Children = { grid },HorizontalOptions= LayoutOptions.FillAndExpand,VerticalOptions = LayoutOptions.FillAndExpand };
    }
}
...