Разработка интерфейса для незрячих.

Темы, связанные с проектированием и программированием roguelike-игр

Модераторы: Sanja, Максим Кич

sokolix
Сообщения: 81
Зарегистрирован: 02 дек 2012, 15:34

Re: Разработка интерфейса для незрячих.

Сообщение sokolix » 17 июл 2013, 20:30

catcha, персонаж не двигается на 2 и более клеток если необходимый путь подобен ходу шахматного коня(только в обратном порядке) в общем когда путь по диагонали перекрыт даже если путь по прямой свободен.
если до перекрытой диагонали еще есть путь по прямой то персонаж или двигается на 1 клетку или если путь долог и свободен, приходит в довольно странную позицию(упирается в стену или не доходит клетку до перекрытой диагонали).

IPavel
Сообщения: 55
Зарегистрирован: 13 май 2013, 15:02

Re: Разработка интерфейса для незрячих.

Сообщение IPavel » 18 июл 2013, 00:56

sokolix писал(а):catcha, персонаж не двигается на 2 и более клеток если необходимый путь подобен ходу шахматного коня(только в обратном порядке) в общем когда путь по диагонали перекрыт даже если путь по прямой свободен.
если до перекрытой диагонали еще есть путь по прямой то персонаж или двигается на 1 клетку или если путь долог и свободен, приходит в довольно странную позицию(упирается в стену или не доходит клетку до перекрытой диагонали).
Сейчас буду пробовать воспроизвести у себя, спасибо!
А что на счёт видимого и уже видимых тайлов???
Хорошо они выделяются или надо присматриваться чтобы различить?
И что на счёт предидущего бага с зависающими клетками, исправилось???


Значит так, потестил я и нашёл этот баг.
Будет "баг №2" ... :)
Это особенность алгоритма.
Исправить не знаю как пока...
У меня герой двигается по алгоритму Бразенхема.
Т.е. когда пользователь выбирает куда хочет попасть, в ф-цию передвижения отсылаются координаты
этого места.
Ф-ция берёт текущие положение персонажа и новые координаты.
Затем рассчитывает нужное кол-во ходов и двигается по прямой к нужной точки.
Если на прямой встречается стена или другое препятствие алгоритм устанавливает координаты персонажа предидущей точки которую он прошёл.
Вот как-то так...
Буду рад послушать мысли по этому поводу...

sokolix
Сообщения: 81
Зарегистрирован: 02 дек 2012, 15:34

Re: Разработка интерфейса для незрячих.

Сообщение sokolix » 18 июл 2013, 05:53

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

Аватара пользователя
Jolly Roger
Сообщения: 2973
Зарегистрирован: 27 ноя 2009, 09:10
Откуда: Minsk, Belarus

Re: Разработка интерфейса для незрячих.

Сообщение Jolly Roger » 18 июл 2013, 06:24

IPavel писал(а):
sokolix писал(а):
З
У меня герой двигается по алгоритму Бразенхема.
Т.е. когда пользователь выбирает куда хочет попасть, в ф-цию передвижения отсылаются координаты
этого места.
Ф-ция берёт текущие положение персонажа и новые координаты.
Затем рассчитывает нужное кол-во ходов и двигается по прямой к нужной точки.
Если на прямой встречается стена или другое препятствие алгоритм устанавливает координаты персонажа предидущей точки которую он прошёл.
Вот как-то так...
Буду рад послушать мысли по этому поводу...
Слушай, а как вся эта красота будет взаимодействовать с монстрами?
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.

IPavel
Сообщения: 55
Зарегистрирован: 13 май 2013, 15:02

Re: Разработка интерфейса для незрячих.

Сообщение IPavel » 18 июл 2013, 06:35

Jolly Roger писал(а): Слушай, а как вся эта красота будет взаимодействовать с монстрами?
В смысле???
А что не так????
Я пока до монстров конечно не дошёл, но проблемы пока с ними не вижу...
Может чего ещё не в курсе конечно... :)

2 sokolix
Спасибо за тесты :)
Ну на счёт кротчайшего пути можно конечно подумать ... так сказать задел на будущие... :)
И на счёт настройки цвета тоже, но уже после реализации стандартных плюшек...
По цвету не совсем понял...
Нормально различаются тайлы видимые и видимые раньше или нужно присматриваться?

