ebSkola

4.6 Pabeidz kustīgo spēli — projekta 2. daļa

Šodien: Savieno kustību, punktus un sadursmi vienā pārbaudītā spēlē.

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

Īsā teorija

Spēles cikls atkārto kustību un pārbaudes. Šeit funkcija cikls() kustina pretinieku un atjauno punktus.

Punkts pienākas, kad pretinieks sasniedz laukuma kreiso malu. Pārbaudi, ka rādītājs tiešām mainās.

Vienā pārbaudē izmēģini sākšanu, citā — punktus, vēl citā — sadursmi un restartu.

if (pretiniekaX < 0) {
  pretiniekaX = document.getElementById("laukums").clientWidth - 30;
  punkti = punkti + 1;
}

Sākuma kods un darba vieta

Turpini savu iepriekšējās nodarbības projektu pēc 1. uzdevuma soļiem. Ja tā nav, šeit ir pilns sākuma paraugs. Jauno kopiju saglabā kā index.html mapē Desktop/datorika9-tema4 .

Lejupielādēt index.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

Turpini projektu

Vide: VS Code

  1. Saglabā sava 45.html kopiju kā index.html . Ja tā nav, izmanto šīs lapas pilno sākuma kodu.
  2. Pielāgo nosaukumu, krāsas un vadības tekstu. Pārliecinies, ka sadursme maina spēlētāja krāsu; vajadzīgā rinda ir speletajs.style.backgroundColor = "#6b1d1d"; sadursmes blokā.
  3. Izvēlies kustības soli no 10 līdz 30 un pretinieka ātrumu no 1 līdz 5.

Gatavs, kad: Projektā ir tava spēles versija ar sadursmes efektu.

2. uzdevums

Pielāgo punktu sistēmu

Vide: VS Code

  1. Funkcijā cikls() nomaini punkti = punkti + 1; uz punkti = punkti + 5; .
  2. Noteikumos pasaki, ka garām palaists pretinieks dod 5 punktus.
  3. README ieraksti spēles nosaukumu, vadību un atvēršanas norādi.

Gatavs, kad: Punktu aprēķins sakrīt ar noteikumiem.

3. uzdevums

Izpildi trīs pārbaudes un iesniedz

Vide: Pārlūks → VS Code → GitHub

  1. Sāc spēli un nospied Sākt vēl četras reizes. Ātrums un punkti nedrīkst mainīties tikai no klikšķiem.
  2. Ar bultiņu ↑ pārvieto spēlētāju virs pretinieka ceļa. Pagaidi, līdz pretinieks šķērso kreiso malu: jābūt 5 punktiem.
  3. Atgriezies pretinieka ceļā. Pēc sadursmes nospied Sākt no jauna . Jāatjaunojas sākuma krāsai un 0 punktiem. README atzīmē trīs pārbaudes ar darbojas vai konkrētu vēl esošu kļūdu.
  4. Izlabo atrastās kļūdas, pārbaudi vēlreiz un iesniedz GitHub projekta saiti.

Gatavs, kad: Punkti, sadursme un restarts darbojas atbilstoši noteikumiem.

Iesniedz 3. uzdevuma rezultātu

Iesniedz GitHub projekta saiti . Projektā jābūt pabeigtajam index.html un šajā nodarbībā prasītajiem failiem.

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

  • Darbojas pogu un tastatūras vadība ar laukuma robežām.
  • Pretinieka aplis dod 5 punktus; sadursme aptur spēli un maina krāsu.
  • Sākšana no jauna atjauno stāvokli; GitHub ir pilns projekts un trīs īsi testu rezultāti.

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.6 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: Pievieno uzvaru pie 20 punktiem

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

  1. Pēc punktu aprēķina pievieno pārbaudi if (punkti >= 20) { aktiva = false; clearInterval(taimeris); document.getElementById("stavoklis").textContent = "Uzvara!"; } .
  2. Pārbaudi, vai spēle apstājas pie 20 punktiem.
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