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
.
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
-
Saglabā sava
45.htmlkopiju kāindex.html. Ja tā nav, izmanto šīs lapas pilno sākuma kodu. -
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ā. - 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
-
Funkcijā
cikls()nomainipunkti = punkti + 1;uzpunkti = punkti + 5;. - Noteikumos pasaki, ka garām palaists pretinieks dod 5 punktus.
- 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
- Sāc spēli un nospied Sākt vēl četras reizes. Ātrums un punkti nedrīkst mainīties tikai no klikšķiem.
- 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.
-
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
darbojasvai konkrētu vēl esošu kļūdu. - 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ā
- Ar File → Save All saglabā failus. Atver Source Control ar Ctrl+Shift+G .
- Pie Changes nospied + (Stage All Changes). Pārbaudi, ka vajadzīgie faili pārvietojas uz Staged Changes .
-
Ziņas laukā ieraksti īsu izmaiņu, piemēram,
Pabeigts 4.6 darbs. Spied Commit . -
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 . - 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.
-
Pēc punktu aprēķina pievieno pārbaudi
if (punkti >= 20) { aktiva = false; clearInterval(taimeris); document.getElementById("stavoklis").textContent = "Uzvara!"; }. - Pārbaudi, vai spēle apstājas pie 20 punktiem.
Ja kaut kas neizdodas
-
Neredzi izmaiņas?
VS Code nospied Ctrl+S. Pārlūkā nospied Ctrl+R. Pārbaudi, ka atvērts tieši
index.html. - Kods redzams kā teksts? Saglabā ar galotni .html. Windows ieslēdz View → Show → File name extensions un pārbaudi, ka beigās nav .txt.
- Poga nestrādā? Pārbaudi, vai neizdzēsi pēdiņu, iekavu vai elementa id. Salīdzini savu laboto vietu ar sākuma kodu.
- Nesaproti nākamo soli? Atrodi pirmo nepabeigto soli un parādi skolotājam tieši šo vietu.