C# :: Aufgabe #197 :: Lösung #1

3 Lösungen Lösungen öffentlich
#197

Mischen von Spielkarten

Anfänger - C# von hollst - 14.01.2018 um 16:42 Uhr
Man schreibe eine GUI-Anwendung, die einen 52er Kartensatz mischt und die entstandene Reihenfolge anzeigt (BILD 2).
Die Anwendung soll zwei Befehlsknöpfe haben: MISCHEN und RESET. Mit RESET soll die Default-Reihenfolge angezeigt werden (BILD 1).

Einen Satz von Image-Dateien der Spielkarten könnt ihr z. B. unter http://www.nongnu.org/cardpics/cardpics.en.html herunterladen und darüber frei verfügen, sofern ihr eure Lösung nicht für kommerzielle Zwecke vermarkten wollt.
#1
vote_ok
von DBqFetti (2480 Punkte) - 15.01.2018 um 17:10 Uhr
Quellcode ausblenden XML-Code
<Window x:Class="KartenMischen.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:KartenMischen"
        mc:Ignorable="d"
        Title="MainWindow" Height="580" Width="1080" Loaded="Window_Loaded"
        >
    <DockPanel>
        <UniformGrid DockPanel.Dock="Bottom" Rows="1" Height="Auto" HorizontalAlignment="Right">
            <Button Name="btn_Reset" Click="btn_Reset_Click">Reset</Button>
            <Button Name="btn_Shuffle" Click="btn_Shuffle_Click">Mischen</Button>
        </UniformGrid>
        
        <ScrollViewer DockPanel.Dock="Top">
            <ItemsControl Name="Board">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Image Source="{Binding}" Width="80"/>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapPanel/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
            </ItemsControl>
        </ScrollViewer>
    </DockPanel>
</Window>


Quellcode ausblenden C#-Code
using System;
using System.Collections.ObjectModel;
using System.Windows;
using System.Collections;

namespace KartenMischen {
  /// <summary>
  /// Interaktionslogik für MainWindow.xaml
  /// </summary>
  public partial class MainWindow : Window {
    readonly Random _random = new Random();

    public MainWindow() {
      InitializeComponent();
      Reset();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e) {
      Shuffle();
    }

    private void btn_Reset_Click(object sender, RoutedEventArgs e) {
      Reset();
    }

    void Reset() {
      Board.ItemsSource = CreateDeck();
    }

    ObservableCollection<string> CreateDeck() {
      ObservableCollection<string> Deck = new ObservableCollection<string>();

      foreach(string suite in new string[] { "Clubs", "Spades", "Hearts", "Diamonds" }) {
        Deck.Add($"pack://application:,,,/KartenMischen;component/Resources/Cards/{suite}/Ace.png");
        for(int i = 2; i <= 10; i++) {
          Deck.Add($"pack://application:,,,/KartenMischen;component/Resources/Cards/{suite}/{i.ToString("00")}.png");
        }
        Deck.Add($"pack://application:,,,/KartenMischen;component/Resources/Cards/{suite}/Jack.png");
        Deck.Add($"pack://application:,,,/KartenMischen;component/Resources/Cards/{suite}/Queen.png");
        Deck.Add($"pack://application:,,,/KartenMischen;component/Resources/Cards/{suite}/King.png");
      }

      return Deck;
    }

    private void btn_Shuffle_Click(object sender, RoutedEventArgs e) {
      Shuffle();
    }

    void Shuffle() {
      for(int i = ((IList)Board.ItemsSource).Count - 1; i > -1; i--) {
        var Item = ((IList)Board.ItemsSource)[_random.Next(i)];
        ((IList)Board.ItemsSource).Remove(Item);
        ((IList)Board.ItemsSource).Add(Item);
      }
    }
  }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben