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); } }