Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.05.2013, 11:05
Новичок на форуме
Отправить личное сообщение для Shepico Посмотреть профиль Найти все сообщения от Shepico
 
Регистрация: 30.05.2013
Сообщений: 4

Хранение игрового поля
Подскажите, как реализуется игровое поле в JS?
Использовать можно массив или есть другие варианты?
Ответить с цитированием
  #2 (permalink)  
Старый 30.05.2013, 13:16
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,124

Shepico, что есть "игровое поле в JS"?
Ответить с цитированием
  #3 (permalink)  
Старый 30.05.2013, 14:10
Новичок на форуме
Отправить личное сообщение для Shepico Посмотреть профиль Найти все сообщения от Shepico
 
Регистрация: 30.05.2013
Сообщений: 4

Прошу прощения. Уточню. Я имею ввиду статическое поле для игры. Поле не меняется динамически.
Ответить с цитированием
  #4 (permalink)  
Старый 30.05.2013, 14:18
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,124

Shepico, что за "поле"? Какой "игры"?
Ответить с цитированием
  #5 (permalink)  
Старый 30.05.2013, 14:54
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Вы имеете ввиду окно для игры?
Ну для игр лучше использовать canvas.

<canvas></canvas>
Ответить с цитированием
  #6 (permalink)  
Старый 30.05.2013, 14:55
Профессор
Отправить личное сообщение для mta88 Посмотреть профиль Найти все сообщения от mta88
 
Регистрация: 16.05.2013
Сообщений: 229

как и в большинстве других языков программирования, используются конструкции, наиболее удобные с точки зрения программиста

а понятие "игровое поле" весьма и весьма растяжимо
Ответить с цитированием
  #7 (permalink)  
Старый 30.05.2013, 15:44
Новичок на форуме
Отправить личное сообщение для Shepico Посмотреть профиль Найти все сообщения от Shepico
 
Регистрация: 30.05.2013
Сообщений: 4

Про canvas понятно. Но как обычно хранят поле игры, т.е. где и что нарисовать на canvas? Т.е. разные блоки и т.д.
Ответить с цитированием
  #8 (permalink)  
Старый 30.05.2013, 22:10
Аватар для zOdmin
Аспирант
Отправить личное сообщение для zOdmin Посмотреть профиль Найти все сообщения от zOdmin
 
Регистрация: 05.03.2012
Сообщений: 62

Каждый придумывает свою архитектуру. От этого зависит, насколько игра будет шустро работать. Универсальных рецептов нет - зависит от конкретной игры, ее правил, геймплея.
Ответить с цитированием
  #9 (permalink)  
Старый 03.06.2013, 13:54
Новичок на форуме
Отправить личное сообщение для Shepico Посмотреть профиль Найти все сообщения от Shepico
 
Регистрация: 30.05.2013
Сообщений: 4

Спасибо, это и хотел услышать, а то думал, может есть какие то стандарты или правила
Ответить с цитированием
  #10 (permalink)  
Старый 01.07.2013, 19:03
Аватар для Seva Pletnev
Аспирант
Отправить личное сообщение для Seva Pletnev Посмотреть профиль Найти все сообщения от Seva Pletnev
 
Регистрация: 06.05.2013
Сообщений: 42

вот зацени этот код =) сам мучился на эту тему )

<html><canvas id=c width=512 height=512</canvas> <script>
c= document.getElementById('c');g= c.getContext('2d'); //вызываем canvas и задаем его параметры

xq=0; yq=0; // координаты игрока
xw=16; yw=16; // координаты моба

mapDot=16; //размер клетки