P.S. выложил новую версию в шапке.
Доработал с цветами немного, тагже теперь персонаж будет свититься как ёлка... :)
В том смысле если будет отниматься здоровье например при бое то "@" будет менять цвет, зелёный, жёлтый, красный.
Теперь собачка научилась открывать закрытые двери... :)
Двери теперь закрытые все по умолчанию.
Открываются автоматически при проходе на неё если дверь конечно не на ключе...
Хотя все пока без ключей.

Аватара пользователя
Uvadzucumi
Сообщения: 365
Зарегистрирован: 29 ноя 2011, 07:13
Откуда: Дубай, ОАЭ (Минск, Беларусь)
Контактная информация:

Re: Разработка интерфейса для незрячих.

Сообщение Uvadzucumi » 18 июл 2013, 07:22

IPavel писал(а):
Jolly Roger писал(а): Слушай, а как вся эта красота будет взаимодействовать с монстрами?
В смысле???
А что не так????
Я пока до монстров конечно не дошёл, но проблемы пока с ними не вижу...
Может чего ещё не в курсе конечно... :)
тут имеется ввиду то, что монстры должны ходить после каждого хода персонажа. а если у тебя один ход будет занимать перемещение через всю карту - то не камельфо. но, думаю, это не проблема - передвижения монстров вызывать после рассчета "следующей" точки по бразенхему.

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

баг с лестницей тоже заметил (когда стоишь на лестнице вверх, то все равно не виден скрытый угол). как понимаю, возникает из за того, что при проверке LOS проверяется - проходит ли взгляд через тайл раньше проверки условия - стоит ли персонаж на проверяемом тайле. вот это нужно поправить.
IPavel писал(а):Нормально различаются тайлы видимые и видимые раньше или нужно присматриваться?
лучше сделать темнее. например 80-ым цветом. или, даже, 50-м.
Меня окружали милые, добрые люди... медленно сжимая кольцо

IPavel
Сообщения: 55
Зарегистрирован: 13 май 2013, 15:02

Re: Разработка интерфейса для незрячих.

Сообщение IPavel » 18 июл 2013, 10:47

Uvadzucumi писал(а):
IPavel писал(а):
Jolly Roger писал(а): Слушай, а как вся эта красота будет взаимодействовать с монстрами?
В смысле???
А что не так????
Я пока до монстров конечно не дошёл, но проблемы пока с ними не вижу...
Может чего ещё не в курсе конечно... :)
тут имеется ввиду то, что монстры должны ходить после каждого хода персонажа. а если у тебя один ход будет занимать перемещение через всю карту - то не камельфо. но, думаю, это не проблема - передвижения монстров вызывать после рассчета "следующей" точки по бразенхему.

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

баг с лестницей тоже заметил (когда стоишь на лестнице вверх, то все равно не виден скрытый угол). как понимаю, возникает из за того, что при проверке LOS проверяется - проходит ли взгляд через тайл раньше проверки условия - стоит ли персонаж на проверяемом тайле. вот это нужно поправить.
IPavel писал(а):Нормально различаются тайлы видимые и видимые раньше или нужно присматриваться?
лучше сделать темнее. например 80-ым цветом. или, даже, 50-м.
-> По монстрам согласен.
Ничто не мешает в алгоритм Бразенхема добавить вызов для монстров после прохождения каждой клетки.
Всё равно он проходит каждую клетку, и никаких сложностей не возникнет.

-> На счёт обхода препятствий, тоже согласен...
Можно конечно будет добавить интелектуальный даже алгоритм поиска пути, но это уже реализуется как доп фича, и после написания стандартного функционала.
К тому же реализация этой штуки никак не затронет другой код и по этому можно это написать хоть в самом конце реализации.

-> Да, есть такое :)
Это точно баг...
Смотрел сейчас даже если исключить лестницу из списка блокирующих тайлов, то всё равно угол не виден...
Видно это в пост обработки Кларка где-то глючит...
Если лестницу убрать из угла то всё ок становится...
Там у Кларка в пост обработки условие есть если тайл - пол и если он видимый то тогда вокруг него тоже помечаются тайлы видимым.
Видно из-за этого что условие это не срабатывает и угол не видно...
В общем не знаю пока как решить...

