02.11.2012, 02:07
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
вопрос по алгоритму проверки (для игры)
продолжаю писать свою игру, и хотел бы услышать мнение других о том на сколько тот алгоритм проверки что я придумал "адекватный" со стороны производительности.
(не знаю как такая игра называется, но помню принцип, когда то играл в такую)
Об игре:
есть поле для игры на нем:
с верху блоки(который нужно разбить),
с низу "доска" которая отбивает мячь,
и конечно мячик - самое интересное начинается когда нужно определить когда мяч взаимодействовал с блоком и с каким.
структура уровня состоит из многомерной матрицы :
Алгоритм:
для каждой строки матрицы создать асоциативный массив в качестве идентификатора будет нижняя граница строки, пример:
strings[250] = 3 // 3й массив по счету
и в той строке проверять с каким элементом столкнулся мячик .
П.с Хотелось бы услышать мнение и предложения.
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
02.11.2012, 02:40
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от Дзен-трансгуманист
|
Арканоид же!
Блоки бывают разной прочности: некоторые разбиваются сразу, а по другим нужно нанести 2, 3 а то и 4 удара.
Это обязательно нужно реализовать, иначе какой же это арканоид?!
|
ну сначала я сделаю простые блоки сдам курсовую, а потом допилю сделаю save и загрузку уровней с сервера.
Структуры игру конструировал с учетом этих возможностей.
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
02.11.2012, 03:08
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от Дзен-трансгуманист
|
IIRC, в канонической игре ширина и высота всех блоков одинакова, поэтому такой подход будет избыточным. Более того, идентификация сущностей с помощью их свойств не способствует стабильности алгоритмов, и это вообще дурная манера - будет минус при оценке курсовой.
|
в том дело что я хочу сделать что бы были фигуры разного размера, допустим какой то большой блок в центре(который нельзя уничтожить).
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
02.11.2012, 09:49
|
Интересующийся
|
|
Регистрация: 25.06.2012
Сообщений: 24
|
|
мячик может ударить по блоку не только снизу, поэтому нужно отслеживать все стороны
я бы хранил блоки примерно так
var blocks=[
{top:100,right:600,bottom:120,left:550},
...
]
в зависимости от начального и конечного положения мячика сделал бы поиск по блокам (максимум по двум "границам") на предмет попадания соответствующей "границы" в диапазон перемещения мячика
параметров по блокам может быть больше, можно будет отслеживать "падающие" блоки...
|
|
02.11.2012, 10:35
|
|
I am Student
|
|
Регистрация: 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;
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
02.11.2012, 11:43
|
Интересующийся
|
|
Регистрация: 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 обязательное условие задания?
|
|
02.11.2012, 14:45
|
|
I am Student
|
|
Регистрация: 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
}
});
и это не обязательное условие но делать буду так, я уже это продумал просто обьяснять полностью структуру будет долго да и сильно понятно не получиться...
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
03.11.2012, 09:52
|
Профессор
|
|
Регистрация: 25.04.2011
Сообщений: 280
|
|
cyber,
Ваша структура и так понятно! (она почти у всех одинакова). Но вам до этого правильно сказали.
"ведь все-равно придется группировать эти блоки для удобства перебора при проверках"
Так что желательные не делать такие ссылки )
Просто если несколько ячеек будут иметь одну ссылку на блок, то по вашей логике это будет единый объект, с едиными переменными!
|
|
04.11.2012, 02:33
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Цитата:
|
придется группировать эти блоки для удобства перебора при проверках
|
Подумал и решил так сделать:
в матрице буду храниться только типы блоков , а обьекты типов буду храниться в отдельно массиве
[0,1,2,0,2,1]//0 - пусто, 1 - тип заданный по умолчанию, 2 - тип из массива "типов"
var types = [];
types[2] = {
width:60,
img:"img.jpg"
}// если какое то свойство не указанно оно будет браться из типа 1 .
как то так.
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
11.11.2012, 01:11
|
|
I am Student
|
|
Регистрация: 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],
];
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
|
|