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
-
VS Code ar
File → Open Folder
atver
Desktop/datorika9-tema4. Ja mapes nav, izveido to darbvirsmā. - Šajā mācību lapā nospied Kopēt sākuma kodu .
- VS Code nospied Ctrl+N un ielīmē kodu ar Ctrl+V .
-
Saglabā ar
Ctrl+Shift+S
tēmas mapē kā
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
-
Sāc ar
45.html. - Pārlūkā nospied Sākt un pagaidi, līdz kvadrāti satiekas.
- 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
-
Atrodi funkciju
parbaudit(). -
Tās
ifbloka beigās pievienospeletajs.style.backgroundColor = "#6b1d1d";. - 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
- Nomaini nosaukumu, vadības norādi un spēlētāja sākuma krāsu CSS.
- Izspēlē sadursmi. Pēc tās nospied kustības pogas: spēlētājs vairs nedrīkst kustēties.
- Nospied Sākt no jauna , tad Sākt . Spēlētājam jāatgūst sākuma krāsa un kustība.
- 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ā
- 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.5 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: 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.
-
Izvēlies
pretiniekaAtrumsvērtību no 1 līdz 5. - Izmēģini, vai pie šī ātruma vari laikus pārvietot spēlētāju.
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
45.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.