// 0 уголь 1 мостовая 2 земля 3 песок 4 лес 5 трава 6 вода 7 камень
mapCol = ['#333','#936','#963','#990','#693','#396','#369',' #999']; //массив цветов
map =[5,5,5,5,5,5,5,5,1,4,4,4,4,5,5,5,5,5,3,6,6,6,6,6,6, 6,6,6,6,6,6,6,
5,5,5,5,5,5,0,5,1,4,5,5,5,5,4,5,5,5,5,3,6,6,6,6,6, 6,6,6,6,6,6,6,
0,0,5,5,5,5,0,5,1,4,5,5,5,0,0,0,4,4,4,4,4,6,6,6,6, 6,6,6,6,6,6,6,
5,0,0,5,5,5,5,5,1,4,5,5,5,0,0,0,0,5,5,5,4,4,6,6,6, 6,6,6,6,6,6,6,
5,5,5,5,5,5,5,5,1,4,5,5,5,5,0,0,0,5,5,5,5,4,4,3,6, 6,6,6,6,6,6,6,
5,5,0,0,0,5,5,5,1,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,3, 3,6,6,6,6,6,6,
5,5,5,0,0,5,5,5,1,4,5,7,7,7,7,5,5,5,5,5,5,5,5,4,4, 5,3,6,6,6,6,6,
5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,7,5,5,5,5,0,0,5,4, 4,5,3,3,3,3,3,
1,1,1,1,1,1,1,1,1,5,5,7,7,7,7,7,1,7,5,5,5,5,0,5,5, 4,4,4,4,4,4,4,
5,5,5,5,5,5,5,5,5,5,5,5,3,3,3,3,7,1,7,5,5,5,5,5,5, 5,5,5,4,4,5,5,
4,4,4,4,4,4,4,4,4,4,5,3,3,3,6,6,3,3,1,7,5,5,5,5,5, 5,5,5,5,4,5,5,
4,4,4,4,4,4,4,4,5,4,4,3,6,6,6,6,6,3,3,1,5,5,5,5,5, 5,5,5,5,5,4,5,
6,5,5,5,5,5,5,5,5,5,4,3,6,6,6,6,6,6,3,5,1,1,1,1,1, 1,1,1,1,1,1,1,
4,6,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,3,3,5,1,5,0,5,5, 5,5,5,5,5,5,5,
4,5,6,6,6,5,5,5,5,5,5,4,5,3,6,6,3,3,5,5,1,5,0,5,5, 5,7,5,5,5,5,5,
4,4,4,4,4,4,4,4,4,4,4,5,5,5,3,3,3,5,5,5,1,5,5,5,5, 7,7,7,5,5,5,5,
5,4,5,4,4,4,5,4,4,5,4,4,5,5,4,4,4,4,4,5,1,5,5,5,7, 0,0,7,7,5,5,5,
5,4,5,4,4,4,4,4,5,4,5,5,4,4,5,4,5,4,4,5,1,5,5,5,7, 7,7,7,7,5,5,5,
5,4,4,5,4,5,4,5,4,4,4,4,4,5,4,5,4,4,5,5,1,5,5,5,7, 0,7,7,5,5,5,5,
5,5,5,4,4,5,4,5,4,4,4,4,4,4,5,4,4,5,4,4,1,5,5,5,7, 0,0,7,5,5,5,5,
4,4,4,4,4,4,4,5,4,5,4,4,5,4,5,5,5,5,4,5,1,5,5,5,7, 7,7,7,5,0,0,5,
5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,1,5,0,5,7, 7,7,7,0,0,0,0,
4,4,4,5,5,5,2,2,2,2,5,5,5,5,5,5,5,5,4,5,1,5,5,5,7, 7,0,7,5,0,0,5,
5,5,4,4,5,5,2,2,2,2,5,5,5,5,5,5,5,5,4,4,1,5,5,5,5, 7,7,7,5,0,0,5,
5,4,4,5,5,5,2,2,2,2,5,5,5,5,5,5,5,5,4,4,1,5,5,5,5, 5,7,5,5,0,5,5,
4,5,4,5,5,5,2,2,2,2,5,5,5,5,5,5,5,5,4,4,1,5,5,5,5, 5,5,5,5,5,5,5,
5,4,4,5,5,5,2,2,2,2,5,5,5,5,5,5,5,5,4,5,1,5,5,0,5, 5,5,0,0,5,5,5,
4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,1,5,5,0,5, 5,5,0,0,5,5,5,
5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,1,5,5,0,5, 5,5,5,0,0,5,5,
4,4,4,5,4,4,4,4,4,5,5,5,4,4,5,5,5,4,4,4,1,5,5,5,5, 5,5,5,5,5,5,5,
4,4,4,4,4,5,4,4,4,4,5,5,4,5,4,5,5,4,4,4,1,5,5,5,5, 5,5,5,5,5,5,5,
5,5,3,5,4,5,5,4,5,4,4,4,4,5,4,4,5,5,4,4,1,5,5,5,5, 5,5,5,5,5,5,5]; //массив содержащий индексы клеток
// 1 вверх 2 вниз 3 влево 4 вправо
Mobprid=[1,1,1,1,4,4,4,1,1,1,1,4,4,4,4,2,2,2,2,3,3,3,3,4,2, 2,2,2,1,1,1,1,4,4,4,4,2,2,2,2,3,3,3,3,3,3,3,3]; //массив содержащий путь моба
Mobi=0;


w= c.width; h= c.height;
setInterval('run()', 100); // таймер перерисовки экрана

function run() {
g.clearRect(0,0,w,h);

for (n=0; n<1024; n++){ //цикл перебирающий массив
y=n>>5;x=n&31;
z=map[n];
g.fillStyle=mapCol[z]; //рисуем клетку цвета соответствующему индексу из массива map
g.fillRect(x*mapDot,y*mapDot,mapDot,mapDot);
}
scrPlayer(); //вызываем игрока
scrMob(); //вызываем моба
}



function scrPlayer(){
switch (key){ //проверка нажатия клавиш
case 37: xq--;
break;
case 38: yq--;
break;
case 39: xq++;
break;
case 40: yq++;
break;
case 32: yq=0; xq=0;
break;
}
g.fillStyle="#0000ff";
g.fillRect(xq*mapDot,yq*mapDot,mapDot,mapDot); //рисуем игрока (синий)
if(xq==xw&&yq==yw) {alert(" game over")} //проверяем столкновение с мобом
}



function scrMob() {

g.fillStyle="#ff0000";
g.fillRect(xw*mapDot,yw*mapDot,mapDot,mapDot); //рисуем моба
i=Mobprid[Mobi];
Mobi++;
if(Mobi>=Mobprid.length) {Mobi=0;} //вытаскиваем индексы направлений из массива Mobprid и задаем путь
switch(i){
case 1: yw--;
break;
case 2: yw++;
break;
case 3: xw--;
break;
case 4: xw++;
break;
}
}


document.onkeydown = keyDn; document.onkeyup = keyUp; key=0;
function keyDn(e) {key = e.which; /*alert(key);*/ }
function keyUp(e) {key = 0;}


</script></html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрытие\показывание поля при вводе текста egor1708 Элементы интерфейса 2 30.11.2012 19:02
получение значения поля eidicon jQuery 4 02.07.2012 19:06
Реализация игрового поля для игры "Точки" last-art Events/DOM/Window 7 22.04.2012 03:18
Как сделать связанные поля ввода diakon Элементы интерфейса 2 11.12.2009 16:17
Динамическое клонирование поля и AJAX supercelt AJAX и COMET 6 02.09.2008 11:27