Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2013, 19:31   #11
Екатерина_92
Новичок
Джуниор
 
Регистрация: 15.02.2013
Сообщений: 14
По умолчанию

В коде выше ведь есть такой фрагмент:
Код:
    // В каждом кадре проверяем, не достигнуто ли заключительное состояние
    if (((koza.bereg == volk.bereg) && (koza.bereg != lodka.bereg)) || ((koza.bereg == kapusta.bereg) && (koza.bereg != lodka.bereg))) {
        gotoAndStop(2);
    }
    if ((koza.bereg == "right") && (volk.bereg == "right") && (kapusta.bereg == "right") && (lodka.pas == null)) {
        gotoAndStop(3);
    }
Тут ведь не выполняется присваивание?
Екатерина_92 вне форума Ответить с цитированием
Старый 16.02.2013, 19:34   #12
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Екатерина_92 Посмотреть сообщение

Тут ведь не выполняется присваивание?
Тут - нет. Потому что "==" и "!=" - операторы сравнения.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 16.02.2013, 20:00   #13
Екатерина_92
Новичок
Джуниор
 
Регистрация: 15.02.2013
Сообщений: 14
По умолчанию

Изменила условия
Код:
podsk.onPress=function() {
	if ((lodka.bereg=="left")&&(volk.bereg=="left")&&(koza.bereg=="left")&&(kapusta.bereg=="left")) gotoAndStop(4);
	if ((lodka.bereg=="left")&&(volk.bereg=="left")&&(kapusta.bereg=="left")&&(koza.bereg=="right")) gotoAndStop(5); 
	}
Все равно отправляет в 4 кадр в обеих ситуациях.
Екатерина_92 вне форума Ответить с цитированием
Старый 16.02.2013, 20:07   #14
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

А другая ситуация вообще может быть? Попробуйте явно присвоить нужные значения, прямо перед if и посмотрите, пойдет ли она в пятый кадр. Если да, то с записью условий все в порядке.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 16.02.2013, 20:36   #15
Екатерина_92
Новичок
Джуниор
 
Регистрация: 15.02.2013
Сообщений: 14
По умолчанию

Конечно могут быть другие ситуации, просто рассматриваются пока только две, чтобы разобраться с ошибкой и следующие условия прописать правильно.
Екатерина_92 вне форума Ответить с цитированием
Старый 16.02.2013, 20:37   #16
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Екатерина_92 Посмотреть сообщение
Конечно могут быть другие ситуации, просто рассматриваются пока только две, чтобы разобраться с ошибкой и следующие условия прописать правильно.
Скопируйте весь код сюда.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 16.02.2013, 20:50   #17
Екатерина_92
Новичок
Джуниор
 
Регистрация: 15.02.2013
Сообщений: 14
По умолчанию

Присвоить значения явно попробовала, отправил к волку.

Первоначальный код игры
Код:
stop(); // Поскольку в нашем колипе три кадра, надо остановить проигрывание на первом

//Начальная конфигурация
koza.bereg=kapusta.bereg=volk.bereg="left";
lodka.bereg="left";
lodka.pas=null;

_root.onEnterFrame=function(){
//В каждом кадре проверяем, не достигнуто ли заключительное состояние	
	if (((koza.bereg==volk.bereg)&&(koza.bereg!=lodka.bereg))||
	    ((koza.bereg==kapusta.bereg)&&(koza.bereg!=lodka.bereg))) 
		gotoAndStop(2);
	if ((koza.bereg=="right")&&
	    (volk.bereg=="right")&&
		(kapusta.bereg=="right")&&(lodka.pas==null))
	   gotoAndStop(3);
}

//Обработчик кнопки вправо
toright.onPress=function() {
	if (lodka.bereg=="left") {
		lodka.gotoAndStop(2);
		lodka.bereg="right";
		lodka._x+=100;
		if (lodka.pas) {
			 lodka.pas.bereg="right"
		     lodka.pas._x+=100;
		}
	}
}
//Обработчик кнопки влево
toleft.onPress=function() {
	if (lodka.bereg=="right") {
		lodka.gotoAndStop(1);
		lodka.bereg="left";
		lodka._x-=100;
		if (lodka.pas) {
			 lodka.pas.bereg="left"
		     lodka.pas._x-=100;
		}
	}
}

//Обработчик нажатия кнопки мыши на любом персонаже
function OnPress() {
	curx=this._x;
	cury=this._y;
	startDrag(this);
}

//Обработчик опускания кнопки мыши любого персонажа
function OnRelease() {
	stopDrag();
	if ((lodka.pas==this)&&
		(lodka.bereg=="left")&&
		(this.hitTest(left))) {
		  lodka.pas=null;
		  return;
	}
	if ((lodka.pas==this)&&
		(lodka.bereg=="right")&&
		(this.hitTest(right))) {
		  lodka.pas=null;
		  return;
	}
	if ((this.hitTest(lodka))&&
		(lodka.pas==null)&&
		(this.bereg==lodka.bereg)) {
		  lodka.pas=this;
		  return;
	}
	this._x=curx;
	this._y=cury;
}

