ebSkola

4.5 Sadursme aptur spēli — projekta 1. daļa

Šodien: Sāc kustīgas spēles projektu: pārbaudi sadursmi un skaidri parādi spēles beigas.

Tēmas projekts · 1. daļa no 2

Īsā teorija

Sadursme ir brīdis, kad abu kvadrātu laukumi pārklājas. Gatavā funkcija saduras(a, b) to pārbauda.

&& nozīmē “un”. Funkcijā visām četrām pārbaudēm jāizpildās reizē.

Kad ir sadursme, apturi kustību un parādi spēlētājam saprotamu ziņu.

if (saduras(speletajs, pretinieks)) {
  aktiva = false;
  clearInterval(taimeris);
}

Sākuma kods un darba vieta

Vide: mācību lapa → VS Code

  1. VS Code ar File → Open Folder atver Desktop/datorika9-tema4 . Ja mapes nav, izveido to darbvirsmā.
  2. Šajā mācību lapā nospied Kopēt sākuma kodu .
  3. VS Code nospied Ctrl+N un ielīmē kodu ar Ctrl+V .
  4. Saglabā ar Ctrl+Shift+S tēmas mapē kā 45.html .
Lejupielādēt 45.html

Atvērt pilno sākuma kodu
<!DOCTYPE html>
<html lang="lv">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mana spēle</title>
<style>
body { font-family: Arial, sans-serif; max-width: 680px; margin: 24px auto; padding: 16px; line-height: 1.6; }
button, input { font: inherit; padding: 10px; margin: 4px; }
button { cursor: pointer; }
img { max-width: 100%; height: auto; }
[hidden] { display: none !important; }
#laukums { position: relative; width: 300px; height: 220px; max-width: 100%; background: #edf5ff; outline: 2px solid #245b91; overflow: hidden; }
#speletajs, #pretinieks, #moneta { position: absolute; width: 30px; height: 30px; }
#speletajs { background: #245b91; left: 20px; top: 160px; }
#pretinieks { background: #b3261e; left: 220px; top: 160px; }
#moneta { background: #ffca28; left: 140px; top: 160px; border-radius: 50%; }
</style>
</head>
<body>
<h1>Izvairies no pretinieka</h1>
<p>Ar pogām vai bultiņām pārvieto zilo kvadrātu. Izvairies no sarkanā.</p>
<div id="laukums">
  <div id="speletajs"></div>
  <div id="pretinieks"></div>
</div>
<button id="sakt">Sākt</button>
<button id="paKreisi">←</button>
<button id="paLabi">→</button>
<button id="uzAugsu">↑</button>
<button id="uzLeju">↓</button>
<button id="atjaunot">Sākt no jauna</button>
<p id="punkti">Punkti: 0</p>
<p id="stavoklis">Nospied Sākt.</p>
<script>
let x = 20;
let y = 160;
let pretiniekaX = 220;
let punkti = 0;
let aktiva = false;
let taimeris = null;
const solis = 10;
const pretiniekaAtrums = 3;
const speletajs = document.getElementById("speletajs");
const pretinieks = document.getElementById("pretinieks");
function paradit() {
  speletajs.style.left = x + "px";
  speletajs.style.top = y + "px";
  pretinieks.style.left = pretiniekaX + "px";
  document.getElementById("punkti").textContent = "Punkti: " + punkti;
}
function saduras(a, b) {
  const p = a.getBoundingClientRect();
  const q = b.getBoundingClientRect();
  return p.left < q.right && p.right > q.left &&
         p.top < q.bottom && p.bottom > q.top;
}
function parbaudit() {
  if (saduras(speletajs, pretinieks)) {
    aktiva = false;
    clearInterval(taimeris);
    document.getElementById("stavoklis").textContent = "Sadursme! Spēle beigusies.";
  }
}
function kustinat(dx, dy) {
  if (!aktiva) { return; }
  x = x + dx * solis;
  y = y + dy * solis;
  const laukums = document.getElementById("laukums");
  const robeza = laukums.clientWidth - 30;
  x = Math.max(0, Math.min(robeza, x));
  y = Math.max(0, Math.min(laukums.clientHeight - 30, y));
  paradit();
  parbaudit();
}
function cikls() {
  pretiniekaX = pretiniekaX - pretiniekaAtrums;
  if (pretiniekaX < 0) {
    pretiniekaX = document.getElementById("laukums").clientWidth - 30;
    punkti = punkti + 1;
  }
  paradit();
  parbaudit();
}
function sakt() {
  if (aktiva) { return; }
  x = 20;
  y = 160;
  pretiniekaX = document.getElementById("laukums").clientWidth - 30;
  punkti = 0;
  aktiva = true;
  speletajs.style.backgroundColor = "";
  document.getElementById("stavoklis").textContent = "Spēle notiek.";
  clearInterval(taimeris);
  paradit();
  taimeris = setInterval(cikls, 30);
}
document.getElementById("sakt").addEventListener("click", sakt);
document.getElementById("paKreisi").addEventListener("click", function () { kustinat(-1, 0); });
document.getElementById("paLabi").addEventListener("click", function () { kustinat(1, 0); });
document.getElementById("uzAugsu").addEventListener("click", function () { kustinat(0, -1); });
document.getElementById("uzLeju").addEventListener("click", function () { kustinat(0, 1); });
document.getElementById("atjaunot").addEventListener("click", function () { location.reload(); });
document.addEventListener("keydown", function (notikums) {
  if (notikums.key === "ArrowLeft") { notikums.preventDefault(); kustinat(-1, 0); }
  if (notikums.key === "ArrowRight") { notikums.preventDefault(); kustinat(1, 0); }
  if (notikums.key === "ArrowUp") { notikums.preventDefault(); kustinat(0, -1); }
  if (notikums.key === "ArrowDown") { notikums.preventDefault(); kustinat(0, 1); }
});
paradit();
</script>
</body>
</html>

