Розробка уроку — практичної роботи

Тема: cтворення нескладної комп’ютерної гри з викорис­танням змінних величин мовою PHP.

Мета: навчитися створювати та редагувати програму мовою PHP.

Після виконання роботи учень:

Обладнання: ПК із встановленою ОС, браузером, середовищем програмування мовою PHP (наприклад, XAMPP).

Структура уроку

  1. Організаціний момент.
  2. Актуалізація опорних знань.
  3. Інструктаж з ТБ.
  4. Вироблення практичних навичок.
  5. Підбиття підсумків уроку.
  6. Домашнє завдання.

Хід уроку

1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.

2. Актуалізація опорних знань

Умовний оператор
if (логічний вираз) оператор;
if (
логічний вираз) оператор1 else оператор2;

Алгоритмічна структура повторення
while (логічний вираз) вказівка;
do {вказівки циклу} while (логічний вираз);
for (вказівки_початку; умова_циклу; вказівки_кінця_ітерації) {вказівки циклу}


PHP виконує вказівки з боку сервера на відміну, наприклад, від Javascript. При спробі створити гру мовою PHP потрібно врахувати, що хід гравця буде враховано лише як певний запит з боку користувача на сервер з викликом певного коду на виконання. Створювати такий запит натисканням кнопки для відправлення даних, введених у поля форми, дуже незручно. Щонайменше, для гравців. Наразі визначення того, яку клавішу натиснуто на клавіатурі чи яку кнопку мишки натиснути засобами лише PHP вимагає додаткового встановлення спеціальних бібліотек.

Набагато легше використати (запозичити) опрацювання натискання клавіш засобами Javascript. Наприклад, таким способом:

<input type='text' size='1' onkeydown='f(event)' autofocus>
<script>
function f (event)
{ var c = event.keyCode;
  if (c==37) location.href= 'left.php';
  if (c==38) location.href=   'up.php';
  if (c==39) location.href='right.php';
  if (c==40) location.href= 'down.php';

}
</script>

Поданий код передбачає створення поля введення з встановленим фокусом. Натискання довільної клавіші буде спричиняти таке:

У свою чергу функція f визначає код натиснутої клавіші. Якщо було натиснуто одну з клавіш:

буде здійснено перехід до виконання відповідного коду left.php, up.php, right.php чи down.php.

Потреба постійно повертатися на сервер означає потребу постійного перезавантаження веб-сторінок. На жаль, якщо робити це дуже часто, спостерігатимемо мерехтіння екрану. Інколи цього можна позбутися, якщо замість імпортування зображення (тег img), що складається переважно з одноколірних прямокутників, розташувати відповідним чином блоки з певним кольором тла. Наприклад, таким чином:

У цьому випадку на спорінці з відступами 10px по вертикалі й горизонталі від верхнього лівого кута сторінки буде зображено квадрат зі стороною 360px зеленого кольору.

Примітка. Насправді, наявність чи відсутність мерехтіння екрану істотно залежить не стільки від коду, скільки від потужності ПК і віддаленості сервера. Тому при роботі з малопотужним ПК вимушені змиритися з таким мерехтінням.

Передавання значень при переході до іншого коду php можна здійснити за допомогою:

Останні два способи передавання даних продемонструємо такими прикладами.

Початково завантажений файлФайл, до якого буде
здійснено перехід
<?php
$d="Дані файлу a1.php";
Header("Location:a2.php?a1_a2=$d");
?>
<?php
echo $_GET['a1_a2'];
?>

<?php
session_start();
$d="Дані файлу b1.php";
$_SESSION['b1_b2']=$d;
Header("Location:b2.php");
?>
<?php
session_start();
echo $_SESSION['b1_b2'];
?>

Рядки адрес браузерів після завантаження файлів a2.php і b2.php будуть (з точністю до початку) такими:

В обох випадках буде виведено значення змінної $d з файлу, який буде завантажено спочатку: "Дані файлу *1.php".

