https://hotpot.ai/ai-stock-photo - весьма годный генератор. жаль с ограниченным бесплатным триалом ежедневным

https://startpack.ru/application/hotpot-ai/alternatives похожие серверы много мусорных с регистрацией и платными подписками. Появляется их всё больше и больше

https://startpack.ru/application/hotpot-ai/alternatives

 Начисто сегодня:

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>>

============================================================
Пассаж сумки
 
/*Отображение добавленных предметов в виде ссылок в пассаже "Инвентарь":
javascript*/
 
<<set $totalWeightSumka = 0>> /*подсчет общего веса предметов в сумке*/
 
<<if $totalWeightSumka >= 5000>>
    У вас больше нет места в сумке
<</if>>
 
   
<<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>>
 
        <br>
    <</for>>
 
    <p>Общий вес предметов в сумке: <<print $totalWeightSumka>> грамм</p>
<<else>>
    <p>Ваша сумка пуста.</p>
<</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 и обновить ее значение при съедании предметов.

Дайте мне знать, если у вас возникнут дополнительные вопросы!

=============================

Молодец! Вот только я ему забыл сказать, что переменные уже объявлены и даже изменяются во времени. Лан завтра в это буду вникать.

 




Если скобки будут квадратными в контексте инициализации переменной, это будет означать создание пустого массива
Формат JSON (JavaScript Object Notation) - это легкий формат обмена данными, основанный на синтаксисе JavaScript. JSON используется для передачи структурированных данных между компьютерами и является популярным форматом для работы с данными веб-приложений. Он представляет собой текстовый формат, который легко читается как человеком, так и машиной.
JSON представляет данные в виде пар "ключ: значение", где ключи и значения могут быть строками, числами, объектами, массивами, логическими значениями или null. Пример JSON-объекта:
json
{
  "name": "John Doe",
  "age": 30,
  "isStudent": false,
  "hobbies": ["reading", "traveling"],
  "address": {
    "street": "123 Main St",
    "city": "Anytown"
  }
}

А, если скобки сделдать квадратными?

То это уже будет массив, а не объект. Вот как будет выглядеть инициализация переменной с пустым массивом:

javascript
<<set $items = []>> /* Инициализация переменной $items как пустого массива */
 

Разница между фигурными скобками {} (для объектов) и квадратными скобками [] (для массивов) в формате 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

------------------------

ну, вот, а жизнь то налаживается....

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

 


Чистовичок:


 StoryInit

<<set $sumka = []>> /*объявляю "пустое" множество предметов в сумке*/

 

В пассаже с предметом код ссылки:
 

 

<<set $apple = {

name: "яблоко",

color: "красное",

taste: "сладкое",

weight: random(80, 300),

price: 0 // Инициализация цены перед расчетом

}>>

 

<<set $apple.price = $apple.weight / 10>> // Рассчет цены пропорционально весу

 

<<link "Положить яблоко в сумку">>

<<set $sumka.push($apple)>>

Положить яблоко <<print $apple.color>> <<print $apple.taste>> весом <<print $apple.weight>> ценой <<print $apple.price>>

<</link>>

в пассаже сумка:

 

 

<<if $sumka.length > 0>>

 

    <h2>Предметы в вашем инвентаре:</h2>

 

    <<for $item range $sumka>>

        <<link "Посмотреть <<print $item.name>> - Цвет: <<print $item.color>>, Вкус: <<print $item.taste>>, Вес: <<print $item.weight>>, Цена: <<print $item.price>>">>

            <<print $item.name>>

        <</link>>

 

        <br>

    <</for>>

 

<<else>>

 

    <p>Ваш инвентарь пуст.</p>

 

<</if>>

----------------------

обожаю игры, где в инвентарь можно собрать всё без ограничений: черных дыр пять штука, пару стаков звездолетов, но у моего ГГ сумка будет иметь ограничения. Например 5 кг. Будем реалистам с большими весами еще не каждый солдат каждый день бегает.

но этим я займусь уже завтра... худо-бедно, а с помощью ИИ дело стало трогаться с места.

 

Черновичок:

 

Для подсчета общего веса всех предметов в сумке, вы можете добавить следующий код:
html
<<set  $totalWeightSumka = 0>> /*подсчет общего веса предметов в сумке*/
 
<<if $sumka.length > 0>>
 
    <h2>Предметы в вашем инвентаре:</h2>
 
    <<for $item range $sumka>>
        <<set $totalWeightSumka += $item.weight>>
 
        <<link "Посмотреть <<print $item.name>> - Цвет: <<print $item.color>>, Вкус: <<print $item.taste>>, Вес: <<print $item.weight>>, Цена: <<print $item.price>>">>
            <<print $item.name>>
        <</link>>
 
        <br>
    <</for>>
 
    <p>Общий вес предметов в инвентаре: <<print $totalWeightSumka>> грамм</p>
 
<<else>>
 
    <p>Ваш инвентарь пуст.</p>
 
<</if>>
 
Здесь мы:
Создаем переменную _totalWeight (эта переменная была заменена на $totalWieghtSumka так понятнее для меня на случай, если кроме сумки еще будет что-то и для SugarCube2, который не любит переменные с нижним подчеркиванием в начале) и инициализируем ее значение 0.
В цикле <<for>> добавляем вес каждого предмета ($item.weight) к _totalWeight.
После цикла выводим общий вес предметов в инвентаре.
Таким образом, пользователь будет видеть общий вес всех предметов, находящихся в его инвентаре.
 
 ну, он конечно молодец, создал объект трусы не знаю еще правильно или не правильно... но возникает вопрос, что с этими трусами делать то? как их в тексте отобразить и все такое. Еще упростим задачу, пока просто предметы без свойств.

Для создания множества объектов в инвентаре и отображения их в виде ссылок в пассаже "Инвентарь" можно использовать массив, в котором будут храниться добавленные предметы. Вот пример кода, который демонстрирует этот подход с яблоком, грибочком и кубиком:
Создание массива для хранения предметов в инвентаре:
javascript
:: StoryInit
<<set $inventory = []>>
 
 
Добавление предметов (яблоко, грибочек, кубик) в инвентарь:
javascript
<<set $inventory.push("яблоко")>>
<<set $inventory.push("грибочек")>>
<<set $inventory.push("кубик")>>
 
Отображение добавленных предметов в виде ссылок в пассаже "Инвентарь":
javascript
<<if $inventory.length > 0>>
    <h2>Предметы в вашем инвентаре:</h2>
    <<for _item range $inventory>>
        <<link "Посмотреть $_item">>
            $_item
        <</link>>
        <br>
    <</for>>
<<else>>
    <p>Ваш инвентарь пуст.</p>
<</if>>
 
Этот код создает массив $inventory, добавляет в него предметы (яблоко, грибочек, кубик) и отображает их в виде ссылок в пассаже "Инвентарь". При клике на ссылку можно просмотреть каждый добавленный предмет... Хотя....

 

 

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

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 и использования переменных для свойств, можно воспользоваться следующим примером:
javascript
<<set $underwear = {
    condition: "новые, чистые",
    price: 2
}>>
 
// Позже изменение свойств объекта "трусы"
<<set $underwear.condition = "поношенные, грязные">>
<<set $underwear.price = 0>>
 
// Вывод информации о трусах
<<print "Состояние трусов: " + $underwear.condition + ", Цена: " + $underwear.price + " долларов">>
 
В этом примере мы создаем объект "трусы" с начальными характеристиками "новые, чистые" и ценой "2 доллара". Позже мы изменяем состояние трусов на "поношенные, грязные" и устанавливаем цену в 0 долларов. После этого выводим информацию о состоянии трусов с помощью макроса <<print>>.

Наверняка ведь наврал с кодом? Но вот уже скоро я это все проверю. 

А для инвентаря можно выделить целый пассаж. Вот такая кнопка может быть расположена прямо в StoryCaption. Очень удобно.

<<button [[Сумка|Сумка]]>><</button>>

Не помню было такое у меня уже или нет. Если было и я не помню решения проблемы, значит... будем её решать еще столько раз пока решение не станет для нас очень видным.

 

напиши код для Twine 2 SugarCube 2, чтобы он отображал рандомную картинку из папки kartinki

Copilot
Конечно, вот пример кода для Twine 2 с использованием формата SugarCube 2, который отображает случайное изображение из заданного списка:

<<set $images to ["kartinka1.jpg", "kartinka2.jpg", "kartinka3.jpg"]>> /* Замените имена файлов на имена ваших изображений */
<<set $randomImage to $images.pluck()>>
<img src="path/to/kartinki/$randomImage"> /* Укажите правильный путь к папке с изображениями */
 

 

