using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Threading; //DispatcherTimer /* * ruchomyPrzycisk * * należy klikac w przycisk, który zmienia swoje położenie, * każde klikniecie inkrementuje punkty * czas rozgrywki jest ograniczony (PLAY_TIME) * * * Poruszaniem sie przycisku steruje buttonTimer, który * trigeruja zmiany marginesu przycisku - lewego i górnego naprzemian * * TIME_TIMER_INTERVAL - interwał czasowy trigerowania licznika czasu rozgrywki * (ustawiony na 1s) * BUTTON_TIMER_INTERVAL - interwał czasowy trigerowania szybkości poruszania sie przycisku * PLAY_TIME - czas rozgrywki * */ namespace ruchomyPrzycisk { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); // starujemy timery buttonTimer.Start(); buttonTimer.Tick += buttonTimer_Tick; timeTimer.Start(); timeTimer.Tick += timeTimer_Tick; // wyświetlamy informację o czasie rozgrywki w labelu labelPlayTime.Content = "Czas rozgrywki: " + PLAY_TIME + "s"; } // timer sterujacy rozmieszczeniem przycisku // // tworzymy timer private DispatcherTimer buttonTimer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(BUTTON_TIMER_INTERVAL) }; // interwał timera w ms private const int BUTTON_TIMER_INTERVAL = 700; // timer sterujacy czasem rozgrywki // // tworzymy timer private DispatcherTimer timeTimer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(TIME_TIMER_INTERVAL) }; // interwał timera w s private const int TIME_TIMER_INTERVAL = 1; // zmienne do zmian marginesu przycisku private int marginLeft = 0; private int marginTop = 0; // flaga zmiany marginesu - który zmieniamy lewy czy górny private bool isMarginLeft = false; // kod trigerowany przez timer sterujacy rozmieszczeniem przycisku // co BUTTON_TIMER_INTERVAL ms void buttonTimer_Tick(object sender, EventArgs e) { // aby przycisk zmieniał położenie należy zmienieć marginesy przycisku // raz lewy raz górny Thickness t = btnClick.Margin; // jesli zmieniamy lewy margines przycisku if (isMarginLeft) { // ustawiamy lewy margines na liczbe losową Random random = new Random(); marginLeft = random.Next(0, (int)(Frame1.Width - 50)); t.Left = marginLeft; isMarginLeft = false; } // jesli zmieniamy górny margines przycisku else { // ustawiamy górny margines na liczbe losową Random random = new Random(); marginTop = random.Next(0, (int)(Frame1.Height - 50)); t.Top = marginTop; isMarginLeft = true; } // przypisujemy margines z losową wartością do przycisku btnClick.Margin = t; } // zmienna reprezentująca sekundy private int second = 1; // flaga liczenia punktów private bool incrementPoints = true; // czas rozgrywki w sekundach private const int PLAY_TIME = 10; // kod trigerowany przez timer sterujacy czasem // co TIME_TIMER_INTERVAL ms void timeTimer_Tick(object sender, EventArgs e) { // wyświetlamy liczbę sekund w labelu labelTime.Content = second; // inkrementujemy liczbę sekund second++; // warunek wyjscia z gry if (second == (PLAY_TIME + 1)) { // stopujemy timery timeTimer.Stop(); buttonTimer.Stop(); // ustawiamy falgę liczenia punktów na false incrementPoints = false; } } // zmienna reprezentująca punkty private int point = 0; // kod obsługi przycisku private void btnClick_Click(object sender, RoutedEventArgs e) { // jeśli falgę liczenia punktów jest true if (incrementPoints) { // inkrementujemy punkty point++; // wyswietlamy punkty w labelu labelPoints.Content = point; } } } }