fork(1) download
  1. <?php
  2.  
  3.  
  4. abstract class AbstractQuestion
  5. {
  6. public $text;
  7. public $points;
  8.  
  9. abstract function checkAnswer($answer);
  10. abstract function printQuestion();
  11. }
  12.  
  13. class ChoiceQuestion extends AbstractQuestion
  14. {
  15. public $points = 5;
  16. public $options;
  17. public $correctOption;
  18. public $tip;
  19.  
  20. public function checkAnswer($answer)
  21. {
  22. if ($answer == $this->correctOption) {
  23. echo "Правильный ответ!\n\n";
  24. return $this->points;
  25. } else {
  26. echo "Неправильный ответ.\n";
  27. echo "Подсказка: {$this->tip}\n\n";
  28. return 0;
  29. }
  30. }
  31.  
  32. public function printQuestion()
  33. {
  34. echo "{$this->text} Стоимость вопроса - {$this->points}.\n";
  35. echo "Варианты ответов:\n";
  36. foreach($this->options as $char=>$word) {
  37. echo "{$char}) {$word}\n";
  38. }
  39. }
  40. }
  41.  
  42. class NumericQuestion extends AbstractQuestion
  43. {
  44. public $points = 10;
  45. public $answer;
  46. public $deviation;
  47.  
  48. public function checkAnswer($answer)
  49. {
  50. if ($answer >= $this->answer - $this->deviation && $answer <= $this->answer + $this->deviation) {
  51. echo "Правильный ответ!\n\n";
  52. return $this->points;
  53. } else {
  54. echo "Неправильный ответ.\n";
  55. echo "Правильный ответ: $this->answer\n\n";
  56. return 0;
  57. }
  58. }
  59.  
  60. public function printQuestion()
  61. {
  62. echo "{$this->text} Стоимость вопроса - {$this->points}.\n";
  63. }
  64. }
  65.  
  66. function createQuestions()
  67. {
  68. $questions = array();
  69.  
  70. $q = new ChoiceQuestion;
  71. $q->text = "Вторая планета от Солнца?";
  72. $q->points = 10;
  73. $q->options = array('a' => 'Марс','b' => 'Венера','c' => 'Сатурн','d' => 'Юпитер');
  74. $q->correctOption = 'b';
  75. $q->tip = "Богиня любви.";
  76.  
  77. $questions[] = $q;
  78.  
  79. $q = new ChoiceQuestion;
  80. $q->text = 'Какой город является столицей Великобритании?';
  81. $q->points = 5;
  82. $q->options = array('a' => 'Париж', 'b' => 'Москва', 'c' => 'Нью-Йорк', 'd' => 'Лондон');
  83. $q->correctOption = 'd';
  84. $q->tip = "Двухэтажные красные автобусы, Биг-Бен.";
  85.  
  86. $questions[] = $q;
  87.  
  88. $q = new ChoiceQuestion;
  89. $q->text = 'Кто придумал теорию относительности?';
  90. $q->points = 30;
  91. $q->options = array('a' => 'Джон Леннон', 'b' => 'Джим Моррисон', 'c' => 'Альберт Эйнштейн', 'd' => 'Исаак Ньютон');
  92. $q->correctOption = 'c';
  93. $q->tip = "Этим человеком был...";
  94.  
  95. $questions[] = $q;
  96.  
  97. $q = new NumericQuestion;
  98. $q->text = 'Чему равна скорость света в КМ/с ?';
  99. $q->points = 20;
  100. $q->answer = 299792.458;
  101. $q->deviation = 10.5;
  102.  
  103. $questions[] = $q;
  104.  
  105. $q = new NumericQuestion;
  106. $q->text = 'Чему равняется число Пи (точность - пять знаков после запятой)?';
  107. $q->points = 10;
  108. $q->answer = 3.14159;
  109. $q->deviation = 0;
  110.  
  111. $questions[] = $q;
  112.  
  113. $q = new NumericQuestion;
  114. $q->text = 'Чему равна плотность воды в КГ/м3 ?';
  115. $q->points = 15;
  116. $q->answer = 1000;
  117. $q->deviation = 0;
  118.  
  119. $questions[] = $q;
  120.  
  121. return $questions;
  122. }
  123.  
  124.  
  125. $q = createQuestions();
  126. $a = array('b', 'd', 'b', 299792, 3.14, 1000);
  127. $totalScore = 0;
  128. for ($i = 0; $i < count($a); $i++) {
  129. $question = $q[$i];
  130. $answer = $a[$i];
  131. $q[$i]->printQuestion();
  132. echo "Ваш ответ - {$answer}.\n";
  133. $totalScore += $question->checkAnswer($answer);
  134. }
  135. echo "За игру вы заработали {$totalScore} очков";
  136.  
Success #stdin #stdout 0.01s 52488KB
stdin
Standard input is empty
stdout
Вторая планета от Солнца? Стоимость вопроса - 10.
Варианты ответов:
a) Марс
b) Венера
c) Сатурн
d) Юпитер
Ваш ответ - b.
Правильный ответ!

Какой город является столицей Великобритании? Стоимость вопроса - 5.
Варианты ответов:
a) Париж
b) Москва
c) Нью-Йорк
d) Лондон
Ваш ответ - d.
Правильный ответ!

Кто придумал теорию относительности? Стоимость вопроса - 30.
Варианты ответов:
a) Джон Леннон
b) Джим Моррисон
c) Альберт Эйнштейн
d) Исаак Ньютон
Ваш ответ - b.
Неправильный ответ.
Подсказка: Этим человеком был...

Чему равна скорость света в КМ/с ? Стоимость вопроса - 20.
Ваш ответ - 299792.
Правильный ответ!

Чему равняется число Пи (точность - пять знаков после запятой)? Стоимость вопроса - 10.
Ваш ответ - 3.14.
Неправильный ответ.
Правильный ответ: 3.14159

Чему равна плотность воды в КГ/м3 ? Стоимость вопроса - 15.
Ваш ответ - 1000.
Правильный ответ!

За игру вы заработали 50 очков