@Michaelionia

Какая структура данных подойдет для Тривия приложения?

какая структура данных подойдет для Тривия приложения , в котором будет следующий flow:
Первый экран => выбор мира , при выборе которого будет переход на Второй экран.
Второй экран => выбор уровня, при выборе которого будет переход на Третий экран.
Третий экран => уровень.

Думал сделать :
Массив с обьектами миров.
Каждый мор будет иметь массив уровней.
Каждый уровень будет обьектом из вопроса и 4 ответа,

Есть предложения лучше? на работу устраиваюсь, нужно как лучше сделать =]
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 2
Aleksandr-JS-Developer
@Aleksandr-JS-Developer
Бери и делай
Я, когда писал текстовую приключенческую игру сделал таким образом:

// Есть модули вида:
{
	title: '',
	text: '',
	img: '',
	buttons: [
		{title: 'bttn1', location: 'location_bttn1'},
		{title: 'bttn2', location: 'location_bttn2'}
	]
}

// Эти модули складируются в один объект, т. е. не древовидная структура, а плоская,
// для скорости поиска.
// Сначала у меня для поиска использовалась рекурсия в древе,
// но это работало медленно и я пришел к плоской структуре.
// Нет ничего быстрее, чем обращение по ключу в объект)

const locations = {
	home: {
		title: 'home',
		text: 'home Page',
		img: '',
		buttons: [
			{title: 'bttn1', location: 'location_bttn1'}
		]
	}
	location_bttn1: {
		title: 'bttn1',
		text: 'bttn1 Page',
		img: '',
		buttons: [
			{title: 'bttn2', location: 'location_bttn2'}
		]
	}
	...
}


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

В принципе, у меня главный экран от игрового не отличался внешне, те-же кнопки.
Но вы можете доработать функцию рендеринга, чтобы она рендерила страницу по шаблону, в зависимости от поля модуля.
{
	title: '',
	text: '',
	img: '',
	buttons: [
		{title: 'bttn1', location: 'location_bttn1'},
		{title: 'bttn2', location: 'location_bttn2'}
	],

	renderMode: 'firstScreen' // 'playBoard' || 'menu' || 'level' || ...
}

На месте можно сделать и заглушку для 404 экрана
Так-же это удобно, чтобы продолжить с последней локации после перезарузки страницы.
Просто при каждом переходе сохранете location_id в localStorage и берете оттуда, при запуске
Ответ написан
kirbi1996
@kirbi1996
Да, и как вариант передавать конкретный массив через route.params. а если есть бэкенд то по хорошему нужно по айди получать запросы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы