<?php

error_reporting(E_ALL);

class Question
{
	public $text; // Текст вопроса
	public $points = 5; // Число баллов, по умолчанию 5
	public $answers; // Варианты ответов
	public $correctAnswer; // Правильный ответ
	public $hint; // Подсказка
}

/* Функция создающая пустой массив с вопросами */
function createQuestions() {

	// Создаем пустой массив
	$questions = [];

	// Создаем и заполняем первый объект
	$q = new Question;
	$q->text = "Какая планета располагается четвертой по счету от Солнца?";
	$q->points = 10;
	$q->answers = array('a' => 'Венера', 'b' => 'Марс', 'c' => 'Юпитер', 'd' => 'Меркурий');
	$q->correctAnswer = 'b';
	$q->hint = "Одноименное название носит шоколадный батончик.";

	// Кладем вопрос в массив
	$questions[] = $q;

	// Создаем и заполняем второй объект
	$q = new Question;
	$q->text = "Какой город является столицей Великобритании?";
	$q->points = 5;
	$q->answers = array('a' => 'Париж', 'b' => 'Москва', 'c' => 'Нью-Йорк', 'd' => 'Лондон');
	$q->correctAnswer = 'd';
	$q->hint = "%Городнейм% из кэпитал оф грейт британ.";

	// Кладем вопрос в массив
	$questions[] = $q;

	// Создаем и заполняем третий объект
	$q = new Question;
	$q->text = "Кто придумал теорию относительности?";
	$q->points = 30;
	$q->answers = array('a' => 'Джон Леннон', 'b' => 'Джим Моррисон', 'c' => 'Альберт Эйнштейн', 'd' => 'Исаак Ньютон');
	$q->correctAnswer = 'c';
	$q->hint = "Этим парнем был...";

	// Кладем вопрос в массив
	$questions[] = $q;


	return $questions;
}

/* Функция выводящая список вопросов с ответами */
function printQuestions($questions) {
	$number = 1; // номер вопроса

	foreach ($questions as $question) {
		echo "<br>{$number}. {$question->text}<br><br>";

		echo "Варианты ответов:<br>";

		foreach ($question->answers as $letter => $answer) {
			echo " {$letter}. {$answer}<br>";
		}

		$number++;
	}
}

/* Функция получает на вход массив вопросов и массив ответов. Проверяет ответы, 
считает число баллов и выводит вопросы, на которые дан неправильный ответ. */
function checkAnswers($questions, $answers)
{
    // Проверим, что число ответов равно числу вопросов (защищаемся от ошибки)
    if (count($questions) != count($answers)) {
        die("Число ответов и вопросов не совпадает<br>");
    }

    $pointsTotal = 0; // сколько набрано баллов

    // сколько можно набрать баллов при всех правильных ответах
    $pointsMax = 0;  
    // сколько отвечено верно
    $correctAnswers = 0; 

    $totalQuestions = count($questions); // Сколько всего вопросов

    // Цикл для обхода вопросов и ответов
    for ($i = 0; $i < count($questions); $i++) {
        $question = $questions[$i]; // Текущий вопрос
        $answer = $answers[$i]; // текущий ответ

        // Считаем максимальную сумму баллов
        $pointsMax += $question->points;

        // Проверяем ответ
        if ($answer == $question->correctAnswer) {
            // Добавляем баллы
            $correctAnswers ++;
            $pointsTotal += $question->points;
        } else {
            // Неправильный ответ
            $number = $i + 1;
            echo "Неправильный ответ на вопрос №{$number} ({$question->text})\nПодсказка: {$question->hint}\n";
        }
    }

    // Выведем итог
    echo "Правильных ответов: {$correctAnswers} из {$totalQuestions}, баллов набрано: $pointsTotal из $pointsMax\n";
}

$questions = createQuestions();
// printQuestions($questions);
$answers = array('b', 'd', 'a');
checkAnswers($questions, $answers);