1. uzdevums

Palaid spēli un atrodi sadursmi

Vide: VS Code → pārlūks

  1. Sāc ar 45.html .
  2. Pārlūkā nospied Sākt un pagaidi, līdz kvadrāti satiekas.
  3. Pārbaudi, ka kustība apstājas un parādās beigu ziņa.

Gatavs, kad: Gatavā sadursmes pārbaude apstādina spēli.

2. uzdevums

Parādi sadursmi ar krāsu

Vide: VS Code

  1. Atrodi funkciju parbaudit() .
  2. Tās if bloka beigās pievieno speletajs.style.backgroundColor = "#6b1d1d"; .
  3. Nomaini sadursmes ziņu uz savai spēlei piemērotu tekstu.

Gatavs, kad: Sadursmes brīdī spēlētājs mainīs krāsu un ziņu.

3. uzdevums

Pielāgo spēli un pārbaudi restartu

Vide: VS Code → pārlūks

  1. Nomaini nosaukumu, vadības norādi un spēlētāja sākuma krāsu CSS.
  2. Izspēlē sadursmi. Pēc tās nospied kustības pogas: spēlētājs vairs nedrīkst kustēties.
  3. Nospied Sākt no jauna , tad Sākt . Spēlētājam jāatgūst sākuma krāsa un kustība.
  4. Saglabā un nosūti darbu uz GitHub.

Gatavs, kad: Darbojas sadursmes efekts un pilna sākšana no jauna.

Iesniedz 3. uzdevuma rezultātu

Iesniedz pabeigto 45.html skolotāja norādītajā vietā. Šo pašu versiju saglabā arī GitHub.

Stunda ir ieskaitīta, ja 3. uzdevuma rezultāts atbilst visiem šiem punktiem:

  • Spēlei ir savs nosaukums un vadības norāde.
  • Sadursme aptur spēli, maina spēlētāja krāsu un parāda ziņu.
  • Pēc beigām kustības pogas neko nemaina; sākšana no jauna atjauno spēli.

1. un 2. uzdevums sagatavo šo rezultātu. Papildu uzdevums nav vajadzīgs ieskaitei.

Saglabā un nosūti uz GitHub — pogu atgādne

Vide: VS Code / Source Control → GitHub pārlūkā

  1. Ar File → Save All saglabā failus. Atver Source Control ar Ctrl+Shift+G .
  2. Pie Changes nospied + (Stage All Changes). Pārbaudi, ka vajadzīgie faili pārvietojas uz Staged Changes .
  3. Ziņas laukā ieraksti īsu izmaiņu, piemēram, Pabeigts 4.5 darbs . Spied Commit .
  4. Ja šī tēmas mape vēl nav GitHub, spied Publish to GitHub un izveido publisku projektu datorika9-tema4 . Jau publicētam projektam spied Sync Changes . Ja pogas nav, atver … → Push .
  5. Pārlūkā atver savu GitHub projektu un pārbaudi faila pēdējās izmaiņas.

Ja Source Control rāda Initialize Repository , vispirms nospied to. Ja parādās kļūda vai sapludināšanas pieprasījums, izmanto palīdzību un palūdz skolotāja atbalstu.

Papildu uzdevums: Maini pretinieka ātrumu

Sāc, kad 3. uzdevums ir gatavs un iesniegts. Ja vēlies paturēt obligāto versiju, saglabā kopiju ar citu nosaukumu.

  1. Izvēlies pretiniekaAtrums vērtību no 1 līdz 5.
  2. Izmēģini, vai pie šī ātruma vari laikus pārvietot spēlētāju.
Ja kaut kas neizdodas

Palīdzība Git, kontam un darba atvēršanai

Skolotājam: sasniedzamo rezultātu saistība

Šajā nodarbībā vingrina šādu rezultātu daļas no 9. klases saraksta . Piesaiste pati par sevi nenozīmē visa rezultāta apguvi.

Kursa nosacījumi un satura pārklājums