Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Game Design.docx
Скачиваний:
26
Добавлен:
13.04.2015
Размер:
10.72 Mб
Скачать

1.4 Ход работы

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

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

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

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

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

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

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

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

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

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

<!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>

Создадим основные внешние переменные, используемые для написания скрипта:

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;

}

}

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