private void GameScreen_KeyDown(object sender, KeyEventArgs e)
        {
            bool?  correct = null; // (datatype)? specifies a version of that datatype that can have the value null
            string key     = e.KeyData.ToString();

            if (key == "Escape")
            {
                this.Close();
            }
            if (!CoverLabel1.Visible)
            {
                switch (key)
                {
                case "A": correct = Q1.CheckAnswer(LeftAnswer1.Text); break;

                case "D": correct = Q1.CheckAnswer(RightAnswer1.Text); break;

                case "W": correct = Q1.CheckAnswer(UpAnswer1.Text); break;

                case "S": correct = Q1.CheckAnswer(DownAnswer1.Text); break;
                }
                if (correct != null)
                {
                    if (correct == true)
                    {
                        CoverLabel1.Text      = GoodText[r.Next(0, 6)];
                        CoverLabel1.ForeColor = Color.Green;
                        car1.X    += 2;
                        car1.Speed = 4;
                    }
                    else
                    {
                        CoverLabel1.Text      = BadText[r.Next(0, 6)];
                        CoverLabel1.ForeColor = Color.Red;
                        car1.X    += 1;
                        car1.Speed = 1;
                        if (_sfx)
                        {
                            SystemSounds.Hand.Play();
                        }
                    }
                    CoverLabel1.Show();
                    questionTimer1.Stop();
                    TPQList1.Add(questionTimer1.Elapsed.TotalSeconds);
                    return;
                }
            }
            if (!CoverLabel2.Visible)
            {
                switch (key)
                {
                case "Left": correct = Q2.CheckAnswer(LeftAnswer2.Text); break;

                case "Right": correct = Q2.CheckAnswer(RightAnswer2.Text); break;

                case "Up": correct = Q2.CheckAnswer(UpAnswer2.Text); break;

                case "Down": correct = Q2.CheckAnswer(DownAnswer2.Text); break;
                }
                if (correct != null)
                {
                    if (correct == true)
                    {
                        CoverLabel2.Text      = GoodText[r.Next(0, 6)];
                        CoverLabel2.ForeColor = Color.Green;
                        car2.X    += 2;
                        car2.Speed = 4;
                    }
                    else
                    {
                        CoverLabel2.Text      = BadText[r.Next(0, 6)];
                        CoverLabel2.ForeColor = Color.Red;
                        car2.X    += 1;
                        car2.Speed = 1;
                        if (_sfx)
                        {
                            SystemSounds.Hand.Play();
                        }
                    }
                    CoverLabel2.Show();
                    questionTimer2.Stop();
                    TPQList2.Add(questionTimer2.Elapsed.TotalSeconds);
                    return;
                }
            }
        }
        private void UpdateScreenTimer_Tick(object sender, EventArgs e)
        {
            TimeLabel.Text = String.Format("{0:00}:{1:00}:{2:000}", quizTimer.Elapsed.Minutes, quizTimer.Elapsed.Seconds, quizTimer.Elapsed.Milliseconds);
            if (car1.X % (Track1.Width / 10) == 0 && car1.Speed != 0) // (if the car has reached a question point and isn't already stopped)
            {
                Q1 = QM1.RandomQuestion();
                Q1.ShuffleAns();
                QuestionLabel1.Text = Q1.QuestionText;
                for (int i = 0; i < 4; i++)
                {
                    Q1AnsLabels[i].Text = Q1.Answers[i];
                }
                CoverLabel1.Visible = false;
                car1.Speed          = 0;
                questionTimer1.Restart();
            }
            if (questionTimer1.Elapsed.Seconds >= 15)
            {
                questionTimer1.Reset();
                CoverLabel1.Text      = "TOO SLOW";
                CoverLabel1.ForeColor = Color.Red;
                car1.X    += 1;
                car1.Speed = 1;
                CoverLabel1.Show();
                questionTimer1.Stop();
                TPQList1.Add(questionTimer1.Elapsed.Seconds);
            }
            if (car1.X >= Track1.Width)
            {
                if (_activeUsers.Length == 2)
                {
                    End(_activeUsers[0], _activeUsers[1]);
                }
                else
                {
                    End();
                }
            }
            car1.Draw();
            wheel1.RotateImage(car1.Speed);
            if (_activeUsers.Length == 2) // I originally had try-catch blocks to handle 1 player, but this seemed to be taxing on the computer as exceptions were thrown every 50ms
            {
                if (car2.X % (Track2.Width / 10) == 0 && car2.Speed != 0)
                {
                    Q2 = QM2.RandomQuestion();
                    Q2.ShuffleAns();
                    QuestionLabel2.Text = Q2.QuestionText;
                    for (int i = 0; i < 4; i++)
                    {
                        Q2AnsLabels[i].Text = Q2.Answers[i];
                    }
                    CoverLabel2.Visible = false;
                    car2.Speed          = 0;
                    questionTimer2.Restart();
                }
                if (questionTimer2.Elapsed.Seconds >= 15)
                {
                    questionTimer2.Reset();
                    CoverLabel2.Text      = "TOO SLOW";
                    CoverLabel2.ForeColor = Color.Red;
                    car2.X    += 1;
                    car2.Speed = 1;
                    CoverLabel2.Show();
                    TPQList2.Add(questionTimer2.Elapsed.Seconds);
                }
                if (car2.X >= Track2.Width)
                {
                    End(_activeUsers[1], _activeUsers[0]);
                }

                car2.Draw();
                wheel2.RotateImage(car2.Speed);
            }
        }