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
<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>
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
