Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.11.2012, 02:07
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

вопрос по алгоритму проверки (для игры)
продолжаю писать свою игру, и хотел бы услышать мнение других о том на сколько тот алгоритм проверки что я придумал "адекватный" со стороны производительности.
(не знаю как такая игра называется, но помню принцип, когда то играл в такую)
Об игре:
есть поле для игры на нем:
с верху блоки(который нужно разбить),
с низу "доска" которая отбивает мячь,
и конечно мячик - самое интересное начинается когда нужно определить когда мяч взаимодействовал с блоком и с каким.
структура уровня состоит из многомерной матрицы :

Алгоритм:
для каждой строки матрицы создать асоциативный массив в качестве идентификатора будет нижняя граница строки, пример:
strings[250] = 3 // 3й массив по счету

и в той строке проверять с каким элементом столкнулся мячик .
П.с Хотелось бы услышать мнение и предложения.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #2 (permalink)  
Старый 02.11.2012, 02:40
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Дзен-трансгуманист Посмотреть сообщение
Арканоид же!


Блоки бывают разной прочности: некоторые разбиваются сразу, а по другим нужно нанести 2, 3 а то и 4 удара.
Это обязательно нужно реализовать, иначе какой же это арканоид?!
ну сначала я сделаю простые блоки сдам курсовую, а потом допилю сделаю save и загрузку уровней с сервера.
Структуры игру конструировал с учетом этих возможностей.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 02.11.2012, 03:08
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Дзен-трансгуманист Посмотреть сообщение
IIRC, в канонической игре ширина и высота всех блоков одинакова, поэтому такой подход будет избыточным. Более того, идентификация сущностей с помощью их свойств не способствует стабильности алгоритмов, и это вообще дурная манера - будет минус при оценке курсовой.
в том дело что я хочу сделать что бы были фигуры разного размера, допустим какой то большой блок в центре(который нельзя уничтожить).
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #4 (permalink)  
Старый 02.11.2012, 09:49
kaf kaf вне форума
Интересующийся
Отправить личное сообщение для kaf Посмотреть профиль Найти все сообщения от kaf
 
Регистрация: 25.06.2012
Сообщений: 24

мячик может ударить по блоку не только снизу, поэтому нужно отслеживать все стороны

я бы хранил блоки примерно так
var blocks=[
    {top:100,right:600,bottom:120,left:550},
    ...
]

в зависимости от начального и конечного положения мячика сделал бы поиск по блокам (максимум по двум "границам") на предмет попадания соответствующей "границы" в диапазон перемещения мячика

параметров по блокам может быть больше, можно будет отслеживать "падающие" блоки...
Ответить с цитированием
  #5 (permalink)  
Старый 02.11.2012, 10:35
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от kaf Посмотреть сообщение
мячик может ударить по блоку не только снизу, поэтому нужно отслеживать все стороны

я бы хранил блоки примерно так
var blocks=[
    {top:100,right:600,bottom:120,left:550},
    ...
]

в зависимости от начального и конечного положения мячика сделал бы поиск по блокам (максимум по двум "границам") на предмет попадания соответствующей "границы" в диапазон перемещения мячика

параметров по блокам может быть больше, можно будет отслеживать "падающие" блоки...
я по другому буду создавать обьект блока вот накидал примерный вариант
var standart = {
        width : 50,
        height : 20,
        bg : "img.jpg",
        type : 1
      
      
      }; 
      
   function Blocks() {
      
      this.x = 20;
       this.y =50;
      
      
      
      }
      Blocks.prototype = standart;
      
      
    var bl = new Blocks();

      bl.width = 40;
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #6 (permalink)  
Старый 02.11.2012, 11:43
kaf kaf вне форума
Интересующийся
Отправить личное сообщение для kaf Посмотреть профиль Найти все сообщения от kaf
 
Регистрация: 25.06.2012
Сообщений: 24

Сообщение от cyber Посмотреть сообщение
я по другому буду создавать обьект блока вот накидал примерный вариант
var standart = {
        width : 50,
        height : 20,
        bg : "img.jpg",
        type : 1
      
      
      }; 
      
   function Blocks() {
      
      this.x = 20;
       this.y =50;
      
      
      
      }
      Blocks.prototype = standart;
      
      
    var bl = new Blocks();

      bl.width = 40;
потом ведь все-равно придется группировать эти блоки для удобства перебора при проверках

если данные для "карты" блоков будут подгружаться отдельным файлом, то проще сразу подгружать готовым объектом (JSON)

или использование prototype обязательное условие задания?
Ответить с цитированием
  #7 (permalink)  
Старый 02.11.2012, 14:45
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