Этот код использует метод .pluck() для выбора случайного изображения из массива $images и отображения его в пассаже. Помните, что вам нужно будет заменить "kartinka1.jpg", "kartinka2.jpg", "kartinka3.jpg" на имена файлов ваших изображений и указать правильный путь к папке kartinki.


вам не нужно перечислять все 100 изображений вручную. Вы можете использовать цикл в Twine для автоматического создания массива с именами файлов. Вот пример кода, который делает это:
 
<<set $images to []>>
<<for _i to 100>>
  <<set _imageName to "kartinka" + _i + ".jpg">>
  <<set $images.push(_imageName)>>
<</for>>
<<set $randomImage to $images.pluck()>>
<img src="path/to/kartinki/$randomImage"> /* Укажите правильный путь к папке с изображениями */
 
Этот код создает массив $images с именами файлов от kartinka1.jpg до kartinka100.jpg, а затем выбирает из него случайное изображение для отображения. Убедитесь, что имена файлов соответствуют тем, которые у вас есть в папке, и что путь к папке kartinki указан верно.

Что-то он мне как-то все мозги разбил на части и все извилины заплел... Это мы еще не проходили, но... За то, что потихоньку меня образовывать пытается спасибо ему... 

Ок, скармливаю ему то, что сделано было самостоятельно, но корректно не работало:

Кот:

<<set $randimg = random(4, 6)>>

<div style="text-align: center;">

    <img src="pic/(" + "$randimg" + ").jpg" style="display: inline-block;">

</div>

Как изменить этот код, чтобы он в Твайн 2 SugarCube 2 отображал картинку, а не строку: <img src="pic/(" + "4" + ").jpg" style="display: inline-block;">

 

Картинки в папке имеют названия (4), (5), (6)

Ответ Бинга:

Чтобы код корректно работал в Twine 2 с использованием формата SugarCube 2 и отображал изображение, вам нужно использовать следующий синтаксис для вставки изображения:

 

<<set $randimg to random(4, 6)>>

<div style="text-align: center;">

    <img src="pic/($randimg).jpg" style="display: inline-block;">

</div>

 

Этот код устанавливает переменную $randimg со случайным значением от 4 до 6 и использует эту переменную в пути к изображению. Убедитесь, что ваши изображения находятся в папке pic вашего проекта Twine.

Ну, мы знаем как оно работает поэтому сразу пишем рекламацию: "это так не работает. Он создает ссылку на картинку такого вида: /pic/fignia/($randimg).jpg
===============================

Что нужно добавить, чтобы вместо текста $randimg было числовое значение переменной?

Ответ: Чтобы вместо текста $randimg отображалось числовое значение переменной, вам нужно использовать оператор <<print>> в Twine 2 с форматом SugarCube 2. Вот как это должно выглядеть:

 

<<set $randimg to random(4, 6)>>

<div style="text-align: center;">

    <<print '<img src="pic/' + $randimg + '.jpg" style="display: inline-block;">'>>

</div>

 

Оператор <<print>> здесь используется для вывода значения переменной $randimg как части строки, что позволяет динамически изменять путь к изображению. Убедитесь, что ваши изображения правильно размещены в указанной папке.
===============================

А ведь он знал правильный ответ да?
Но меня это уже работающее решение не совсем устраивает потому, что Винда при массовом переименовании файлов выдает названия типа (1), (2). (3) и так далее

Поэтому еще один уточняющий вопрос: "а чтобы имя отображалос в виде (4).jpg?"

Ответ: "Для того чтобы имя файла отображалось в виде (4).jpg, вам нужно добавить скобки в строку пути к файлу. Вот пример кода, который должен работать в Twine 2 с использованием SugarCube 2:

 

<<set $randimg to random(4, 6)>>

<div style="text-align: center;">

    <<print '<img src="pic/(' + $randimg + ').jpg" style="display: inline-block;">'>>

</div>

 

Этот код установит переменную $randimg со случайным значением от 4 до 6 и выведет путь к изображению с учетом скобок вокруг числа. Таким образом, если значение $randimg будет, например, 4, то путь к изображению примет вид pic/(4).jpg. Убедитесь, что скобки являются частью имени файла в вашей папке pic.

 