-> В следующей версии попробую сделать потемнее не видимые тайлы.

Аватара пользователя
Jesus05
Сообщения: 1840
Зарегистрирован: 02 дек 2009, 07:50
Откуда: Норильск, сейчас Санкт-петербург.
Контактная информация:

Re: Разработка интерфейса для незрячих.

Сообщение Jesus05 » 18 июл 2013, 11:07

IPavel писал(а): -> Да, есть такое :)
Это точно баг...
Смотрел сейчас даже если исключить лестницу из списка блокирующих тайлов, то всё равно угол не виден...
Видно это в пост обработки Кларка где-то глючит...
Если лестницу убрать из угла то всё ок становится...
Там у Кларка в пост обработки условие есть если тайл - пол и если он видимый то тогда вокруг него тоже помечаются тайлы видимым.
Видно из-за этого что условие это не срабатывает и угол не видно...
В общем не знаю пока как решить...
Сделать что-бы алгоритм Кларка думал что лестница это пол. (либо что лестница = пол при условии что на ней стоит тот кто смотрит... или даже то место где стоит тот для кого считаем ФОВ гарантированно пол. Если персонаж стоит в сплошной стене он должен видеть 9 клеток стенки).

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

Re: Разработка интерфейса для незрячих.

Сообщение Феникc » 18 июл 2013, 11:28

Если бы Кларк показал свою постобработку моему преподавателю, то быстро бы отправился в страну вечного кодинга. Восемь отдельных и абсолютно одинаковых обработок вместо двух вложенных циклов!
Ниже прилагаю доработанный алгоритм расчёта ФОВ.

[spoiler]

Код: Выделить всё

void Level::_calcFow()
{
	for (int i = 0; i<mapw; i++)
		for (int j = 0; j<maph; j++)
			level.lmap[i][j].visible = false;
	int w = hero.fowR;
	int h = hero.fowR;
	int x1 = max(0, hero.x - w);
	int y1 = max(0, hero.y - h);
	int x2 = min(hero.x + w, mapw - 1);
	int y2 = min(hero.y + h, maph - 1);

	for (int i = x1; i<=x2; ++i)
		for (int j = y1; j<=y2; ++j)
			if (!level.lmap[i][j].visible && _canSee(i, j))
			{
				level.lmap[i][j].visible = true;
				level.lmap[i][j].seen = true;
			}
	int x, y;
	//постобработка
	for (int i = x1; i<=x2; ++i)
	{
		for (int j = y1; j<=y2; ++j)
		{
			if (_blockingTile(i, j) && !level.lmap[i][j].visible)
			{
				for (int _i = -1; _i<2; _i++)
				{	
					for (int _j = -1; _j<2; _j++)
					{
						if (_i==_j && _i == 0) continue;
						x = i + _i;
						y = j + _j;
						if (x >= 0 && x < mapw && y >= 0 && y < maph && !_blockingTile(x, y) && level.lmap[x][y].visible)
						{
							level.lmap[i][j].visible = true;
							level.lmap[i][j].seen = true;
						}
					}
				}
			}
		}
	}
}
[/spoiler]
Всё вышесказанное - ИМХО, если не указано обратное.

IPavel
Сообщения: 55
Зарегистрирован: 13 май 2013, 15:02

Re: Разработка интерфейса для незрячих.

Сообщение IPavel » 18 июл 2013, 12:41

Феникc писал(а):Если бы Кларк показал свою постобработку моему преподавателю, то быстро бы отправился в страну вечного кодинга. Восемь отдельных и абсолютно одинаковых обработок вместо двух вложенных циклов!
Ниже прилагаю доработанный алгоритм расчёта ФОВ.

[spoiler]

Код: Выделить всё