При оновленні сторінки чи спрямуванні на іншу сторінку час виконанні цих операцій може перевищувати бажаний проміжок часу на оновлення зображення. У цьому випадку (наприклад, при поданні руху об'єктів виключно засобами PHP, як це вимагається у завданнях 1 і 2) штучну затримку влаштовувати недоцільно. На жаль, при цьому проміжок часу між оновленнями може змінюватися залежно від стану сервера і мережі.

substr($s,$k,$n) — повертає частину рядка $s довжини $n, починаючи з позиції $k.

rand($a,$b) — повертає випадкове ціле число з [$a, $b].

Header('Refresh: 0'); — оновлення поточної сторінки.
Header("Location:1.php"); — переадресація на файл 1.php. Спрацьовує, якщо до застосування користувач не отримав жодного повідомлення зі сторінки.

Затримка й встановлення часу виконання коду php можуть бути викликані дією таких вказівок:

sleep (2);                 // Затримка на 2 секунди (аргумент - ціле число секунд)
usleep (3000000);          // Затримка на 3 секунди (аргумент - ціле число мікросекунд)
time_nanosleep (1, 500);   // Затримка на 1 секунду і 500 наносекунд
time_sleep_until ($t);     // Затримка до часу $t (у секундах) з 1979 року
$t=time();                 // Поточний час (у секундах) з 1979 року
set_time_limit (4);        // Встановлення часу виконання коду 4 секунди 
set_time_limit (0);        // Встановити необмежений час виконання коду
exit("текст");             // припинення виконання коду з виведенням рядка "текст"

3. Інструктаж з ТБ
4. Вироблення практичних навичок


Snake (Пітон, Удав, Змійка)комп'ютерна гра Танелі Арманто, що уперше з'явилася у кнопочному телефоні Nokia 6110. Гравець керує довгою тонкою істотою, схожою на змію, яка повзає клітинами прямокутного поля, збираючи їжу й уникаючи зіткнення з власним хвостом і краями ігрового поля. Кожного разу після поглинання їжі змія стає довшою. Зазвичай, на один сегмент, що займає одну клітину ігрового поля — див. приклад.

Завдання: cтворити гру «Змійка» (Snake).

Вказівки до виконання

  1. Створити файл 0.php, у якому описати:
    • замовлення роботи з сесіями;
    • задання розмірів і початкового стану гри;
    • формування даних сесії;
    • перехід до файлу 1.php.
    Порівняти з очікуваним.
  2. Створити файл 1.php, у якому описати:

    • отримання даних для поточної сторінки;

    • при потребі оголошення про припинення гри (у демонстраційному розв'язанні стан гри $i при цьому дорівнює 2) — перехід до 0.php ;

    • зображення поточного стану гри:
      • поле — темно зеленого кольору #003300;
      • сегменти — змійки квадрати білого кольору;
      • плід квадрат — червоного кольору;
    • виведення повідомлення: "Гру завершено! Довжина змійки $n" і переведення гри у стан $i = 2, якщо до цього гра перебувала у стані $i = 1;

    • визначання наступної позиції гри;
      • визначання розташування голови змійки;
      • перевірка спроби перетнути межу ігрового поля;
      • перевірка самоперетину змійки;
      • продовження руху або "поїдання плоду";
      • поява нового сегмента змійки на місці плоду;
    • формування даних сесії для наступної сторінки;

    • виведення коду Javascript для переходу до файлу left.php, up.php , right.php чи down.php залежно авід того, яку клавішу зі стрілкою натиснуто';

    • оновлення сторінки після затримки на 1/5 секунди.

    Порівняти з очікуваним.

  3. Створити файли left.php, up.php , right.php і down.php, у яких змінювати останній символ даних сесії на той, що відповідає руху голови змійки відповідно ліворуч, вгору, праворуч і вниз. Порівняти з очікуваним для down.php.

  4. Кінцеву редакцію програм записати у вказану вчителем теку.

5. Підбиття підсумків уроку
Виставлення оцінок.

6. Домашнє завдання
Удосконалити програму, додавши запам'ятовування резуль­татів гри і збільшивши кількість плодів.


Текст упорядкував Олександр Рудик