koza.onPress=kapusta.onPress=volk.onPress=OnPress;
koza.onRelease=kapusta.onRelease=volk.onRelease=OnRelease;
koza.onReleaseOutside=kapusta.onReleaseOutside=volk.onReleaseOutside=OnRelease;
Добавляемые условия
Код:
//Подсказки
//Кадр4 - отвезти козу,
//Кадр5 - отвезти волка,
//Кадр6 - отвезти капусту,
//Кадр7 - отвезти лодку.

podsk.onPress=function() {
	if ((lodka.bereg=="left")&&(volk.bereg=="left")&&(koza.bereg=="left")&&(kapusta.bereg=="left")) gotoAndStop(4);
	if ((lodka.bereg=="left")&&(volk.bereg=="left")&&(kapusta.bereg=="left")&&(koza.bereg=="right")) gotoAndStop(5); 
	if ((lodka.bereg=="left")&&(volk.bereg==koza.bereg=="left")&&(kapusta.bereg=="right") gotoAndStop(5);
	if ((lodka.bereg=="left")&&(koza.bereg==kapusta.bereg=="left")&&(volk.bereg=="right") gotoAndStop(6);
	if ((lodka.bereg=="left")&&(koza.bereg=="left")&&(volk.bereg==kapusta.bereg=="right") gotoAndStop(4);
	if ((lodka.bereg=="right")&&(volk.bereg==koza.bereg=="right")&&(kapusta.bereg=="left") gotoAndStop(4);
	if ((lodka.bereg=="right")&&(kapusta.bereg==koza.bereg=="right")&&(volk.bereg=="left") gotoAndStop(4);
	if ((lodka.bereg=="right")&&(volk.bereg==kapusta.bereg=="right")&&(koza.bereg=="left") gotoAndStop(7);
	if ((lodka.bereg=="right")&&(koza.bereg=="right")&&(volk.bereg==kapusta.bereg=="left") gotoAndStop(7);
}
Екатерина_92 вне форума Ответить с цитированием
Старый 16.02.2013, 20:59   #18
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Ну добавьте, значит, в этой функции перед if-ами вывод этих переменных и посмотрите, что там..
Хм.. никогда не писал на ActionScript, но уже его ненавижу.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 16.02.2013, 23:06   #19
Екатерина_92
Новичок
Джуниор
 
Регистрация: 15.02.2013
Сообщений: 14
По умолчанию

С условиями кажется разобралась))
Может быть кто-то подскажет, как вернуться из кадра с подсказкой в предыдущее состояние?
Екатерина_92 вне форума Ответить с цитированием
Старый 17.02.2013, 11:14   #20
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Ну вы и раздули тему, батюшки светы!
Задачка очень просто решается в одном цикле, арифметическими методами, всего с двумя переменными.
Переменная левого берега ЛБ.
Переманная правого берега ПБ.

Присвоим каждому из персонажей значение в двоичной системе:
Перевозчик 1000 = 8
Волк 0100 = 4;
Коза 0010 = 2;
Капуста 0001 = 1.
Составим матрицу допустимых решений:

Перевозчик Волк Коза Капуста
0000 = 0 - Берег пуст
0001 = 1 - Капуста на берегу одна
0010 = 2 - Коза на берегу одна
0101 = 5 - Волк и капуста на берегу
1100 = 10 - Коза и перевозчик могут быть на одном берегу
1011 = 11 - Перевозчик коза и капуста могут быть вместе
1101 = 13 - Перевозчик, волк и капуста на берегу
1110 = 14 - Перевозчик волк и коза на берегу
1111 = 15 - Все персонажи на одном берегу с перевозчиком

Решаем задачу таким образом.
Код:
ЛБ              ПБ
15-2-8=5     0+2+8=10  - Везём козу
5+8=13       10-8=2      - Возвращаем перевозчика
13-4-8=1     2+4+8=14 - Везём волка
1+2+8=11    14-8-2=4  - Везём козу обратно
11-1-8=2     4+8+1=13 - Везём капусту
2+8=10        13-8=5    - Перевозчик возвращается
10-2-8=0     5+8+2=15 - Везём Козу обратно. Задача решена.
Таким образом, проверяя хотя-бы одну из переменных на соответствие таблице состояний, можно делать вывод о допустимости того или иного хода.
Алгоритм прост.
Вводим кто с кем едет и с какого берега на какой.
Делаем соответственно сложения или вычитания.
Проверяем условие в цикле.
Принимаем решений о правильности, неправильности хода или на решение задачи.
Возвращаемся к вводу данных или конец цикла.

Проверим правильность предпосылок.
15-4-8=3. Такой комбинации в решении нет. Козу с капустой оставлять нельзя.
15-1-8=6 - Волка с козой оставлять нельзя.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 17.02.2013 в 11:26.
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Логика ИИ для игры Anton911 Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 07.01.2012 23:55
Игры на Flash DragProger Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 24.01.2011 13:44
php+flash игры Krasi PHP 4 04.06.2010 06:30
Flash игра V-Bonya Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 08.02.2010 13:18
Online Flash игра для сайта Cox Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 21.11.2009 11:53