Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лб1-html5.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
751.1 Кб
Скачать

1.3.3 Пример создания html5-игры «Змейка»

В качестве задания создадим простейшую игру змейка, для этого необходимо сделать следующие шаги:

– создать форму, для отображения игры;

– создать переменные для определения состояния змейки и основных констант;

– создать функции для отображения змейки;

– создать функции для основной логики игры;

– создать основной игровой цикл;

– обеспечить взаимодействие с пользователем;

– добавить медиа-контент;

– проинициализировать игру.

Для начала создадим форму, на которой будет отображаться игра:

<!doctype html>

<head>

<title>Snake</title>

</head>

<body onload="init()">

<input type="button" value="Play/Pause"

onclick="play()"><br />

<canvas id="canvas" style="border: solid 1px red;"

width="600" height="600">

</canvas>

</body>

Создадим основные внешние переменные, используемые для написания скрипта (создаются в теге <script>…</script>):

var bckColor = "rgb(0, 255, 255)";

var snakeColor = "rgb(0, 0, 0)"; //Цвет змейки

var foodColor = "rgb(0, 255, 0)"; //Цвет еды змейки

var ctx; //Объект context

var gridSize = 20; //Размер клетки

var snake; //Очередь элементов змейки

var food = []; //Координаты еды змейки

var direction; //Направление змейки

var changex = [-1, 0, 1, 0]; //Изменение координаты x в

//зависимости от направления

var changey = [0, -1, 0, 1]; //Изменение координаты y в

//зависимости от направления

var paused; //Состояние игры

var speed = 100; //Скорость перемещения змейки

var clock; //Объект таймера

Создадим функции отрисовки элементов:

function drawSnake(){

ctx.fillStyle = snakeColor;

ctx.fillRect(snake[snake.length - 1][0] * gridSize, snake[snake.length - 1][1] * gridSize, gridSize, gridSize);

}

function drawFood(){

ctx.fillStyle = foodColor;

ctx.fillRect(food[0] * gridSize, food[1] * gridSize, gridSize, gridSize);

}

function delPart(x, y){

ctx.fillStyle = bckColor;

ctx.clearRect(x * gridSize, y * gridSize, gridSize,

gridSize);

}

Создадим функцию принадлежности точки телу змейки.

function dotBelongSnake(x, y){

res = false;

for(i = 0; i < snake.length && !res; ++i)

res = x == snake[i][0] && y == snake[i][1];

return res;

}

Создадим функции добавления элементов, на поле.

function setX(x)

{

return x >= 0 ? x % (ctx.canvas.width / gridSize) : x +

(ctx.canvas.width / gridSize);

}

function setY(y)

{

return y >= 0 ? y % (ctx.canvas.height / gridSize) : y + (ctx.canvas.height / gridSize);

}

function addFood(){

do

{

food[0] = Math.floor(Math.random() *

(ctx.canvas.height / gridSize));

food[1] = Math.floor(Math.random() *

(ctx.canvas.height / gridSize));

}while(dotBelongSnake(food[0], food[1]));

drawFood();

}

Создадим функцию проверки змейки на столкновение.

function crash(){

res = false;

for(i = 0; i < snake.length - 1 && !res; ++i)

{

res = snake[i][0] == snake[snake.length - 1][0] &&

snake[i][1] == snake[snake.length - 1][1];

}

return res;

}

Создадим функцию управления состоянием игры.

function play(){

if(paused) clock = setInterval(movement, speed);

else clearInterval(clock);

paused = !paused;

}

Создадим основной игровой цикл.

function movement(){

snake.push([setX(snake[snake.length - 1][0] + changex[direction]), setY(snake[snake.length - 1][1] + changey[direction])])

if(!dotBelongSnake(food[0], food[1]))

{

delPart(snake[0][0], snake[0][1]);

snake.shift();

}

else

addFood();

if(crash())

{

play();

alert("Game Over;");

clear();

init();

}

drawSnake();

}

Создадим функцию управления игрой.

function changeDirection(event)

{

if(!paused)

{

code = 0

if(event == null) code = window.event.keyCode;

else code = event.keyCode;

switch(code)

{

case 37: if(direction != 2) direction = 0;

break;

case 38: if(direction != 3) direction = 1;

break;

case 39: if(direction != 0) direction = 2;

break;

case 40: if(direction != 1) direction = 3;

break;

}

}

}

Создадим функцию инициализации игры.

function init()

{

canvas = document.getElementById('canvas');

if (canvas.getContext)

{

snake = [[0, 0]];

direction = 2;

paused = true;

ctx = canvas.getContext('2d');

document.onkeydown =

function (event){changeDirection(event);};

addFood();

return true;

}

else

{

alert("Canvas isn’t supported!");

return false;

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]