Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.11.2005, 16:09
Skubent вне форума Посмотреть профиль Отправить личное сообщение для Skubent Посетить домашнюю страницу Skubent Найти все сообщения от Skubent
  № 1  
Ответить с цитированием
Skubent
 
Аватар для Skubent

Регистрация: Oct 2005
Адрес: Млечный Путь, 7-й рукав, YD AC-451, 3-я планета.
Сообщений: 996
Отправить сообщение для Skubent с помощью ICQ
Если ячеек немного (в пределах разрядности) то быстрее всего использовать двоичные флаги.
Имеем:
//константы, есть степени двойки
cell1 = 1;
cell2 = 2;
cell3 = 4;
cell4 = 8;
cell5 = 16;
//строго говоря, max(cell)*2 - 1;
chksum = 1+2+4+8+16;
//начальное состояние рюкзака:
items = 0;
//Проверка наличия свободной (хотя бы одной) ячейки :
if (chksum ^ items != 0) {trace('есть места');}
//добавление вещи, чуть сложнее...
items += Math.pow(2, Math.floor(Math.log(chksum ^ mas) / Math.LN2));
//тут Math.pow(2, Math.floor(Math.log(chksum ^ mas) / Math.LN2)) - это "вес" итема, а Math.floor(Math.log(chksum ^ mas) / Math.LN2) - номер ячейки, в которую его поместили.

Величина chksum^mas = 0 при полном рюкзаке, поэтому теоретически логарифм должен дать ошибку, но выдает он минус бесконечность во флэше, поэтому pow(2, логарифм) выдает 0 при полностью заполненном рюкзаке.
__________________
Тут вы найдете ответы на почти все вопросы:
А можно ли сделать так ? - Можно.
Почему не работает ? - Неправильно сделано.
Где ошибка ? - В ДНК.


Последний раз редактировалось Skubent; 09.11.2005 в 16:14.
Старый 11.11.2005, 19:37
Fr@ddy вне форума Посмотреть профиль Отправить личное сообщение для Fr@ddy Найти все сообщения от Fr@ddy
  № 2  
Ответить с цитированием
Fr@ddy
 
Аватар для Fr@ddy

Регистрация: Jul 2005
Сообщений: 283
Блин, спасибочки.
Но я в программировании не такой уж сильный...
Поясни, плиз, зачем константы в степени двойки задавать?

Старый 13.11.2005, 10:47
Fr@ddy вне форума Посмотреть профиль Отправить личное сообщение для Fr@ddy Найти все сообщения от Fr@ddy
  № 3  
Ответить с цитированием
Fr@ddy
 
Аватар для Fr@ddy

Регистрация: Jul 2005
Сообщений: 283
Видно Skubent, вне поля обозрения , может кто-нибудь, знает для чего степени двойки задавать?

Старый 13.11.2005, 21:30
Kyber Anton вне форума Посмотреть профиль Отправить личное сообщение для Kyber Anton Посетить домашнюю страницу Kyber Anton Найти все сообщения от Kyber Anton
  № 4  
Ответить с цитированием
Kyber Anton
 
Аватар для Kyber Anton

Регистрация: Oct 2005
Адрес: Воронеж-Москва
Сообщений: 671
Отправить сообщение для Kyber Anton с помощью ICQ
В чём проблема?
for (var j = 1; j<MaxSlot; ++j) {
_root["statysSlot"+j] = 0;
for (n=1; n<6; n++) {
if (_root["itemSlot"+j].hitTest(_root["obj"+n])) {
_root["statysSlot"+j] = 1;
}
}
}
Maxslot - кол-во слотов.
__________________
(А)

Старый 16.11.2005, 20:53
Fr@ddy вне форума Посмотреть профиль Отправить личное сообщение для Fr@ddy Найти все сообщения от Fr@ddy
  № 5  
Ответить с цитированием
Fr@ddy
 
Аватар для Fr@ddy