вот теперь оно работает как мне нужно... Спасибо, Майкрософту, что не создает нам простых путей, вот теперь зато понятно, что вместо скобочек можно что угодно подставить. И как подставлять тоже ясно.

Новое матерное слово дня: "конкатенация" Это вот про вот эти вот скобочки с принтом " + " объединяющие элементы в одну строку

 

 

 

 

https://www.iloveimg.com/ru - незаменимый ресурс для уменьшения размера картинок, сжатия и прочей оптимизации.

Очень удобно. чтобы не запускать громоздкие программы обработки.

яндекс браузер озвучивает любой выделенный текст. Для озвучки книг прямо с веб странице идеально подходит.

https://asimovonline.ru/series/ - потерялась ссылка на цикл основания. Кажется последняя книга была.... из семи серий. Печаль в том, что большинство сайтов неправильно перечисляют содержание циклов и в них отсутствует часть книг.
https://royallib.com/read/azimov_ayzek/osnovanie_i_zemlya.html#0

https://ru.wikipedia.org/wiki/Основание_(цикл)#«Основание_и_Земля»

Фредерик Пол

Все книги и циклы

https://www.livelib.ru/author/352/series-frederik-pol/~2

https://www.livelib.ru/series/797922-hichi

https://www.youtube.com/results?search_query=хичи

 

 Журналы:

https://pochitaem.su/category/zhurnaly/nauka/
https://100pdf.club/?s=наука

https://jurnali-vsem.ru/nauka журналы

http://samlib.ru/c/chizhow_j/new-hoess.shtml - Комендант Освенцима. Автобиографические записки Рудольфа Гесса

 <<set $month to 2>>
<<set $year to 2024>>
<<if $month is 2>>
  <<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>>
<<else>>
  <<set $daysInMonth to [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][$month - 1]>>
<</if>>
В феврале $year года $daysInMonth дней.


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

как то так наверное: 

<<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>>
но проверять и радоваться буду уже завтра

 


как мне записать в строчку, что: если $month = 0 или =2, или =4, или =6, или =7, или =9, или =11, то $daysinmonth = 31?

 Для выполнения данного условия в Twine 2 SugarCube 2 можно использовать следующий код:
javascript
<<set $month to 0>>  /* Установите значение $month на нужный месяц */
<<if $month === 0 || $month === 2 || $month === 4 || $month === 6 || $month === 7 || $month === 9 || $month === 11>>
    <<set $daysinmonth to 31>>
<</if>>
 
Этот код устанавливает значение переменной $month и затем проверяет, соответствует ли оно одному из перечисленных месяцев. Если условие выполняется, то переменная $daysinmonth устанавливается в 31.

============================

К сожалению, в предоставленных результатах поиска не удалось найти информацию о том, как выполнить данное условие без использования JavaScript в SugarCube 2. Однако, без использования JavaScript в SugarCube 2, вы можете использовать вложенные конструкции <<if>>/<<elseif>>/<<else>> для выполнения условий. Например:
html
<<set $month to 1>>  <!-- Установите значение $month на нужный месяц -->
<<if $month === 1>>
    <<set $daysinmonth to 31>>
<<elseif $month === 2>>
    <<set $daysinmonth to 31>>
<<elseif $month === 4>>
    <<set $daysinmonth to 30>>
<<elseif $month === 6>>
    <<set $daysinmonth to 30>>
<<elseif $month === 7>>
    <<set $daysinmonth to 31>>
<<elseif $month === 9>>
    <<set $daysinmonth to 30>>
<<elseif $month === 11>>
    <<set $daysinmonth to 30>>
<<else>>
    <<set $daysinmonth to 31>>
<</if>>
 
Этот код использует вложенные конструкции <<if>>/<<elseif>>/<<else>> для установки значения переменной $daysinmonth в зависимости от значения переменной $month. Надеюсь, это поможет! Если у вас есть дополнительные вопросы, не стесняйтесь обращаться.

------------------------------------------------------------------