kaf,
данные уровня буду подругажатся одним обьектом и в нем будет и матрица и ссылки на тексктуры. вот так он выглядит пока, для первого уровня
var firstLvl = {
               Number: 1,
               Texture: {
                   BackgroundImage: "Levels/Level 1/background.jpg",
                   Blocks: {// ðàçìåð óíè÷òîæàåììûõ îáüåêòîâ
                       width: 50,
                       height: 20
                   },
                   offset: {
                       left: 0,
                       top: 10

                   }
               },

               Board: {
                   Color:"Black",
                   //Image:"",// íàéòè êàðòèíêó 
                   size: {
                       width: 250,
                       height:15

                   },

                   Positions:{
                       
                       x: "center",// or 'left' or 'right'
                       y:160 // îòñòóï ñ íèçó
                   
                   }

               },

               Ball: {

                   radius: 20,
                   position: "center",//position:[left || right || center] .( position on object Board)
                   color: "green",


               }
           }

           firstLvl.TextureMatrix = createMatrix({
               width: firstLvl.Texture.Blocks.width + firstLvl.Texture.offset.left,
               height: firstLvl.Texture.Blocks.height + firstLvl.Texture.offset.top,
               fill: {
                   width: "full",
                   height: 300,// â ïèêñåëÿõ(çà÷åííèå "full" íå ïðèíèìàåòñÿ)
                   fnc: structureOne
               }
           });

и это не обязательное условие но делать буду так, я уже это продумал просто обьяснять полностью структуру будет долго да и сильно понятно не получиться...
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #8 (permalink)  
Старый 03.11.2012, 09:52
Профессор
Отправить личное сообщение для Severtain Посмотреть профиль Найти все сообщения от Severtain
 
Регистрация: 25.04.2011
Сообщений: 280

cyber,
Ваша структура и так понятно! (она почти у всех одинакова). Но вам до этого правильно сказали.
"ведь все-равно придется группировать эти блоки для удобства перебора при проверках"
Так что желательные не делать такие ссылки )
Просто если несколько ячеек будут иметь одну ссылку на блок, то по вашей логике это будет единый объект, с едиными переменными!
Ответить с цитированием
  #9 (permalink)  
Старый 04.11.2012, 02:33
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Цитата:
придется группировать эти блоки для удобства перебора при проверках
Подумал и решил так сделать:
в матрице буду храниться только типы блоков , а обьекты типов буду храниться в отдельно массиве
[0,1,2,0,2,1]//0 - пусто, 1 - тип заданный по умолчанию, 2 - тип из массива "типов"

var types = [];
types[2] = {
width:60,
img:"img.jpg"
}// если какое то свойство не указанно оно будет браться из типа 1 .

как то так.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #10 (permalink)  
Старый 11.11.2012, 01:11
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

вот такая структура объекта уровня в игре, на сколько она удобно?
var firstLvl = {
    Number: 1,
    Texture: {
        BackgroundImage: "Levels/Level_1/background.jpg",
        Blocks: {// размер уничтожаеммых обьектов
            width: 50,
            height: 20,
            life: 1,
            color: "black",
            offset: {
                left: 10,
               
            }
        },
        lineSpacing: 10// меж строчные отступы
      
    },

    Board: {
        Color: "Black",
        //Image:"",// найти картинку 
        size: {
            width: 250,
            height: 15

        },

        Positions: {

            x: "center",// or 'left' or 'right'
            y: 20 // отступ с низу

        },

        Offset: {

            x: 40,
            y: 0
        }

    },

    Ball: {

        radius: 20,
        position: "center",//position:[left || right || center] .( position on object Board)
        color: "green",
        speed: 5


    }
}

var types = firstLvl.Texture.Blocks.types = [];

types[4] = {
    width: 290,
    height: 30,
    color: "yellow",
    life: 4,
    offset: {
        left: 200,
        top: 100,
        bottom:20
    }
};

types[3] = {
    offset: { left: 200 },
    color:"green",
    inherit: 2 // отсутсвующие свойства  наследуються от указанного типа
};

types[2] = {
    width: 50,
    height: 20,
    color: "red",
    life: 2,
   
};



firstLvl.TextureMatrix = [
    [4],
    [3, 2, 2, 2, 2],
    [3, 2, 2, 2, 2],
    [3, 2, 2, 2, 2],
    [3, 1, 1, 1, 1],
    [3, 1, 1, 1, 1],
];
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярное выражение для проверки URL Beck Events/DOM/Window 13 06.02.2011 08:01
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31
сделайте правила для форума scuter Сайт Javascript.ru 29 21.04.2009 17:28
Вопрос для знатоков JavaScript prodis Общие вопросы Javascript 14 09.10.2008 00:31