Урок 7. Заключение. Игра

  • 29 декабря 2018
  • 2187
0%

Помогло?

Всем привет! Наступил финальный урок курса. Если вы не видели предыдущие уроки, я рекомендую их посмотреть (урок 1). Сегодня мы будем закреплять полученные знания практическим занятием. Для этого сделаем игру на PHP, правила которой очень просты. Это казино, а, точнее, однорукий бандит. Вы вращаете барабан, и выпадает комбинация из трех случайных наборов. Итак, давайте, приступим. Начнем с html разметки. Надеюсь, вы знаете ее на базовом уровне:

 

<!DOCTYPE html>
<html>
	<head>
		<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
		<title></title>
	</head>
	<body>
		<div>
			<a href="?spin=1">Вращать</a>
		</div>
	</body>
</html>

Здесь я подключил fontawsome (известная библиотека с иконкам), а также добавил ссылку с параметром spin равную 1. Позже мы будем запускать наш код кликом по этой ссылке Теперь, давайте, напишем логику. Начнем с функции startSpin

function startSpin()

{ 
	//body
}

Давайте, заполним функцию. Внутри создадим переменную $variants - массив, а элементы - значения для подстановки в библиотеку в fontawesome. В этом массиве будут ягоды, доллары, яблоки, семерки.

$variants = [
	1 => "7",
	2 => "fas fa-dollar-sign",
	3 => "fas fa-euro-sign",
	4 => "fas fa-ruble-sign",
	5 => "fas fa-star",
	6 => "fas fa-chess-knight",
	7 => "fab fa-apple"
];

Далее построим “вращалки”. Они будут генерироваться случайным образом. Для этого воспользуемся встроенной функцией PHP rand(min,max) - генерация случайного числа. Данная функция принимает два параметра от и до (минимальное и максимальное число). Минимальное число нам известно - это 1. А максимальное - это сумма массива $variants.

Выглядит код вот так:

$min = 1;
$max = count($variants);
$spin1 = rand($min, $max);
$spin2 = rand($min, $max);
$spin3 = rand($min, $max);

Теперь создадим еще одну функцию, которую назовем drawVariant()

function drawVariant($key, $variants)
{
	switch ($key){
		case 1: $str = $variants[$key]; break;
		default: $str = "<i class=\"{$variants[$key]}\"></i>"; break;
	}
	return $str;
}

Эта функция будет принимать 2 значения $key - ключ и $variants - массив вариантов. Внутри находится условие switch. В первом случае (если key == 1) переменной $str назначается первое значение из массива $variants. В нашем случае это семерка. Во всех остальных случаях переменной $str присваивается html код, и в класс подставляется ключ, выпадающий случайным образом. Далее функция возвращает переменную $str. Обращаю ваше внимание на то, что я использую фигурные скобки для вставки переменной в строку (можно использовать как конкатенацию, так и вариант с фигурными скобками, но только если у вас двойные кавычки). Теперь, давайте, вернемся в функцию  startSpin

function startSpin()
{
	$variants = [
		1 => "7",
		2 => "fas fa-dollar-sign",
		3 => "fas fa-euro-sign",
		4 => "fas fa-ruble-sign",
		5 => "fas fa-star",
		6 => "fas fa-chess-knight",
		7 => "fab fa-apple"
	];

	$min = 1;
	$max = count($variants);
	$spin1 = rand($min, $max);
	$spin2 = rand($min, $max);
	$spin3 = rand($min, $max);

	return [
		'variant1' => drawVariant($spin1, $variants),
		'variant2' => drawVariant($spin2, $variants),
		'variant3' => drawVariant($spin3, $variants),
		'result' => eveluateWinning($spin1, $spin2, $spin3)
	];
}

Как видите, return представляет из себя массив, который содержит 3 варианта и 1 результат. В каждый variant передается функция (которая возвращает html, либо 7). В функцию я передаю переменные $spin1 и тд. Это рандомные число от вращений.