Символ || в JavaScript представляет собой логический оператор "или". Он используется для объединения двух или более условий, и возвращает true, если хотя бы одно из условий истинно. Например, выражение (a === 1 || b === 2) вернет true, если переменная a равна 1 или переменная b равна 2.
SugarCube 2 поддерживает JavaScript, поэтому он также поддерживает логический оператор ||. Вы можете использовать его для создания условий в вашем коде SugarCube 2.
Надеюсь, это поможет! Если у вас есть дополнительные вопросы, не стесняйтесь обращаться.

 Если вы хотите переключаться между элементами массива, вам нужно использовать индекс элемента, а не сам массив. Например, вы можете написать:
 
<<set $weekofdays to ["пн", "вт", "ср", "чт", "пт", "сб", "вс"]>>
<<set $index to 0>>
<<print $weekofdays[$index]>>
<<set $index += 1>>
<<print $weekofdays[$index]>>
 
 
Этот код выведет на экран “пнвт”. Вы можете менять значение $index, чтобы получать разные элементы массива. Но не забывайте, что индексация начинается с нуля, и что если $index больше длины массива, то вы получите ошибку. В этом случае, вам нужно использовать оператор остатка от деления, как я показал в предыдущем ответе.

 

====================================

Чтобы переключать дни недели, вам нужно увеличивать значение $weekdays на единицу каждый раз, когда вы добавляете один день. Например, вы можете написать:

 

<<set $days += 1>>

<<set $weekdays += 1>>

<<print "Завтра " + $namedayweek[$weekdays % 7] + ".">>

 

Этот код выведет на экран “Завтра Вт.”, если $weekdays было равно 0 (Пн) до этого.

 

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

 


 попробуем более просто пример чем с годами и месяцами.

Вот пример кода на языке Twine/SugarCube 2, который пересчитывает $hours в дни недели и отображает название дней недели:
twine
<<set $hours = 168>> <!-- Установка количества часов -->
<<set $daysOfWeek = ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"]>> <!-- Массив дней недели -->
<<set $dayOfWeek = $daysOfWeek[$hours / 24 % 7]>> <!-- Вычисление дня недели -->
Текущий день недели: <<$dayOfWeek>> <!-- Отображение дня недели -->
 
В этом коде мы используем массив $daysOfWeek, который содержит названия дней недели. Мы также устанавливаем количество часов в переменной $hours. Затем мы вычисляем день недели, используя формулу $hours / 24 % 7, которая вычисляет количество дней, прошедших с начала недели, и использует остаток от деления на 7 для определения дня недели. Наконец, мы отображаем название дня недели с помощью переменной $dayOfWeek. Если вам нужно отобразить день недели в другом формате, вы можете изменить массив $daysOfWeek соответствующим образом.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

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

 

Вот измененный код на языке 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... тоже может пригодится:

 if hour >= 24:
     jump 'loop'
     end
end
 
if month = 1 or month = 3 or month = 5 or month = 7 or month = 8 or month = 10 or month = 12:
!31
if day > 31:day -= 31 & month += 1
elseif month = 2:
!28
if day > 28:day -= 28 & month += 1
elseif month = 0:
month = 1
if day > 31:day -= 31 & month += 1
elseif month = 13:
month = 1
if day > 31:day -= 31 & month += 1
else
!30
if day > 30:day -= 30 & month += 1
end
if day = 0:day = 1
 
 
if week > 7:
:loopweek
set week = week - 7
     if week > 7:
     jump 'loopweek'
     end
 
end
 
if week = 1:Set $week = 'Понедельник'
if week = 2:Set $week = 'Вторник'
if week = 3:Set $week = 'Среда'
if week = 4:Set $week = 'Четверг'
if week = 5:Set $week = 'Пятница'
if week = 6:Set $week = 'Суббота'
if week = 7:Set $week = 'Воскресенье'
 
if month = 0:Set month = 1
if month = 13:Set month = 1&year+=1
If month = 1:set $month = 'Январь'
If month = 2:set $month = 'Февраль'
If month = 3:set $month = 'Март'
If month = 4:set $month = 'Апрель'
If month = 5:set $month = 'Май'
If month = 6:set $month = 'Июнь'
If month = 7:set $month = 'Июль'
If month = 8:set $month = 'Август'
If month = 9:set $month = 'Сентябрь'
If month = 10:set $month = 'Октябрь'
If month = 11:set $month = 'Ноябрь'
If month = 12:set $month = 'Декабрь'
 


 

Profile

blocknote

January 2025

S M T W T F S
    1234
567891011
12131415 161718
19202122232425
2627 28293031 

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Powered by Dreamwidth Studios