<Window x:Class="G24W12WPFCardDealer.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:G24W12WPFCardDealer"
mc:Ignorable="d"
Title="카드 딜러" Height="450" Width="800">
<DockPanel>
<Button
DockPanel.Dock="Bottom"
x:Name="BtnDeal"
Content="카드 분배"
Padding="8"
Margin="16"/>
<Image
x:Name="Card1"
Height="400"
Source="<https://picsum.photos/400/400>"/>
</DockPanel>
</Window>
<Image
x:Name="Card1"
Height="320"
Source="Images/10_of_clubs.png"/>
Click=”OnDeal”
private void OnDeal(object sender, RoutedEventArgs e) {
BitmapImage image = new BitmapImage(
new Uri("Images/2_of_clubs.png", UriKind.Relative)
);
Card1.Source = image;
}
private void OnDeal(object sender, RoutedEventArgs e) {
string[] suits = ["spades", "diamonds", "hearts", "clubs",];
string[] values = ["ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "jack", "queen", "king", ];
Random random = new Random();
int card = random.Next(suits.Length * values.Length);
string suit = suits[card / values.Length];
string value = values[card % values.Length];
if (value == "jack" || value == "queen" || value == "king")
suit += "2";
BitmapImage image = new BitmapImage(
new Uri($"Images/{value}_of_{suit}.png", UriKind.Relative)
);
Card1.Source = image;
}
<UniformGrid
Rows="1"
Background="#040">
<Image x:Name="Card1"
Stretch="None"
Source="Images/black_joker.png"/>
<Image x:Name="Card2"
Stretch="None"
Source="Images/black_joker.png"/>
<Image x:Name="Card3"
Stretch="None"
Source="Images/black_joker.png"/>
<Image x:Name="Card4"
Stretch="None"
Source="Images/black_joker.png"/>
<Image x:Name="Card5"
Stretch="None"
Source="Images/black_joker.png"/>
</UniformGrid>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
namespace G24W12WPFCardDealer {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private void OnDeal(object sender, RoutedEventArgs e) {
string[] suits = ["spades", "diamonds", "hearts", "clubs",];
string[] values = ["ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "jack", "queen", "king", ];
Random random = new Random();
// C#에서 Set 없고 대신 HashSet 사용
// Set은 중복 안되는 성질 이용
HashSet<int> cardSet = new HashSet<int>();
while (cardSet.Count < 5) {
cardSet.Add(random.Next(suits.Length * values.Length));
}
// List로 바꾸고 정렬 (Set은 순서 없음)
List<int> cardList = cardSet.ToList();
cardList.Sort();
for (int i = 0; i < cardList.Count; i++) {
string suit = suits[cardList[i] / values.Length];
string value = values[cardList[i] % values.Length];
Image imageCard = (Image)FindName($"Card{i + 1}");
imageCard.Source = new BitmapImage(
new Uri(
(value == "jack" || value == "queen" || value == "king")
? $"Images/{value}_of_{suit}2.png"
: $"Images/{value}_of_{suit}.png",
UriKind.Relative
)
);
}
}
}
}
namespace G24W12WPFCardDealer;
class Card {
public static readonly int NUMBER_OF_SUITS = 4;
public static readonly int NUMBER_OF_VALUES = 13;
public Card(int suit, int value) {
Suit = suit;
Value = value;
}
public Card(int number) {
Suit = number / NUMBER_OF_VALUES;
Value = number % NUMBER_OF_VALUES;
}
public int Suit { get; set; }
public int Value { get; set; }
}
class CardModel
{
public static readonly int NUMBER_OF_CARDS = 5;
private List<Card> _cards = new List<Card>();
public List<Card> Cards { get { return _cards; } }
public CardModel()
{
// -1, -1이면 Jocker 출력
for (int i = 0; i < NUMBER_OF_CARDS; i++)
_cards.Add(new Card(-1, -1));
}
public List<Card> DealCards()
{
Random random = new Random();
// C#에서 Set 없고 대신 HashSet 사용
// Set은 중복 안되는 성질 이용
HashSet<int> cardSet = new HashSet<int>();
while (cardSet.Count < NUMBER_OF_CARDS)
{
cardSet.Add(random.Next(Card.NUMBER_OF_SUITS * Card.NUMBER_OF_VALUES));
}
// List로 바꾸고 정렬 (Set은 순서 없음)
List<int> cardList = cardSet.ToList();
cardList.Sort();
_cards.Clear();
foreach (var cardNumber in cardList) {
_cards.Add(new Card(cardNumber));
}
return Cards;
}
}