void Level::_calcFow()
{
	for (int i = 0; i<mapw; i++)
		for (int j = 0; j<maph; j++)
			level.lmap[i][j].visible = false;
	int w = hero.fowR;
	int h = hero.fowR;
	int x1 = max(0, hero.x - w);
	int y1 = max(0, hero.y - h);
	int x2 = min(hero.x + w, mapw - 1);
	int y2 = min(hero.y + h, maph - 1);

	for (int i = x1; i<=x2; ++i)
		for (int j = y1; j<=y2; ++j)
			if (!level.lmap[i][j].visible && _canSee(i, j))
			{
				level.lmap[i][j].visible = true;
				level.lmap[i][j].seen = true;
			}
	int x, y;
	//постобработка
	for (int i = x1; i<=x2; ++i)
	{
		for (int j = y1; j<=y2; ++j)
		{
			if (_blockingTile(i, j) && !level.lmap[i][j].visible)
			{
				for (int _i = -1; _i<2; _i++)
				{	
					for (int _j = -1; _j<2; _j++)
					{
						if (_i==_j && _i == 0) continue;
						x = i + _i;
						y = j + _j;
						if (x >= 0 && x < mapw && y >= 0 && y < maph && !_blockingTile(x, y) && level.lmap[x][y].visible)
						{
							level.lmap[i][j].visible = true;
							level.lmap[i][j].seen = true;
						}
					}
				}
			}
		}
	}
}
[/spoiler]
Прикольно... :)
Но если не в курсе дела, разбераться прейдётся долго чего проверяется и в какую дырку... :))))
Ну а у Кларка просто наверно фишка такая...
Он приверженец идеи "чем проще, тем лучше"...
С одной стороны мне нравится этот подход....
С другой лень бывает писать много текста, и забабахиваешь какую-нибудь ултро компактную штуку, а когда через некоторое время возвращаешься к этому месту, сидишь и думаешь с начала - "и какого я тут Васю описал"... :)
Всё равно спасибо!

P.S. Освежил в памяти этот участок.
Один вопрос. ф-ции min, max свои у тебя или из стандартной библиотеки c++ ???
И ещё один.
В оригинале в пост обработке условие было с проверкой на тайл "пол", как я понимаю ты заменил это условие проверкой ф-цией на блокирующий тайл???
Вот здесь.
if (x >= 0 && x < mapw && y >= 0 && y < maph && !_blockingTile(x, y) && level.lmap[x][y].visible)

IPavel
Сообщения: 55
Зарегистрирован: 13 май 2013, 15:02

Re: Разработка интерфейса для незрячих.

Сообщение IPavel » 19 июл 2013, 13:16

Мужики поделитесь мыслями по окну инвентаря...
Вот дошёл до инвентаря и думаю как лучше оформить это окно...
Вот первые мысли.
Окно будет выглядеть в общем как и геймплей в данный момент...
Т.е. с права - редактор с описанием предмета,
с лева - также останутся характеристики персонажа, чтобы можно было наблюдать за характеристиками во время взаимодействия с предметами инвентаря.
По середине где сейчас игровое поле - это место будет разбито на две равные части по горизонтали,
в правой части будет список предметов с возможностью прокрутки, т.к. если предметов будет много они могут не влезть на один экран.
Левая часть будет разбита на две области,
Одна верхняя - будет больше и там будет рисоваться изображение предмета.
Другая нижняя - будет поменьше, и там будут:
сразу под картинкой - текст "количество предметов", например фляжек воды может быть 2,3, и т.п.
Под этим текстом будет три кнопки,
одна - "снять/одеть, съесть, прочитать заклинания" - в зависимости от предмета будет меняться.
Вторая - "осмотреть" - для выявления магических свойств если они есть.
Третья - "выбросить".
Но какие-то смешанные чувства по такому оформлению...
Сам не пойму, толи чего-то не хватает, толи что-то не то...
В общем поделитесь мыслями/опытом плз!

Аватара пользователя
Uvadzucumi
Сообщения: 365
Зарегистрирован: 29 ноя 2011, 07:13
Откуда: Дубай, ОАЭ (Минск, Беларусь)
Контактная информация:

Re: Разработка интерфейса для незрячих.

Сообщение Uvadzucumi » 19 июл 2013, 14:36

