Начисто сегодня:
StoryInit
/*инвентарь, сумки, сундуки, шкафы, склады*/
<<set $sumka = []>> /*объявляю "пустое" множество предметов в сумке*/
<<set $totalWeightSumka = 0>> /*вес предметов в сумке*/
<<set $item = {}>> /* Инициализация переменной $item как объект *
===========================================================
Пассаж, где "генерируются" предметы и подбираются
<<if $totalWeightSumka >= 5000>>
У вас больше нет места в сумке
<<else>>
<<set $kosteritem = random(1, 5)>> /*условия для появления предмета*/
<<if $kosteritem == 1>>
<<set $apple = {
name: "яблоко",
color: "красное",
taste: "сладкое",
weight: random(80, 300),
price: 0, /*Инициализация цены перед расчетом*/
satisfyHunger: 0,
satisfyThirst: 0,
burningTime: 0
}>>
<<set $apple.price = $apple.weight / 10>> /*Рассчет цены пропорционально весу*/
<<set $apple.satisfyHunger = $apple.weight * 5>>
<<set $apple.satisfyThirst = $apple.weight * 5>>
<<link "Положить яблоко <<print $apple.color>> <<print $apple.taste>> весом <<print $apple.weight>> ценой <<print $apple.price>> пищевая ценность: <<print $apple.satisfyHunger>> утоление жажды: <<print $apple.satisfyThirst>> время горения: <<print $apple.burningTime>>">>
<<set $sumka.push($apple)>>
<<set $itemSumka = $apple>><<goto "костерок">>
<</link>>
<<elseif $kosteritem == 2>>
<<set $pear = {
name: "груша",
color: "зеленая",
taste: "сладкая",
weight: random(100, 200),
price: 0,
satisfyHunger: 0,
satisfyThirst: 0,
burningTime: 0
}>>
<<set $pear.price = $pear.weight / 8>>
<<set $pear.satisfyHunger = $pear.weight * 5>>
<<set $pear.satisfyThirst = $pear.weight * 5>>
<<link "Положить грушу <<print $pear.color>> <<print $pear.taste>> весом <<print $pear.weight>> ценой <<print $pear.price>> пищевая ценность: <<print $pear.satisfyHunger>> утоление жажды: <<print $pear.satisfyThirst>> время горения: <<print $pear.burningTime>>">>
<<set $sumka.push($pear)>>
<<set $itemSumka = $pear>><<goto "костерок">>
<</link>>
<<else>>
Здесь нечего взять
<</if>>
<</if>>
Пассаж сумки
Всё это работает как задумано.
===============================
Задание на завтра:
Отлично, давайте добавим возможность выбрасывания и употребления предметов из сумки.
Для этого можно добавить дополнительные ссылки рядом с информацией о каждом предмете в сумке:
html
<<set $totalWeightSumka = 0>> /*подсчет общего веса предметов в сумке*/
<<if $sumka.length > 0>>
<h2>Предметы в вашем инвентаре:</h2>
<<for $itemSumka range $sumka>>
<<set $totalWeightSumka += $itemSumka.weight>>
<<link "Посмотреть <<print $itemSumka.name>> - Цвет: <<print $itemSumka.color>>, Вкус: <<print $itemSumka.taste>>, Вес: <<print $itemSumka.weight>>, Цена: <<print $itemSumka.price>>, Утоление голода: <<print $itemSumka.satisfyHunger>>, Утоление жажды: <<print $itemSumka.satisfyThirst>>, Время горения: <<print $itemSumka.burningTime>>">>
<<print $itemSumka.name>>
<</link>>
<<link "Съесть <<print $itemSumka.name>>">>
<<set $hunger += $itemSumka.satisfyHunger>>
<<remove $sumka $itemSumka>>
<<set $totalWeightSumka -= $itemSumka.weight>>
<</link>>
<<link "Выбросить <<print $itemSumka.name>>">>
<<remove $sumka $itemSumka>>
<<set $totalWeightSumka -= $itemSumka.weight>>
<</link>>
<br>
<</for>>
<p>Общий вес предметов в инвентаре: <<print $totalWeightSumka>> грамм</p>
<<else>>
<p>Ваш инвентарь пуст.</p>
<</if>>
<<if $totalWeightSumka >= 5000>>
У вас больше нет места в сумке
<</if>>
В этом обновленном коде:
Мы добавили два новых <<link>> блока для каждого предмета в сумке:
"Съесть <<print $itemSumka.name>>"
"Выбросить <<print $itemSumka.name>>"
При клике на ссылку "Съесть":
Значение переменной $hunger увеличивается на $itemSumka.satisfyHunger
Предмет удаляется из массива $sumka
Общий вес в сумке уменьшается на вес съеденного предмета
При клике на ссылку "Выбросить":
Предмет удаляется из массива $sumka
Общий вес в сумке уменьшается на вес выброшенного предмета
Таким образом, пользователь теперь может не только просматривать содержимое сумки, но и съедать или выбрасывать предметы из нее.
Обратите внимание, что вам также нужно будет добавить переменную $hunger и обновить ее значение при съедании предметов.
Дайте мне знать, если у вас возникнут дополнительные вопросы!
=============================
Молодец! Вот только я ему забыл сказать, что переменные уже объявлены и даже изменяются во времени. Лан завтра в это буду вникать.
Объекты и массивы
Mar. 29th, 2024 03:19 pmЕсли скобки будут квадратными в контексте инициализации переменной, это будет означать создание пустого массива
А, если скобки сделдать квадратными?
То это уже будет массив, а не объект. Вот как будет выглядеть инициализация переменной с пустым массивом:
javascriptРазница между фигурными скобками {} (для объектов) и квадратными скобками [] (для массивов) в формате JSON или в JavaScript заключается в следующем:
Фигурные скобки {} для объектов: Используются для создания объектов, где данные хранятся в формате "ключ: значение". Пример: { "name": "John", "age": 30 }.
Квадратные скобки [] для массивов: Используются для создания массивов, где данные хранятся в виде упорядоченного списка. Пример: ``.
Таким образом, при использовании квадратных скобок [] вы создаете пустой массив, который может содержать элементы, а при использовании фигурных скобок {} вы создаете пустой объект, который может содержать пары "ключ: значение". Каждая структура имеет свои особенности и применение в зависимости от необходимости хранения и организации данных.
==============================================
в массиве в JavaScript можно хранить не только примитивные значения, но и объекты или другие массивы. Это позволяет создавать структурированные данные и хранить их в удобной форме. Вы можете объявить объекты или массивы в других частях кода и добавить их в основной массив. Вот пример:
javascript
// Объявление объектов
<<set $apple = { name: "яблоко", color: "красное" }>>
<<set $banana = { name: "банан", color: "желтый" }>>
// Объявление массива и добавление объектов
<<set $fruits = [$apple, $banana]>>
В этом примере $apple и $banana - это объекты, которые затем добавляются в массив $fruits. Таким образом, в массиве $fruits будут храниться объекты $apple и $banana. При необходимости вы можете добавлять в массив и другие объекты или массивы, создавая структурированные данные для вашего приложения.
================================
Да, в JavaScript можно добавить массив в качестве свойства объекта. Это позволяет структурировать данные и хранить массивы внутри объектов. Вот пример того, как можно добавить массив в объект:
javascript
// Создание объекта с массивом в качестве свойства
const myObject = {
name: "John",
age: 30,
hobbies: ["reading", "painting", "gardening"]
};
В этом примере hobbies - это свойство объекта myObject, которое содержит массив с хобби. Таким образом, вы можете легко хранить массивы внутри объектов, что удобно для организации и доступа к данным в вашем коде.
Вон оно чо, Хоттабыч... поди сразу улови эту разницу... А зато сколько всякого разного такого можно навертеть... Так.... А в чо это только в массивы добавлены в качестве значений? А в качестве ключей можно добавлять массивы в объекты? Ась? Ну, и пирожоновых...
==================================
В JavaScript нельзя добавить массив в качестве ключа в объекте. Ключи объекта должны быть строками или символами. Попытка использовать массив в качестве ключа приведет к неожиданному поведению или ошибке. Вот пример того, как ключи объекта должны быть строками или символами:
javascript
// Некорректное использование массива в качестве ключа
const myObject = {
[1, 2, 3]: 'value' // Некорректное использование массива в качестве ключа
};
В данном примере использование массива `` в качестве ключа объекта myObject является некорректным и приведет к ошибке. Ключи объекта должны быть строками или символами для корректной работы.
Облом, ну, ладно, перетопчемся... А не в JS? Можна?
--------------------------------
Да, существуют языки программирования, в которых можно использовать массивы в качестве ключей в объектах. Например, в языке PHP такая возможность есть. В PHP можно использовать массивы в качестве ключей в ассоциативных массивах. Вот пример использования массива в качестве ключа в PHP:
php
// Использование массива в качестве ключа в PHP
$myArray = array('key1' => 'value1', array('nestedKey1' => 'nestedValue1') => 'value2');
В данном примере, массив array('nestedKey1' => 'nestedValue1') используется в качестве ключа в ассоциативном массиве $myArray
------------------------
ну, вот, а жизнь то налаживается....
Пойду ошибки в коде исправлять... как ссылки прописывать понятненько, со скобочками разобрались не прошло и года.
добавление предметов в инвентарь
Mar. 28th, 2024 01:01 pmДля создания множества объектов в инвентаре и отображения их в виде ссылок в пассаже "Инвентарь" можно использовать массив, в котором будут храниться добавленные предметы. Вот пример кода, который демонстрирует этот подход с яблоком, грибочком и кубиком:
логично добавлять предметы в инвентарь внутри ссылки, чтобы игрок мог добавить предмет по своему выбору. Вот пример ссылки для добавления яблока в инвентарь:
javascript
<<link "Положить яблоко в инвентарь">>
<<set $inventory.push("яблоко")>>
Яблоко добавлено в ваш инвентарь.
<</link>>
Этот код создает ссылку "Положить яблоко в инвентарь", при клике на которую в инвентарь будет добавлено яблоко, а игрок увидит сообщение "Яблоко добавлено в ваш инвентарь". Подобным образом можно создать ссылки для добавления других предметов в инвентарь.
=====================================================================
Не знаю почему эти ИИ называют ГПТ, перплексити, Бинг и другими красивыми словами. Натуральные же Хоттабычи. Неожиданно... этот код почти работает...
почти работает, только вот у меня в инвентарь с каждым кликом по ссылке добавляется не ссылка на объект яблоко, ссылка: "Посмотреть $_item". При клике на которую ничего не происходит
Answer
Для того чтобы ссылки в инвентаре отображались корректно и позволяли просматривать соответствующие предметы, необходимо правильно использовать переменные внутри ссылок. Вот исправленный код, который позволит корректно отображать ссылки на предметы в инвентаре:
Добавление предметов в инвентарь с использованием объектов:
javascript
<<set $inventory = []>>
<<set $apple = {
name: "яблоко"
}>>
<<set $mushroom = {
name: "грибочек"
}>>
<<set $cube = {
name: "кубик"
}>>
<<set $inventory.push($apple)>>
<<set $inventory.push($mushroom)>>
<<set $inventory.push($cube)>>
Отображение предметов в виде ссылок в пассаже "Инвентарь":
javascript
<<if $inventory.length > 0>>
<h2>Предметы в вашем инвентаре:</h2>
<<for _item range $inventory>>
<<link "Посмотреть $_item.name">>
$_item.name
<</link>>
<br>
<</for>>
<<else>>
<p>Ваш инвентарь пуст.</p>
<</if>>
Теперь при клике на ссылку "Посмотреть яблоко", "Посмотреть грибочек" или "Посмотреть кубик", игрок сможет просмотреть соответствующий предмет из инвентаря.
Ок, еще не всё понятно мне поэтому зададим еще один провокационный вопрос:
а, если объект с именем яблоко будет еще и красным и сладким? Как будет выглядеть код?
Для добавления дополнительных свойств, таких как цвет и вкус, к объекту "яблоко" и отображения их в ссылках в инвентаре, вам нужно расширить структуру объекта и использовать эти свойства при отображении предметов. Вот как это может быть реализовано:
Обновление объекта "яблоко" с дополнительными свойствами (цвет, вкус):
javascript
<<set $apple = {
name: "яблоко",
color: "красное",
taste: "сладкое"
}>>
Добавление объекта "яблоко" в инвентарь с обновленными свойствами:
javascript
<<set $inventory.push($apple)>>
Отображение предметов в виде ссылок с учетом новых свойств в пассаже "Инвентарь":
javascript
<<if $inventory.length > 0>>
<h2>Предметы в вашем инвентаре:</h2>
<<for _item range $inventory>>
<<link "Посмотреть $_item.name - Цвет: $_item.color, Вкус: $_item.taste">>
$_item.name
<</link>>
<br>
<</for>>
<<else>>
<p>Ваш инвентарь пуст.</p>
<</if>>
Теперь при клике на ссылку "Посмотреть яблоко - Цвет: красное, Вкус: сладкое", игрок сможет просмотреть яблоко с указанными свойствами из инвентаря.
Вон оно чо Петрович.... тут такие горизонты открываются...
================================================================
Это тебе так кажется, Хоттабыч, что может на самом деле он выдает ссылку такого вида:
$_item.name - Цвет: $_item.color, Вкус: $_item.taste
Ну, не первый день замужем, поэтому тактично напоминаем, а ты не забыл ли где-то print прописать?
***
О! Волька! Да, для вывода значений свойств объекта в ссылках в инвентаре необходимо использовать <<print>> для корректного отображения. Вот исправленный код с добавлением <<print>>:
javascript
<<if $inventory.length > 0>>
<h2>Предметы в вашем инвентаре:</h2>
<<for _item range $inventory>>
<<link "Посмотреть <<print _item.name>> - Цвет: <<print _item.color>>, Вкус: <<print _item.taste>>">>
<<print _item.name>>
<</link>>
<br>
<</for>>
<<else>>
<p>Ваш инвентарь пуст.</p>
<</if>>
Теперь при клике на ссылку в инвентаре, будут корректно отображаться значения свойств объекта (цвет, вкус) вместо их кодовых названий.
========
Теперь работает как заказано, ссылка отображается виде: Посмотреть яблоко - Цвет: красное, Вкус: сладкое
но... принтов-то принтов навертел, что твой Д. Гордон мерчей...
Трем лампу и прашиваем: Одним принтом никак нельзя было обойтись?
Конечно, О. Волька!:
<<if $inventory.length > 0>>
<h2>Предметы в вашем инвентаре:</h2>
<<for _item range $inventory>>
<<link "Посмотреть $_item.name - Цвет: $_item.color, Вкус: $_item.taste">>
$_item.name
<</link>>
<br>
<</for>>
<<else>>
<p>Ваш инвентарь пуст.</p>
<</if>>
на выходе получаем: Посмотреть яблоко - Цвет: <<красное>>, Вкус: <<сладкое>>
При нажатии на ссылку ничего не происходит, но... оно потом будет добавлено. В принципе достигнутый вариант меня уже устраивает. Хотя, мне кажется, что принто можно еще иначе как-то прописать. Трем лампу...
============================================
И тут Хоттабыч психанул и выдал прекрасное и лаконичное и ваще и в борще без принта. И ссылочку выдающее прекрасную вида:
"Посмотреть яблоко - Цвет: красное, Вкус: сладкое".
И главное без поллитры не понять, что он сделал почему оно раньше не работало, а теперь работает...
<<if $inventory.length > 0>>
<h2>Предметы в вашем инвентаре:</h2>
<<for _item range $inventory>>
<<link "Посмотреть <<= _item.name >> - Цвет: <<= _item.color >>, Вкус: <<= _item.taste >>">>
<<= _item.name >>
<</link>>
<br>
<</for>>
<<else>>
<p>Ваш инвентарь пуст.</p>
<</if>>
Да, можно использовать другой способ для вывода значений свойств объекта внутри ссылки без повторения <<print>>. Один из вариантов - использовать <<=>> для вывода переменных внутри текста. Вот как это может выглядеть:
Этот вариант позволяет выводить значения переменных внутри текста без использования дополнительных <<print>>, сохраняя при этом хорошую читаемость и выделение изменяемых переменных.
<<=>> - это макрос в формате SugarCube, который используется для вывода значений переменных внутри текста без необходимости использования дополнительных <<print>>. Он позволяет вставлять переменные прямо в тексте, обрамляя их двумя <<=>>.
Пример использования <<=>>:
javascript
<<set $name = "Alice">>
Привет, <<= $name >>! Как дела?
Макрос <<=>> является специфичным для формата SugarCube, который используется в инструменте Twine для создания интерактивных текстовых игр и историй. Он не является стандартным макросом в других языках программирования, таких как Rust, C++, или ассемблер.
Таким образом, макрос <<=>> применяется исключительно в контексте использования Twine и SugarCube для удобного вывода переменных внутри текста без необходимости использования дополнительных макросов или тегов.
В данном примере, значение переменной $name будет выведено прямо в тексте без использования дополнительных макросов или тегов, что делает код более читаемым и компактным.
В принципе я имею три работающих кода для отображение ссылки в инвентаре, с которыми можно дальше работать. <<=>> интересный макрос в СугарКубе, но какой-то неявный поэтому использую я первый вариант кода.
Объекты в SugarCube 2
Mar. 27th, 2024 11:32 pmВ общем хрен его знает, что такое объекты. Все эти абстрактные высокопарные объяснения засуньте себе в дупу, господа продвинутые программеры. Я их не воспринимаю просто потому, что у меня в голове еще нет ничего с чем это можно сравнить, чтобы понять поэтому...
Если я в чем ошибся то не взыщите.
Ну, часы и календарь в игре тикают... Статы меняются, пора вводить в игру всяко разное, что можно подобдрать, украсть, отнять, снять.
Короче, по утрам надев трусы, не забудьте про часы...
Для создания объекта "трусы" с характеристиками, которые могут изменяться со временем, в языке SugarCube 2 и использования переменных для свойств, можно воспользоваться следующим примером:
Наверняка ведь наврал с кодом? Но вот уже скоро я это все проверю.
А для инвентаря можно выделить целый пассаж. Вот такая кнопка может быть расположена прямо в StoryCaption. Очень удобно.
<<button [[Сумка|Сумка]]>><</button>>
високосный февраль
Feb. 6th, 2024 04:56 amПрав был гражданин, который говорил, что исправлять проще, чем что-то самому сообразить, имея в голове только опилки....
как то так наверное:
<<if $month === 1>>
<<if (($year % 4 is 0) and ($year % 100 is not 0)) or ($year % 400 is 0)>>
<<set $daysInMonth to 29>>
<<else>>
<<set $daysInMonth to 28>>
<</if>>
но проверять и радоваться буду уже завтра
Пересчет $days в дни недели
Jan. 12th, 2024 10:02 pm\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Это прорыв!!!!)))) Я узнал, что цифирька в квадратных скобках это индекс... завтра я это забуду (такой вот сюжет прямо по Кизу "цветы для Элджернона" )))))
Вот измененный код на языке Twine SugarCube 2, который увеличивает индекс элемента массива $namedayweek на 1 каждые 24 часа:
<<if $hours >= 24>>
<<set $days += Math.floor($hours / 24)>>
<<set $gdays += Math.floor($hours / 24)>>
<<set $hours %= 24>>
<<set $namedayweekIndex = $namedayweekIndex + Math.floor($hours / 24)>>
<<if $namedayweekIndex >= $namedayweek.length>>
<<set $namedayweekIndex = $namedayweekIndex - $namedayweek.length>>
<</if>>
<</if>>
<<set $namedayweek = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "ВС"]>>
<<set $namedayweekToday = $namedayweek[$namedayweekIndex]>>
В этом коде мы добавили переменную $namedayweekIndex, которая хранит текущий индекс элемента массива $namedayweek. Каждые 24 часа мы увеличиваем $namedayweekIndex на 1, и если $namedayweekIndex становится больше или равным длине массива $namedayweek, мы вычитаем длину массива, чтобы вернуться к началу массива. Затем мы устанавливаем $namedayweekToday равным элементу массива $namedayweek с индексом $namedayweekIndex.
============================================
лан сегодня спать, завтра главное проснуться и быть в состоянии видеть буквы и думать)) Может я таки рожу что-то
пример куска кода из qsp... тоже может пригодится:
механика сна (набросок)
Sep. 4th, 2023 12:39 amЕсли вы это случайно прочли, то я не волшебник и даже не учусь. У меня есть хобби оно как вязание и оно очень навязчивое. Перед сном я люблю повязать на доступном мне уровне.
Смысл сего я никому объяснять не имею желания и морочить себе голову сложными терминами тоже... поэтому просьба не морочить мне голову...
(no subject)
Aug. 29th, 2023 10:52 pmTwine 2 для чайников. Просто и понятно
Aug. 25th, 2023 09:53 pmhttps://www.youtube.com/watch?v=CHPtjRn6sbQ урок 2. - Урок по Twine и Sugarcube [Ep 2] - Боковая панель, специальные имена, макросы.
Возвращение в предыдущую локацию
Jul. 3rd, 2023 02:14 pmhttps://qjzhvmqlzvoo5lqnrvuhmg.on.drv.tw/UInv/Sample_Code.html#Time - Шугаркуб в конкретных примерах. Календарь и дата.
https://twinery.org/cookbook/dateandtime/sugarcube/sugarcube_dateandtime.html#twee-code
https://qjzhvmqlzvoo5lqnrvuhmg.on.drv.tw/UInv/Sample_Code.html#Main%20Menu - Шугаркуб в конкретных примерах. Оглавление
Создание игры в Twine 2
Dec. 31st, 2022 09:18 amПриложение №2: Проверка имени игрока - https://blocknote.dreamwidth.org/20346.html
3. Сделайте вашу игру потрясающей с помощью CSS - https://blocknote.dreamwidth.org/23069.html
Создание игры в Twine 2
Dec. 30th, 2022 05:15 pmhttps://www.youtube.com/watch?v=6ZawcwLOLWU
Примечание: это руководство было разработано для моих студентов и предполагает некоторое знакомство с HTML и CSS.
Вспоминание основ
Опять же неудивительно, что изменение цвета и поведения ссылок достигается за счет стилизации элемента, HTML-элемента для ссылок:
Теперь, когда ваш игрок доберется до этого прохода, его встретит розовый фон и большой синий текст.
Скрытие боковой панели
Если вам не нужна боковая панель, которая есть по умолчанию в играх SugarCube, вы можете легко скрыть ее. Просто введите следующий код в файл CSS вашей истории.
Добавление собственного HTML и его стилизация с помощью CSS
Tweego, Sugarcube 2
Apr. 5th, 2022 02:56 pmTweego - Зачем использовать Tweego? Tweego позволяет вам писать проекты Twine, используя ваш любимый текстовый редактор, а не программу Twine . Вы пишете отрывки в виде простых текстовых файлов, используя нотацию Twee , в любом количестве файлов по вашему выбору, что может сделать работу и совместную работу над проектами Twine быстрее и проще. Когда вы будете готовы к публикации или тестированию, вы просто скомпилируете все файлы своего проекта в .htmlфайл с помощью Tweego.
https://www.motoslave.net/tweego/ - скачать
https://www.motoslave.net/tweego/docs/ - как пользоваться Tweego
https://twinery.org/cookbook/introduction/story_formats.html - Twinery cookbook
https://www.youtube.com/watch?v=KAQJQ7VjIk4 пример, плащ судьбы
https://www.adamhammond.com/twineguide/ - пошаговые инструкции. Первые шаги в Twine.
https://github.com/hogart/sugar-cube-utils - куча каких-то макросов для Twine
http://www.motoslave.net/tweego/docs/#twee-notation