• Создание чат-квеста. Как это сделать?

    @Rioran
    Excel & VBA senior
    Здравствуйте. Как раз на днях делаю похожую вещь, но в HTML+JS. Да, Ваш проект можно реализовать на Java - на ней и сложнее вещи делаются. Правда, если речь о приложении для Android - нужно будет мимоходом вникнуть в нюансы xml, возможно JSON или ещё чего. Ваш вопрос в целом довольно широкий и отвечать на него конкретикой сложно. Но всё же вот несколько моих личных предвзятых советов. Вам нужно декомпозировать Вашу задачу на отдельные части:
    1). Прописать дерево сюжета. Какие вопросы приводят к каким последствиям. У меня это реализовано через JSON: rioran.ru/js/lit-rpg-questions.js чтобы можно было динамически подходить к количеству ответов на вопрос. Впрочем, имеет смысл хранить в табличном виде - так легче редактировать.
    2). Продумать элементы механики. Участвуют ли дополнительные характеристики, инвентарь героя? Ограничивают ли они варианты ответов? По ссылке в пункте "1" у меня также часть механик "зашиты" в вопросы. Например, параметр "change_health" содержит массив значений, индекс которых соответствует индексу выбранного игроком ответа. А на основной странице rioran.ru/lit-rpg реализованы процедуры обработки этого параметра, если он в вопросе есть. Язык JavaScript, может отличаться от Java местами, хотя в чём-то похож.
    3). Продумать и реализовать интерфейс, с которым будет работать игрок. Если речь о формате псевдо-чата с героем, то можно:
    - нижнюю часть экрана отвести под кнопки авто-выбора ответа. То есть, герой спрашивает "Как мне поступить? Мои варианты: 1 ... 2 ... 3..." и кнопки с номерами появляются внизу. Вам нужно будет научиться генерировать произвольное количество кнопок, научиться выравнивать их по ширине чтобы они нормально заполняли экран (рекомендую цепляться за % ширины, так как на разных экранах пиксели будут разными), научиться присваивать кнопкам выполнение соответствующей команды (идею можно подсмотреть в моём демо, где у меня реализован выбор нескольких значений). Также почерпнуть дополнительные идеи реализации кнопок можно, посмотрев на их реализацию в Telegram, например.
    - Часть экрана выше области для кнопок можно отвести под поле для ввода произвольного текста. Это создаст атмосферность чата и позволит игроку, например, представиться и давать имена каким-нибудь объектам. В мобильном приложении это делается созданием базового поля для ввода текста. Нужно будет прописать процедуру для очистки этого поля ввода.
    - И, наконец, основную часть экрана будет занимать поле псевдо-чата. Имеет смысл делать его через WebView класс https://developer.android.com/guide/webapps нужно будет научиться добавлять поля с текстом, научиться давать этим полям ширину, например 95% от экрана, и задавать разный отступ репликам игрока например вправо, репликам собеседника влево. С треугольником, указывающим на сторону говорящего - для начала рекомендую забить, красивый элемент который необязателен, но сожрёт кучу времени. Лучше пилить в последнюю очередь. Все сообщения будут бесконечно добавляться снизу и игрок всегда сможет проследить всю историю переписки. В WebView, который основан на HTML, это сделать будет относительно просто.
    Хочу отметить, что для стартового проекта Вы выбрали относительно простую и интересную идею, что уже половина успеха. Советую реализовать в такой минимальной конфигурации и любые усложнения делать уже после того, как эта версия будет готова (например, идея для усложнения: игрок может переключаться между чатами с несколькими героями). Если опыта в программировании мало - предельно упрощайте механики и держите в узде фантазию. А то рискуете бросить проект не закончив. Расчитывайте, что для среднего человека без опыта программирования Ваша идея может занять около недели работы с утра до вечера. Без учёта дерева вопросов-ответов. Удачи!
    Ответ написан
    Комментировать
  • Как перевернуть рандомный массив в СИ?

    myjcom
    @myjcom
    Из того в чем вопрос и что написано непонятно что вы хотите.

    если у вас 2 массива просто скопируйте один в другой в обратном порядке.

    если у вас один массив то можно написать функцию reverse(first, last) и свопнуть элементы.

    в обоих случаях один цикл.

    Code
    #include <stdio.h>
    #include <stdlib.h>
    
    void swap(int* a, int* b)
    {
        int c = *a;
        *a = *b;
        *b = c;
    }
    
    void reverse(int* first, int* last)
    {
        while((first != last) && (first != --last))
        {
            swap(first++, last);
        }
    }
    
    int* reverse_copy(int* first, int size)
    {
        int* result = (int*)malloc(size * sizeof(int));
        for(int i = 0; i < size; ++i)
        {
            result[i] = first[size - i - 1];
        }
        return result;
    }
    
    int main()
    {
        int a[] = {0,1,2,3,4,5,6,7,8,9};
        reverse(a, &a[10]);
        for(int i = 0; i < 10; ++i)
        {
            printf("%d ", a[i]);
        }
    
        printf("\n");
    
        int* b = reverse_copy(a, 10);
    
        for(int i = 0; i < 10; ++i)
        {
            printf("%d ", b[i]);
        }
        free(b);
    }

    OUT:
    9 8 7 6 5 4 3 2 1 0
    0 1 2 3 4 5 6 7 8 9

    Ответ написан
    Комментировать
  • Что почитать по C для ознакомления?

    @Hydro
    C#/.NET Developer
    Керниган, Ритчи, Язык программирования СИ.
    Свой путь в программировании я начал с этой книги.
    Ответ написан
    Комментировать
  • О чем можно написать в дипломе, если я использую в программе метод Кларка-Райта?

    @SilentFl
    Добавьте главу с практическим применением в какой-нибудь компании. Просто найти какую-нить оптово-розничную фирмочку, и предложить ей посчитать вашим алгоритмом маршруты. Даже если дальше "просто посчитали" дело не пойдет, то все равно можно будет приложить к диплому еще и бумажку с отзывом этой компании, на защите диплома такие отзывы очень ценятся
    Ответ написан
    Комментировать