по инвентарю тут несколько все сложнее. окошко сверху, снизу, слева - справа - это все ерунда. значительноо острее вопрос не по отображению а по самому использованию. я в своей теме подымал этот вопрос, но так ничего дельного и не посоветовали. у инвентарю у меня всего несколько требований, главное - должна быть возможность использовать предметы из инвентаря без вызова самого окна инвентаря. т.е. например. мы нашли какой либо свиток. подобрали. должно быть сообщение - что подобрали свиток в слот 'd'. спустя какое то время, мы должны нажать на клавишу - "прочитать свиток" а потом "d" - при этом должен прочитаться соответствующий свиток. вроде все ок, но есть несколько проблем. например - если мы выкинули предмет из инвентаря, который раньше подобранного свитка, то свиток не должен сменить слот. а должен так и остаться в слоте d. подбирая - заполняем пустые слоты. эта система мне нравится наиболее всего, но... это ограничивает нас в количестве переносимыъ предметов, так как букв - ограниченное количество, а делать разные a1,a2 и т.д. - не самый красивый выход. можно, как во многих рогаликах - не привязываться к буквам, тогда - каждая страница со списком вещей - свои буквы, но... это, во всяком случае меня бесило больше всего в cataclysm-е. т.е. для любой манипуляции с предметами необходимо открывать инвентарь :(

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

в общем как то так мне представляется. а какое окошко слева, какое справо... это дело десятое. я, в результате, так и не дописал инвентарь до конца... остался до лучших времен... может быть когда нибудь...
Меня окружали милые, добрые люди... медленно сжимая кольцо

IPavel
Сообщения: 55
Зарегистрирован: 13 май 2013, 15:02

Re: Разработка интерфейса для незрячих.

Сообщение IPavel » 19 июл 2013, 15:28

2 Uvadzucumi
Ну, да с инвентарём не всё так просто...
Я тоже взялся за голову когда первый раз прочитал ... :)
Всё слишком запутанно у Кларка как-то получилось...
Ну а по реализации...
Согласен с тобой...
Ну мне кажется будет проще сделать так...
Не привязывать вещи к буквам в инвентаре.
Но оставить из этой идеи навигацию по буквам...
В общем нажимаем например на "e" - еда, и спец ф-ция посаженная на эту букву просеивает весь инвентарь и выбирает только еду.
Затем показывается список еды, и тут уже опять для навигации используются буквы, например "в" - вода, "х" - хлеб и т.п.
Не надо таким образом запоминать слот при подборе и навигация остаётся удобной без надобности входить каждый раз в инвентарь.
Ну вот как-то так...
Я пока сильно об этом не думал ещё, т.к. только приступил к инвентарю, и первым делом решил написать окошко для него, а за тем уже писать инвентарь а то иначе инвентарь был бы а тестировать его не было бы окошка...

Аватара пользователя
Cfyz
Сообщения: 776
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: Разработка интерфейса для незрячих.

Сообщение Cfyz » 19 июл 2013, 18:07

Uvadzucumi писал(а): главное - должна быть возможность использовать предметы из инвентаря без вызова самого окна инвентаря. т.е. например. мы нашли какой либо свиток. подобрали. должно быть сообщение - что подобрали свиток в слот 'd'. спустя какое то время, мы должны нажать на клавишу - "прочитать свиток" а потом "d" - при этом должен прочитаться соответствующий свиток.
Я не помню, чтоб я тебе отвечал по поводу прикрепления букв предметам, но в силу затронутой темы отпишусь здесь.

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

В итоге
1. Действий ровно то же количество.
2. Кучу рандомных пар буква-предмет в голове держать не надо.
3. При выборе всегда актуальный список именно доступных предметов, а не "использовать, d, хаха у вас левел не тот".
4. Можно любую контекстную информацию выводить для предмета, например сколько ходов займет каст заклинания или какой суммарный урон будет если взять это оружие.

Но в первую очередь это конечно запоминание. Я обладаю, в целом, совершенно средней памятью, но к десятому поднятому и вразнобой использованному предмету я ни в жисть не вспомню что там какой букве соотносится. Интерфейс должен помогать, а не насиловать. Вспоминаем в какой теме мы сейчас находимся и понимаем, что краткосрочная память и так информацией забита по самое не могу.
Пытается раскуклиться

sokolix
Сообщения: 81
Зарегистрирован: 02 дек 2012, 15:34

Re: Разработка интерфейса для незрячих.

Сообщение sokolix » 19 июл 2013, 18:16

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

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 37 гостей