fbpx

Poseban poklon dobrodošlice. Ostvarite popust od 30% na kurs Front-end do 1. juna.

HomeKreiranje igre „Zmija“ pomoću čistog JavaScript-a i HTML5

Kreiranje igre „Zmija“ pomoću čistog JavaScript-a i HTML5


Kreiranje igre „Zmija“ pomoću čistog JavaScript-a i HTML5

Zmija je klasična igra koju znamo još iz davnih vremena. U ovom članku, pokazaćemo vam kako da kreirate kompletnu igru „Zmija“ koristeći čisti JavaScript i HTML5.

Za kreiranje web igara na JavaScriptu koristi se Canvas tehnologija, koja omogućava izvršavanje JavaScript koda unutar HTML5 dokumenta. HTML stranica može sadržati klasičnu strukturu u koju je potrebno ubaciti canvas za prikaz igre. Evo primer koda:

<!DOCTYPE html>
<html lang="sr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Igra na JavaScriptu</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <canvas id="game" width="608" height="608"></canvas>
    <script src="js/game.js"></script>
</body>
</html>

Unutar ovog fajla povezujemo skriptu „game.js“ koja će opisati sve funkcionalnosti naše igre.

JavaScript datoteka

Unutar JavaScript datoteke dodajte odabir canvasa, kao i kontekst igre:

var cvs = document.getElementById("canvas");
var ctx = cvs.getContext("2d");

Dodavanje slika i zvuka

Zatim je potrebno učitati sve osnovne slike koje će biti korišćene u igri. Koristite klasu Image za ovo. Kod za dodavanje slika i zvuka u igru:

const ground = new Image();
ground.src = "img/ground.png";

const foodImg = new Image();
foodImg.src = "img/food.png";

Crtanje objekata

Da biste nacrtali objekte i dodali funkcionalnost igri, potrebno je napisati funkciju koja će se stalno pozivati. Tu funkciju možete nazvati kako god želite. Da bi funkcija neprestano radila, možete pokrenuti njeno izvršavanje pomoću setInterval().

function draw() {
    // Neki kod
}

let game = setInterval(draw, 100); // Pozivanje funkcije spolja

Sav kod igre treba staviti u ovaj metod, jer će se u njemu stalno obrađivati i igra će izgledati živa i animirana.

Da biste pratili pritisak igrača na bilo koje dugme, potrebno je koristiti praćenje događaja – addEventListener. Na primer, da biste pratili pritisak na bilo koje dugme na tastaturi, treba napisati sledeći kod:

// Prilikom pritiska na neko dugme
document.addEventListener("keydown", someMethod);
// Poziva se metoda someMethod
function someMethod() {
    // Menjamo nešto u kodu
}

To su bili samo osnovni uvodi pre kreiranja same igre. Predlažemo vam da se upoznate sa našim kursom, tokom kojeg ćete naučiti kako da kreirate slične igre i mnogo više.

Kompletan JavaScript kod igre

Na kraju, pogledajte ceo JavaScript kod koji je kreiran tokom video lekcije.

const canvas = document.getElementById("game");
const ctx = canvas.getContext("2d");

const ground = new Image();
ground.src = "img/ground.png";

const foodImg = new Image();
foodImg.src = "img/food.png";

let box = 32;

let score = 0;

let food = {
	x: Math.floor((Math.random() * 17 + 1)) * box,
	y: Math.floor((Math.random() * 15 + 3)) * box,
};

let snake = [];
snake[0] = {
	x: 9 * box,
	y: 10 * box
};

document.addEventListener("keydown", direction);

let dir;

function direction(event) {
	if(event.keyCode == 37 && dir != "right")
		dir = "left";
	else if(event.keyCode == 38 && dir != "down")
		dir = "up";
	else if(event.keyCode == 39 && dir != "left")
		dir = "right";
	else if(event.keyCode == 40 && dir != "up")
		dir = "down";
}

function eatTail(head, arr) {
	for(let i = 0; i < arr.length; i++) {
		if(head.x == arr[i].x && head.y == arr[i].y)
			clearInterval(game);
	}
}

function drawGame() {
	ctx.drawImage(ground, 0, 0);

	ctx.drawImage(foodImg, food.x, food.y);

	for(let i = 0; i < snake.length; i++) {
		ctx.fillStyle = i == 0 ? "green" : "red";
		ctx.fillRect(snake[i].x, snake[i].y, box, box);
	}

	ctx.fillStyle = "white";
	ctx.font = "50px Arial";
	ctx.fillText(score, box * 2.5, box * 1.7);

	let snakeX = snake[0].x;
	let snakeY = snake[0].y;

	if(snakeX == food.x && snakeY == food.y) {
		score++;
		food = {
			x: Math.floor((Math.random() * 17 + 1)) * box,
			y: Math.floor((Math.random() * 15 + 3)) * box,
		};
	} else
		snake.pop();

	if(snakeX < box || snakeX > box * 17
		|| snakeY < 3 * box || snakeY > box * 17)
		clearInterval(game);

	if(dir == "left") snakeX -= box;
	if(dir == "right") snakeX += box;
	if(dir == "up") snakeY -= box;
	if(dir == "down") snakeY += box;

	let newHead = {
		x: snakeX,
		y: snakeY
	};

	eatTail(newHead, snake);

	snake.unshift(newHead);
}

let game = setInterval(drawGame, 100);

Naučite JavaScript i HTML na našem kursu „Front-End Junior Developer“ i otkrijte kako tehnologija može oživeti vaše web projekte. Pridružite se sada i proširite svoje veštine kroz raznovrsne module i praktične aktivnosti koje nudimo.

Share:

Categories

Možda ćete voleti i

Visual Studio Code je program sa prijatnim interfejsom i brojnim funkcijama. Svaki korisnik može dodati funkcionalnosti pomoću ekstenzija. U ovom...
  • мај 4, 2024
U ovom članku ćemo govoriti o čistom kodu — njegovim prednostima, različitim standardima i principima koda, kao i opštim smernicama...
  • мај 3, 2024