본문 바로가기

C# WPF

C# WPF 그래프 그리기(시간복잡도 그래프) 그래프를 그려보겠습니다. 알고리즘 시간에 많이 나오는 시간 복잡도 그래프를 프로그램으로 그려보려고 합니다. 물론 어떤 함수도 그릴 수 있습니다. 최종 프로그램의 모습입니다. x 축은 800까지 표시하고, y축은 6000까지 표시하도록 했습니다. 실제 nlogn 이나 n^2 정도만 되어도 매우 큰 값이 되기 때문에 y 축은 크기를 1/10으로 축소해서 그렸습니다. 즉 픽셀 하나가 10의 값이 됩니다. 그래프가 그려지는 모습을 보기위해서 타이머를 사용했습니다. 0.01초에 한개의 점씩 그려줍니다. x 축이나 y축의 범위를 넘어서면 타이머를 Stop 시킵니다. WPF 파일은 다음과 같습니다. N f 0 Time Complexity Graphs logN N NlogN N^2 N^3 2^N All Quit C# .. 더보기
C#, WPF 점선그리는 법 for (int i = 100; i < Plotter.Width; i += 100) { Line l = new Line(); l.X1 = i; l.Y1 = 0; l.X2 = i; l.Y2 = Plotter.Height; l.Stroke = Brushes.LightGreen; l.StrokeDashArray = DoubleCollection.Parse("4, 3"); Plotter.Children.Add(l); } 점선을 그릴 때는 위와 같이 Line의 StrokeDashArray 속성을 DoubleCollection으로 설정한다. 숫자 4, 3은 각각 점 길이와 점 간격을 표시한다. BeeEye Dmu 더보기
C# WPF delay 주는 방법 WPF에서는 delay를 줄 때, 다음과 같이 합니다. 그냥 Thread.Sleep()을 사용하면 delay가 적용되지 않습니다. Dispatcher가 Repaint 작업을 큐에 넣어 두기 때문이랍니다. private void checkMatch(card fCard, card sCard) { TimeSpan interval = new TimeSpan(0, 0, 2); if (fCard.num % 13 == sCard.num % 13) { cardOpened[fCard.num] = true; cardOpened[sCard.num] = true; } else { this.Dispatcher.Invoke( (ThreadStart)(() => { }), DispatcherPriority.ApplicationId.. 더보기
C# WPF 카드게임(Memory Card Game) Memory Card Game은 카드 52장을 뒤집어두고, 마우스로 클릭하여 두장씩 같은 숫자가 나오면 open되는 게임입니다. 기억력, 집중력 향상이 도움이 되기 때문에 Memory Card Game이라고 이름 붙였습니다.모든 카드가 open 되면 게임이 끝나고, 몇번 클릭했는지가 점수가 됩니다. 4개의 버튼이 있습니다. Hint 버튼은 뒤집힌 카드를 열어서 보여줍니다. 시작부터 또는 중간에 언제라도 Hint 버튼을 누를 수 있습니다. Resume 버튼은 Hint 버튼으로 일시 중단된 게임을 계속합니다. Start 버튼은 다시 게임을 시작할 때 사용합니다. Quit 버튼은 게임을 끝낼 때 사용합니다. Xaml 파일은 다음과 같습니다. [MainWindow.xaml] Memory Card Game Hin.. 더보기
C# WPF SnakeBite Game SnakeBite Game입니다. 두개의 창을 사용합니다. 시작창과 게임창... [시작창] SnakeBite V.1.0 by BeeEye Dmu Mission: Eat 25 Eggs using Arrow Keys Press ESC to pause while playing private void button1_Click(object sender, RoutedEventArgs e) { Window1 w = new Window1(); w.Show(); } private void button2_Click(object sender, RoutedEventArgs e) { this.Close(); } [게임창] - Window1 using System; using System.Collections.Generic; u.. 더보기
C#에서 실행시간 체크 실행 시간을 측정하고자 할 때에는 System.Diagnostics.Stopwatch를 사용한다. using System.Diagnostics; // StopWatch Stopwatch sw = new Stopwatch(); TimeSpan ts = sw.Elapsed; sw.Stop(); string Text = sw.Elapsed.ToString(); string Text = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); http://msdn.microsoft.com/ko-kr/library/system.diagnostics.stopwatch.elapsed(v=vs... 더보기
Thread.Sleep() 문제 http://blog.naver.com/techshare/100071407238 Dispatcher 큐에 있는 Repaint 작업 항목을 실행시켜 주면 되는 것입니다. 그러기 위해서 아래와 같은 코드를 중간에 넣어주면 됩니다.private void button1_Click(object sender, RoutedEventArgs e) { this.button1.IsEnabled = false; this.Dispatcher.Invoke( (ThreadStart)(() => { }), DispatcherPriority.ApplicationIdle); Thread.Sleep(5000); this.button1.IsEnabled = true; } [출처] WPF - UI 업데이트를 바로 반영하고 싶다면?|작성자 .. 더보기
C# 숫자퍼즐(Jeu De Tacquin) in WPF Petzold 책에 나온 Jeu De Tacquin(숫자 퍼즐)을 버튼을 사용하여 만들어 보았습니다. Grid를 이용했는데, Petzold 처럼 UniformGrid를 사용하는 것이 더 편할 수도 있겠습니다. 가장 기본적인 아이디어는 placement[4,4] 배열을 이용하여 버튼들을 관리하는 것입니다. 클릭할 때마다 Clear하고 다시 그리는 것이 좀 낭비스럽다는 생각이 드는데, 일단 동작은 합니다. 나중에 더 수정해야 될 부분입니다. Jeu De Tacquin Shuffle using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.. 더보기
Analog Clock in C# WPF(아날로그 시계) - 3 C# WPF로 아래 그림과 같은 아날로그 시계를 만들어본다. ( 이 프로그램은 http://sarosh.wordpress.com/2012/12/24/analog-clock-in-wpf-c/ 의 코딩을 약간 변형한 것입니다. 코딩에 대한 설명은 이 링크의 원본 글을 참조하세요) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Wind.. 더보기
Analog Clock in C# WPF(아날로그 시계) - 2 C# WPF로 아래와 같은 아날로그 시계를 만든다. 시계바늘의 움직임은 다음의 식으로 계산된다. 삼각함수가 파라메터로 radian 값을 받기때문에 각도는 radian으로 변형해야 한다. DateTime currentTime = new DateTime(); currentTime = DateTime.Now; double radHr = (currentTime.Hour % 12 + currentTime.Minute / 60F) * 30 * Math.PI / 180; // 시침은 1시간에 30도 + 1분에 0.5도 double radMin = (currentTime.Minute) * 6 * Math.PI / 180; // 분침은 1분에 6도씩 double radSec = (currentTime.Second) * .. 더보기