예제 #1
0
        /// <summary>
        /// Called when rendering thread has stopped. Meaning that game has ended.
        /// </summary>
        private void RendererStopped(object sender, RunWorkerCompletedEventArgs e)
        {
            _logicWorker.DoWork -= _logic.Run;
            _renderWorker.DoWork -= _renderer.Run;
            _renderer = null;
            _logic = null;

            var done = false;
            if (_win)
            {
                MessageBox.Show("Hey, cheater, you won!", "Holy cow!");
                done = true;
            }
            else
            {
                var replay = MessageBox.Show("Hey, loooser. Retry?", "Looooooooseeeeer", MessageBoxButton.YesNo);
                done = replay == MessageBoxResult.No;
            }

            if (done)
            {
                var mainWindow = new MainWindow();
                App.Current.MainWindow = mainWindow;
                this.Close();
                mainWindow.Show();
            }
            else
            {
                Init();
            }
        }
예제 #2
0
        /// <summary>
        /// Starts new game. Runs game logic and rendering threads.
        /// </summary>
        private void Init()
        {
            _renderer = new Renderer(this);
            _logic = new GameLogic(this, _renderer);

            if (contentGrid.ActualWidth > 0)
                ReinitFieldBitmap((int)contentGrid.ActualWidth, (int)contentGrid.ActualHeight);

            _logicWorker.DoWork += _logic.Run;
            _logicWorker.RunWorkerAsync();

            _renderWorker.DoWork += _renderer.Run;
            _renderWorker.RunWorkerCompleted += RendererStopped;
            _renderWorker.WorkerSupportsCancellation = true;
            _renderWorker.RunWorkerAsync();

            _renderFrameTimer.Start();
        }