Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <Html>
- <head>
- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
- <meta charset="utf-8"/>
- <title>Zmija</title>
- <style>
- canvas
- {
- margin: 0 auto;
- display: block;
- border:1px solid black;
- }
- </style>
- </head>
- <body >
- <canvas id="canvas" width="800" height="400"></canvas>
- <script type="text/javascript">
- $(document).ready(function()
- {
- var canvas = $("#canvas")[0];
- var ctx = canvas.getContext("2d");
- var w = $("#canvas").width();
- var h = $("#canvas").height();
- var cw = 20; //dolzina na edna celija vo pikseli.
- var d; // nasoka na dvizenje, cuva string.
- var food; //hrana sho ja jade neli za da porasne.
- var score; // poeni
- var snake_array; //Inicijalizacija na kjelii za zmijata.
- function init()
- {
- //wall_canvas();
- d = "right"; //Na start odi na desno.
- create_snake(); // Ja crta zmijata.
- create_food(); //Ja crta hranata.
- score = 0; //Poeni
- //Go updejtira canvasot na sekoi 60ms
- if(typeof game_loop != "undefined") clearInterval(game_loop);
- game_loop = setInterval(paint, 120);
- }
- init();
- function create_snake() //Kreiranje zmija.
- {
- var length = 5; //Pocetna dolzina
- snake_array = []; //Prazna niza na start.
- for(var i = length-1; i>=0; i--)
- {
- //Ja crta nizata na kanvasot,kreira 4 kocki na start.
- snake_array.push({x: i, y:0});//push dodava element na kraj od nizata i ja updejtira goleminata na nizata vo lenght.
- }
- }
- //Kreira hrana
- function create_food()
- {
- food =
- {
- x: Math.round(Math.random()*(w-cw)/cw),
- y: Math.round(Math.random()*(h-cw)/cw),
- };
- //cw=10 znaci sekoja kelija e 10px,canvasov e 450, znaci ima 44 mozni pozii kaj sho moze da kreira hrana.
- }
- function wall_canvas()
- {
- ctx.beginPath();
- ctx.strokeRect(0, 0, w, h);
- ctx.stroke();
- ctx.closePath();
- }
- //Ja crta zmijata po inicijalizacija
- function paint()
- {
- //Crta beja linija na mestata koj gi pominala zmijata,ako nee ova ostava trag na canvasot.
- ctx.fillStyle = "white";
- ctx.fillRect(0, 0, w, h);
- ctx.strokeStyle = "black";
- ctx.strokeRect(0, 0, w, h);
- //Dvizenje na zmijata, ja zema poslednata kelija od nizata i ja stava posle prvata.
- var nx = snake_array[0].x;
- var ny = snake_array[0].y;
- //nx i ny e momentalna pozicija na prvata kelija.
- //Se zgolemuva za 1, za da se dobio prazno mesto koe kje go potpolni poslednata kelija.
- //Odreduva na koja strana da se drzi zmijata, cuva string.
- if(d == "right") nx++;
- else if(d == "left") nx--;
- else if(d == "up") ny--;
- else if(d == "down") ny++;
- //Restatira ako e game over,proveruva dali prvata kelija dopira nekoja druga, i povikuva funkcija za detekcija na kolizija so zidot
- //Ako edno od ovie e true, go restatira canvasot.
- if(nx == -1 || nx == w/cw || ny == -1 || ny == h/cw || check_collision(nx, ny, snake_array))
- {
- init();
- return;
- }
- //Detekcija na sudir so hrana,nx i ny e pozicija na prvata kelija, ako e vo sudir so x i y od hranata, dodaj nova kelija na start od nizata.
- if(nx == food.x && ny == food.y)
- {
- var tail = {x: nx, y: ny};
- score++;
- //Ja povikuva funkcija odozgora, za nova hrana da kreira.
- create_food();
- }
- else
- {
- var tail = snake_array.pop(); // Ja brise poslednata kelija.
- tail.x = nx; tail.y = ny;// ja stava poslednaja kjelija kako prva.
- }
- snake_array.unshift(tail); //Ja stava poslednata kelija kako prva vo nizata.
- for(var i = 0; i < snake_array.length; i++)
- {
- var c = snake_array[i];
- //Povikuva funkcija za boenje na keliite na zmijata.
- paint_cell(c.x, c.y);
- }
- //Povikuva funkcija za boenje na hranata.
- paint_cella(food.x, food.y);
- //ja bio score promenlivata.
- ctx.font = "20px Arial";
- var score_text = "Score: " + score;
- ctx.fillText(score_text, 15, h-5);
- }
- //Funkcija za boenje.
- function paint_cell(x, y)
- {
- ctx.fillStyle = "green";
- ctx.fillRect(x*cw, y*cw, cw, cw);
- ctx.strokeStyle = "#03170B";// stava mala beja linija pomedju site kelii da izgledat pouavo.
- ctx.strokeRect(x*cw, y*cw, cw, cw);
- }
- function paint_cella(x, y)
- {
- ctx.fillStyle = "blue";
- ctx.fillRect(x*cw, y*cw, cw, cw);
- ctx.strokeStyle = "white";// stava mala beja linija pomedju site kelii da izgledat pouavo.
- ctx.strokeRect(x*cw, y*cw, cw, cw);
- }
- function check_collision(x, y, array)
- {
- //Funkcija za detekcija na kolizicija,proveruva dali xy kordinati od zidot gi ima
- //Vo momentalna pozicija na zmijata
- //Ja vrti cela niza i proveruva xy kordinati na sekoja kelija
- //Vrajca true ako ima kolizija,vo red 95 se povikuva funkcijava za proverka.
- //in an array of cells or not
- for(var i = 0; i < array.length; i++)
- {
- if(array[i].x == x && array[i].y == y)
- return true;
- }
- return false;
- }
- //Kontroli, koristi keydown od jquary.
- $(document).keydown(function(e)
- {
- var key = e.which;
- if(key == "37" && d != "right") d = "left"; //Ova mora vaka, za da ne mozes da svrtish nanazad.
- else if(key == "38" && d != "down") d = "up";
- else if(key == "39" && d != "left") d = "right";
- else if(key == "40" && d != "up") d = "down";
- })
- })
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement