C# :: Aufgabe #197 :: Lösung #1
 
                       
        3 Lösungen
         
         
        
      
                
       
        
      #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.
           
    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
 
                 
        von DBqFetti (2480 Punkte)
         - 15.01.2018 um 17:10 Uhr
       XML-Code
 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>
 C#-Code
 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
          
          
                 Seite 1 von 0
          
                 1
          
          
             
       
    
    
    

 
    
    
     
            