Теперь, давайте, посмотрим на результат. Я обозначил функцию eveluateWinning(). Сейчас расскажу, что там внутри:

function eveluateWinning($spin1, $spin2, $spin3)
{
	//body
}

В функцию передается 3 вращения. Она нужна для того, чтобы просчитать, сколько заработает игрок. От разных условий будет зависеть выигрыш. Первое и самое мощное условие:

if ($spin1 == 1 && $spin2 == 1 && $spin3 == 1) {
	return drawWinning(5); // Выпало 777 Самый максимальный выигрыш
}

Если первый барабан выпал на 7 (первый ключ в массиве $variants), второй на 7 и третий на 7, то мы показываем максимальный выигрыш. Как видите, задействована еще одна функция drawWinning(). Давайте ее разберем:

function drawWinning($key)
{
	$winnings = [
		0 => 0,
		1 => 10,
		2 => 100,
		3 => 1000,
		4 => 10000,
		5 => 1000000
	];
	
	return number_format($winnings[$key], 0, '.', ' ') . ' руб';
}

Параметр у этой функции - ключ, по которому будет вытащено значение из массива $winings. Массив $winings представляет собой набор вариантов выигрышей. Return вызывает встроенную функцию number_format, которая отформатирует число, разобьет его на разряды. Например будет выведен один миллион так: 1 000 000.

Итак, вернемся обратно в нашу функцию eveluateWinning() и напишем еще пару условий:

if($spin1 == $spin2 && $spin2 == $spin3) {
	return drawWinning(4); // Совпало все
}

if ($spin1 == 1 && $spin2 == 1 || $spin2 == 1 && $spin3 == 1 || $spin1 == 1 && $spin3 == 1) {
	return drawWinning(3); // Выпали две 7.
}

if ($spin1 == $spin2 || $spin2 == $spin3 || $spin1 == $spin3) {
	return drawWinning(2); // Одно совпадение
}

if($spin1 == 1 || $spin2 == 1 || $spin3 == 1 ){
	return drawWinning(1); // Выпала одна 7.
}

return drawWinning(0); //Ничего из условий выигрыша не совпало

Теперь вся наша логика готова. Давайте, вставим код вызова в наш HTML:

<body>
	<?php
		if(isset($_GET['spin']) && $_GET['spin'] == 1){
			$spinResult = startSpin();
			echo $spinResult['variant1'] . "\n";
			echo $spinResult['variant2'] . "\n";
			echo $spinResult['variant3'] . "\n";
			echo "<h1>Выигрыш: {$spinResult['result']}</h1>";
		}
	?>
	<div>
		<a href="?spin=1">Вращать</a>
	</div>
</body>

Теперь у нас и вызов готов. Можете проверять игру! Стили можете сделать на свой вкус. Если у вас возникли сложности, вы можете посмотреть демо и скачать исходник с моего github.

Игра на PHP

Вы с успехом завершили курс. Я строго не рекомендую останавливаться на достигнутом, а развиваться дальше. Впереди вас ждут ООП, шаблоны проектирования, различные фреймворки. Чтобы стать хорошим бэкендом, этими знаниями обладать просто необходимо. Данный курс можно рассматривать, как начальную ступеньку. Отличным решением сейчас будет отправиться на сайт php.net и прочитать всю документацию от корки до корки. Ну и все остальное, конечно же, со временем и опытом придет. Не забывайте про мой блог, где я буду изучать все самое интересное =)

Если у вас есть какие-нибудь вопросы или предложения - не стесняйтесь, задавайте их в почту peskov.s.b@gmail.com Буду рад ответить или прочитать критику. Спасибо за прочтение!

Курс

Облако тегов

Следующая статья

Курс по PHP: Начинающий Бэкендер

Добро пожаловать в абсолютно бесплатный курс по PHP, в котором вы сможете овладеть общим пониманием языка для серверной разработки веб приложений.

Сообщения: (0)

?
Публикуя сообщение, вы соглашаетесь с пользовательским соглашением

Читайте также