Регистрация: Jul 2005
Сообщений: 283
Цитата:
Сообщение от Kyber Anton
В чём проблема?
for (var j = 1; j<MaxSlot; ++j) {
_root["statysSlot"+j] = 0;
for (n=1; n<6; n++) {
if (_root["itemSlot"+j].hitTest(_root["obj"+n])) {
_root["statysSlot"+j] = 1;
}
}
}
Maxslot - кол-во слотов.
О-о-о-о-о!!! Большое СПАСИБО!!! Мне уж показылось, что это невозможно сделать на флеше. Ещё раз спасибо.

Старый 14.11.2005, 11:19
Skubent вне форума Посмотреть профиль Отправить личное сообщение для Skubent Посетить домашнюю страницу Skubent Найти все сообщения от Skubent
  № 6  
Ответить с цитированием
Skubent
 
Аватар для Skubent

Регистрация: Oct 2005
Адрес: Млечный Путь, 7-й рукав, YD AC-451, 3-я планета.
Сообщений: 996
Отправить сообщение для Skubent с помощью ICQ
Задавать степень двойки... Рассказываю по слогам.
1. Состояний ячейки у тебя сколько ? Ровно два - пустая и полная. Сколько Единиц информации нужно, чтобы описать объект с двумя состояниями ? Ровно 1 бит.
2. Битовые поля во флэше есть ? Только неявно выраженно, через bitwise операторы.
3. Смотрим внимательно на двоичное представление степеней двойки:
1 = 0001
2 = 0010
4 = 0100
8 = 1000
Итого, каждой ячейке соответствует одна единичка на строго определенном месте.
4. Ну а дальше чистая математика.
__________________
Тут вы найдете ответы на почти все вопросы:
А можно ли сделать так ? - Можно.
Почему не работает ? - Неправильно сделано.
Где ошибка ? - В ДНК.

Старый 16.11.2005, 21:04
Fr@ddy вне форума Посмотреть профиль Отправить личное сообщение для Fr@ddy Найти все сообщения от Fr@ddy
  № 7  
Ответить с цитированием
Fr@ddy
 
Аватар для Fr@ddy

Регистрация: Jul 2005
Сообщений: 283
Цитата:
Сообщение от Skubent
Задавать степень двойки... Рассказываю по слогам.
1. Состояний ячейки у тебя сколько ? Ровно два - пустая и полная. Сколько Единиц информации нужно, чтобы описать объект с двумя состояниями ? Ровно 1 бит.
2. Битовые поля во флэше есть ? Только неявно выраженно, через bitwise операторы.
3. Смотрим внимательно на двоичное представление степеней двойки:
1 = 0001
2 = 0010
4 = 0100
8 = 1000
Итого, каждой ячейке соответствует одна единичка на строго определенном месте.
4. Ну а дальше чистая математика.
Но заметь Kyber Anton полегче способ нашел... Спасибо за совет и внимание.

Старый 16.11.2005, 21:06
__i вне форума Посмотреть профиль Отправить личное сообщение для __i Найти все сообщения от __i
  № 8  
Ответить с цитированием
__i
 
Аватар для __i

Регистрация: Jan 2004
Адрес: Украина, Харьков
Сообщений: 1,524
Отправить сообщение для __i с помощью ICQ
ну способы можно сказать равноценные только у Skubent на 8 ячеек тратиться 1 байт а у Антона - 8

Старый 17.11.2005, 15:23
Kyber Anton вне форума Посмотреть профиль Отправить личное сообщение для Kyber Anton Посетить домашнюю страницу Kyber Anton Найти все сообщения от Kyber Anton
  № 9  
Ответить с цитированием
Kyber Anton
 
Аватар для Kyber Anton

Регистрация: Oct 2005
Адрес: Воронеж-Москва
Сообщений: 671
Отправить сообщение для Kyber Anton с помощью ICQ
8 байтов... пойду повешусь...
__________________
(А)

Старый 17.11.2005, 21:42
Fr@ddy вне форума Посмотреть профиль Отправить личное сообщение для Fr@ddy Найти все сообщения от Fr@ddy
  № 10  
Ответить с цитированием
Fr@ddy
 
Аватар для Fr@ddy

Регистрация: Jul 2005
Сообщений: 283
Цитата:
Сообщение от Kyber Anton
8 байтов... пойду повешусь...
Эй, стоп, не надо!!! ещё пригодишься!

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:11.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.