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

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

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

Регистрация: Feb 2003
Адрес: Germany
Сообщений: 99
По умолчанию Возможно ли организовать рациональную проверку?

Делаю экзаминационный тест.
Есть клип в который подгружаются картинки.
Картинки грузятся в сгенерированные мувики перемешиваются в случайном порядке и выстраиваются на сцене, с левой стороны друг под другом по оси Y.
Юзер должен перетащить каринки в область сцены справа и расположить их в определённом порядке. Пока ничего сложного для меня не было, прогонял через цикл и проверял расположение по оси Y относительно друг друга.
Но вот заказчик изменил задание и теперь в папке с картинками лежит две пары картинок с разными именами, но абсолютно идентичных. Он просит не изменять их внешне, а при проверке сделать так, чтобы перемена их местоположения не учитывалась. Дело осложняется ещё и тем, что количество картинок мне заранее не известно. Оно прописывается заказчиком в конфигурационном файле ( текстовой файл).
Вопрос - можно ли осуществить такую проверку используя цикл? Если да, то подскажите как.
Чтобы было понятнее прикладываю изображение.
Заранее благодарю.
Миниатюры
Нажмите на изображение для увеличения
Название: scr02.jpg
Просмотров: 143
Размер:	108.3 Кб
ID:	24650  
__________________
Я вставлю себе золотые зубы и женюсь, ей - богу женюсь, честное, благородное слово.


Последний раз редактировалось winnner; 20.06.2010 в 02:48.
Старый 20.06.2010, 04:00
rainbowrussia вне форума Посмотреть профиль Отправить личное сообщение для rainbowrussia Найти все сообщения от rainbowrussia
  № 2  
Ответить с цитированием
rainbowrussia
 
Аватар для rainbowrussia

Регистрация: Feb 2008
Сообщений: 560
Прочитать конфигурационный файл - LoadVars, onData
Картинкам присвойте имена, ну или хотя бы индексы - _root["mcPic"+i].idx = i;
Тем картинкам, которые одинаковые присвойте одинаковые индексы.
Если я правильно понял - пользователь должен единственно верно расставить картинки - значит задайте массив правильного расположеня, в который поместите присвоенные индексы - например [1, 2, 2, 2, 3, 4, 4, 4, 4, 5]. Проверяйте местоположения размещенных картинок на соответствие их индекса массиву.
Сорри если непонятно.

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

Регистрация: Feb 2003
Адрес: Germany
Сообщений: 99
Спасибо за ответ.
Такое решение я уже обдумывал. Оно конечно же сокращает код.
Но в этом случае мне придётся вручную создавать массив, тем более он будет заранее определён и заказчик не сможет его изменить. До этого, когда картинки были разные, массив создавался автоматически. Заказчик указывал в конфигурационном файле только их количество.
Ну и "Проверяйте местоположения размещенных картинок на соответствие их индекса массиву." непонятно как? Извините может я туплю, но не могу пока въехать, как местоположения размещенных картинок сравнить с таким массивом.
__________________
Я вставлю себе золотые зубы и женюсь, ей - богу женюсь, честное, благородное слово.

Старый 20.06.2010, 11:45
rainbowrussia вне форума Посмотреть профиль Отправить личное сообщение для rainbowrussia Найти все сообщения от rainbowrussia
  № 4  
Ответить с цитированием
rainbowrussia
 
Аватар для rainbowrussia

Регистрация: Feb 2008
Сообщений: 560
Пусть заказчик в конфигурационном файле задает адреса картинок, их индексы (одинаковые для условно одинаковых картинок), а так же "правильный" ответ в виде последовательности индексов. Читая "задачу" вы задаете всем мувикам _root["mc"+i"].idx = readidx; прочитанный индекс, читаете в массив правильный ответ, ну а далее я не знаю как у вас происходит процесс "решения" задачи, примерно так же как вы раньше проверяли верно ли расставлены мувики вы будете проверять их, только не их порядковые номера, а их .idx свойства на соответствие "правильному" массиву.

Старый 20.06.2010, 13:01
winnner вне форума Посмотреть профиль Отправить личное сообщение для winnner Посетить домашнюю страницу winnner Найти все сообщения от winnner
  № 5  
Ответить с цитированием
winnner
 
Аватар для winnner

Регистрация: Feb 2003
Адрес: Germany
Сообщений: 99
Да это всё понятно, но в таком случае невозможно организовать нормалную проверку. Т.к. индексы меняются местами т.е. при проверке Y idx_3 > Y idx_4 а в конце наоборот Y idx_4 > Y idx_3.
Проверяю так
Код AS1/AS2:
b=i+1;
if(_root["img_"+idxArr[b]]._y > _root["img_"+idxArr[i]]._y){
		   antwort+=1;
		   };
если количество правильных ответов равно количеству картинок - решение верное.

Добавлено через 4 минуты
P.S.
Посмотрите внимательно на картинку. Это правильный ответ.
__________________
Я вставлю себе золотые зубы и женюсь, ей - богу женюсь, честное, благородное слово.

Старый 20.06.2010, 13:14
rainbowrussia вне форума Посмотреть профиль Отправить личное сообщение для rainbowrussia Найти все сообщения от rainbowrussia
  № 6  
Ответить с цитированием
rainbowrussia
 
Аватар для rainbowrussia

Регистрация: Feb 2008
Сообщений: 560
Сложно что-то советовать не видя кода. Приведите хотя бы полную процедуру проверки правильности ответа в том виде как она сейчас у вас работает (для условия когда все картинки разные).

Старый 20.06.2010, 13:50
winnner вне форума Посмотреть профиль Отправить личное сообщение для winnner Посетить домашнюю страницу winnner Найти все сообщения от winnner
  № 7  
Ответить с цитированием
winnner
 
Аватар для winnner

Регистрация: Feb 2003
Адрес: Germany
Сообщений: 99
Пожалуйста, вот:

Код AS1/AS2:
mc_button.onPress = function() {
	for (i=0; i<bz; i++) {//bz - количество картинок
		if(_root["platz_"+i].hitTest(_root.box_0)){platziert = 1;}else{platziert = 0;};
//box_0 - место куда должны быть перетянуты картинки "platz_"+i имя мувика с картинкой.
	if(platziert == 1){
		if(_root["platz_"+i]._y < _root["platz_"+(i+1)]._y){  
		   antwort+=1;
		   };
		};	
	}//endFor
	if (antwort==bz) {
		mitt(1); //сообшение о правильном решении
	} else {
		mitt(0); //сообшение об ошибочном решении
	};
};
так было.

Добавлено через 17 минут
P.S.
Вот трейс проверки с индексом :
idx_0._y=124 platz_0._y=124
idx_1._y=148 platz_1._y=148
idx_2._y=161 platz_2._y=161
idx_3._y=172 platz_3._y=172
idx_4._y=184 platz_4._y=184
idx_5._y=189 platz_5._y=189
idx_3._y=172 platz_6._y=267
idx_2._y=161 platz_7._y=280
количество правильных решений=6
__________________
Я вставлю себе золотые зубы и женюсь, ей - богу женюсь, честное, благородное слово.


Последний раз редактировалось winnner; 20.06.2010 в 14:21.
Старый 20.06.2010, 17:02
rainbowrussia вне форума Посмотреть профиль Отправить личное сообщение для rainbowrussia Найти все сообщения от rainbowrussia
  № 8  
Ответить с цитированием
rainbowrussia
 
Аватар для rainbowrussia

Регистрация: Feb 2008
Сообщений: 560
На счет idx_0._y я не понял, вероятно вы меня не так про индексы поняли.
Предлагаю сделать следующее:

Заказчик задает количество картинок и указывает какие из них одинаковые. Я не знаю как у вас это делается, предполагаю что все картинки имеют имена типа "imageX.jpg", где X от 1 до N и N задается заказчиком. В этом случае чтобы указать какие картинки считабтся одинаковыми заказчик дополнительно должен задать их индексы, которые будут одинаковыми для одинаковых картнок, например [1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7] - массив из N элементов (*). Это же и будет являться правильным решением, как я понимаю. Вы создавая мувики _root["platz_"+i] дополнительно им присваиваете очередной индекс _root["platz_"+i].idx = indexes[i] из этого массива.

Далее проверяем все мувики hitTest чтобы они все находились в заданной области, проверяем чтобы _y координаты не совпадали, это цикл в цикле - for (j=0; j<i-1; j++

Можно попутно создавать массив объектов вида { y:_root["platz_"+i]._y, idx:_root["platz_"+i].idx }. Отсортировать массив по возрастанию по переменной y. Пройтись по массиву, проверить чтобы idx не уменьшался. Если все так - решение верное.

Есть наверняка и более простой вариант.

Старый 20.06.2010, 20:56
winnner вне форума Посмотреть профиль Отправить личное сообщение для winnner Посетить домашнюю страницу winnner Найти все сообщения от winnner
  № 9  
Ответить с цитированием
winnner
 
Аватар для winnner

Регистрация: Feb 2003
Адрес: Germany
Сообщений: 99
Вы всё правильно поняли насчет номеров картинок. Индекс в конфиге я сделал.
Насчет idx_0._y, idx_0 это имя переменной из idx_ и значения i в цикле, а далее = значение по оси _y.
Вот это я не понял:"проверяем чтобы _y координаты не совпадали, это цикл в цикле - for (j=0; j<i-1; j++". Это как?
Если не сложно - поясните пожалуйста.

Сейчас я проверяю так:
Код AS1/AS2:
mc_button.onPress = function() {
	loesungArr=loesung.split(",");
	for (i=0; i<bz; i++) {
		b=i+1;
		if(_root["platz_"+i].hitTest(_root.box_0)){platziert = 1;}else{platziert = 0;};
	if(platziert == 1){
		trace("idx_"+idxArr[i]+"._y="+_root["platz_"+idxArr[i]]._y+"   platz_"+i+"._y="+_root["platz_"+i]._y);
		if(_root["platz_"+i]._y == _root["platz_"+idxArr[i]]._y){
		   antwort+=1;
		   };
		};	
	}
Думаю что это неправильно...
__________________
Я вставлю себе золотые зубы и женюсь, ей - богу женюсь, честное, благородное слово.


Последний раз редактировалось winnner; 20.06.2010 в 21:00.
Старый 20.06.2010, 23:37
rainbowrussia вне форума Посмотреть профиль Отправить личное сообщение для rainbowrussia Найти все сообщения от rainbowrussia
  № 10  
Ответить с цитированием
rainbowrussia
 
Аватар для rainbowrussia

Регистрация: Feb 2008
Сообщений: 560
Если loesung это и есть строка, содержащая "1,2,3,3,3,4,5,6,6,6,7", то код будет примерно такой:

Код AS1/AS2:
mc_button.onPress = function() {
	loesungArr=loesung.split(",");
	goodplace = 1;
	var els = new Array();
	for (i=0; i<bz; i++) {
	        // формируем массив объектов с парами _y и idx
		els.push({ y:_root["platz_"+i]._y, idx:loesungArr[i] });
		if(!(_root["platz_"+i].hitTest(_root.box_0))){ goodplace = 0; break; }
		if (i > 0) {
		        // проверяем чтобы _y позиции были разные у клипов, иначе имееп неопределенность
			for (j=0; j<i; j++) {
				if (_root["platz_"+i]._y == _root["platz_"+j]._y) { goodplace = 0; break; }
			}
		}
	}
 
	if (goodplace == 1) {
 
	   // сортируем массив по возрастанию "y"
	   els.sort(function (a, b) { if (a.y < b.y) { return -1; } else if (a.y > b.y) { return +1; } else { return 0; } });
 
	   // если картинки расставлены верно, то idx будут в точности такие как в ответе
	   solved = 1;
	   for (i=0; i<bz; i++) {
	     if (els[i].idx != loesungArr) {
	       solved = 0;
	       break;
	     }
	   }
 
	   if (solved == 1) {
		mitt(1); //сообшение о правильном решении
	   } else {
		mitt(0); //сообшение об ошибочном решении
	   };
 
	} else {
		mitt(0); //неверное расположение
	}
 
}
К сожалению не имея исходника проверить сложно, возможно допустил какие-то опечатки или даже ошибки.

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

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

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


 


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


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