Суббота, 16 Ноября 2024, 22:36

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
GudleifrДата: Воскресенье, 27 Декабря 2015, 13:53 | Сообщение # 901 | Тема: Есть ли смысл создавать "большие" игры?
почти ветеран
Сейчас нет на сайте
Еще ВНЕЗАПНЕЕ...
И, насколько понимаю, собственно, ВОТ.
Что сказать? Что начинать надо не с перечисления тех трех гаек, что завалялись в кармане, а с объяснения, почему автор не может игры не делать...
Я, конечно, излишне ностальгирую по тем временам, когда игры не выходили за пределы двора (разве что, в мемуарах), но даже учитывая это. как-то неуютно жить в мире, где каждый чувствует себя вправе клянчить на улице копеечку за то, что он, в принципе, наверное, может сделать не хуже других, если, конечно вы ему сначала эту копеечку дадите...


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.

Сообщение отредактировал Gudleifr - Воскресенье, 27 Декабря 2015, 14:43
GudleifrДата: Воскресенье, 27 Декабря 2015, 00:41 | Сообщение # 902 | Тема: Есть ли смысл создавать "большие" игры?
почти ветеран
Сейчас нет на сайте
Цитата RigVix ()
в данной теме обсуждается другой вопрос
Ну, тогда, точно - только мелочевка.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Суббота, 26 Декабря 2015, 23:25 | Сообщение # 903 | Тема: Есть ли смысл создавать "большие" игры?
почти ветеран
Сейчас нет на сайте
RigVix, дело в том, что большинство присутствующих идет по пути "такой же, но с перламутровыми пуговицами". Т.е. берется какой-то красивый проект и к нему прицепляется некая фича (обычно из другого проекта, но, иногда, и придуманная самостоятельно). Т.е. задача сводится к поиску "наибольшего общего делителя" - точки "неполной разборки" обоих проектов, на которой можно остановить копание в программировании и спокойно прицепить одно к другому. Желание же "чего-то большого" требует гораздо более глубокого погружения. Настолько глубокого, что не захочется выныривать.

Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Суббота, 26 Декабря 2015, 13:49 | Сообщение # 904 | Тема: Набираю команду для создания игры
почти ветеран
Сейчас нет на сайте
В таких случаях всегда хочется посоветовать одно. Создайте простенький сайт (не группу, не блог, не репозиторий и не тему на чужом форуме). Выложите там демо - cgi, gif, flash... Разбавьте текстами по и около темы... Глядишь, люди и потянутся.

Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.

Сообщение отредактировал Gudleifr - Суббота, 26 Декабря 2015, 13:58
GudleifrДата: Четверг, 24 Декабря 2015, 17:44 | Сообщение # 905 | Тема: Вывод дерева
почти ветеран
Сейчас нет на сайте
Daeloce, оказывается, я был практически первопроходцем, т.к. использовал этот метод для построения платоновых тел в те самые 80-е... Однако, думаю, к теме эти вкусности отношения не имеют.

Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Четверг, 24 Декабря 2015, 17:16 | Сообщение # 906 | Тема: Вывод дерева
почти ветеран
Сейчас нет на сайте
Для тех, кто на бронепоезе, поясню:
1. Решение задачи. Нужно выяснить в каком порядке (прямом, обратном, внутреннем) нужно перебирать дерево.
2. Программирование. Как для перебора применить рекурсивные ф-ии? В начале или конце рекурсивного шага осуществлять вывод? Каковы параметры могут потребоваться рекурсифной ф-ии?
3. Требования ОС. Если хочется по-виндосовски (Пуск-Проводник-Папки), нужно найти, какой класс вашего обезьянника инкапсулирует функционал класса WinAPI TreeVieW. Иначе (обычно) табуляция и псевдографика. Можно также с минимальными j-скриптами сделать красивое выпадающее дерево в HTML (вместо вывода на консоль).
Так понятнее?


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Четверг, 24 Декабря 2015, 15:14 | Сообщение # 907 | Тема: Вывод дерева
почти ветеран
Сейчас нет на сайте
Пуск - Проводник - Папки

Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Среда, 23 Декабря 2015, 18:45 | Сообщение # 908 | Тема: Практикуете ли вы смешение С и С++?
почти ветеран
Сейчас нет на сайте
Storm54, цитируйте аккуратнее, а то я чуть не просмотрел Ваше замечание.

Есть три Unix- и один Forth-способ написать свой язык. Насколько они трудны? Судите сами:

1. Если язык служит чисто служебной цели, как в примере выше, то его очень просто реализовать на любом языке. Развитием этого метода служат языки C++ и Python, но они ущербны. На C++ невозможно написать ничего кроме C++, а на Python написать что-то сложное просто проблемно.

2. Если язык достаточно прост, но требует развитых интерфейсов, то его можно реализовать просто средствами Unix-скриптования. shell, sed, awk... Например, можно написать Perl-обработчик команд и засунуть его в Tcl/Tk-оболочку. Так можно лепить достаточно сложные продукты:


Подробнее см. там. Я там предлагаю даже более простой набор (Perl+HTML).

3. Если язык сложен, но Unix предлагает спарку lex + yacc и их последлвателей. Компиляторы компиляторов. На входе - грамматика, на выходе - готовый компилятор. Минус, как в C++ - требование полноценной НИОКР по проходу "сверху вниз", как однажды написанную сложную иерархию классов фиг подправишь, так и грамматику "чуть-чуть" не улучшишь.

4. Наконец, FORTH. Ядро языка пригодное для развертывания вашего языка пишется на коленке за две недели. Затем вы строите свои лексиконы строго по вашему решению задачи, перекладывая свои мысли в программу один-в-один. Минусы? FORTH-программы пишутся очень быстро и очень компактны, но это касается только исходных текстов. Готовые программы не такие уж и быстрые и маленькие.

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

Большой кусок, возможно войдет в "заметки", неоконченный


Цитата Storm54 ()
У Вас есть опыт коммерческой разработки или хотя бы опыт работы в команде?
Уже отечал: да и да.
Но, кстати, раз уж вспомнил Дейкстру:
Цитата
Наконец, эта задача позволяет нам рассеять некоторые сомнения, вызванные тем, что коммерческие программы являются чем-то особенным. (Если уж говорить о чем-то особом, то, скорее, о характере коммерческих программистов...)


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.

Сообщение отредактировал Gudleifr - Среда, 23 Декабря 2015, 19:08
GudleifrДата: Среда, 23 Декабря 2015, 00:54 | Сообщение # 909 | Тема: Практикуете ли вы смешение С и С++?
почти ветеран
Сейчас нет на сайте
Цитата Saitei ()
Но могли бы вы показать пример своего ООП кода?
Я обычно использую не ООП, а метод проблемно-ориентированного языка. Т.е. не строю иерархию объектов, а изобретаю язык, на котором задача описывается естественно, а затем его реализую. Например, простенькая библиотека переупаковки байтовых полей выглядит у меня так:
Код
#include "all.h"

/*
    Описание формата:
    <формат> ::= <массив> | <формат> [ "." ] <массив> ;
  -- следующие в памяти друг за другом фрагменты
  -- точка только для читабельности
    <массив> ::= <блок> | "(" <формат> ")" <блок> ] ;
  -- повторяющиеся фрагменты
    <блок> ::= [ <счетчик> ] [ <направление> ] ;
  -- простые блоки
    <счетчик> ::= NUM | "N" ;
  -- NUM байт (или повторов предыдущего блока),
  -- N - "до конца строки" (по умолчанию)
    <направление> ::= "D" | "B"
  -- в прямом (D, по умолчанию) или обратном (B) порядке
    Порядок:
  "естественным" порядком считается порядок, при котором самый правый
  бит - самый значащий (внутри байтов он поддерживается автоматически,
  при хранении байтов в памяти в виде строки или слова - обратный,
  т.е. естественным считается "B" (он же "NB"));
    Ограничения:
  В случае если лень ставить D, нужно поставить точку между <массивами>;
  NUM - неотрицательное десятичное число.
    Расширения:
  В любом месте можно поставить имя в кавычках (апострофах).
*/

BYTE lexlit[] = {      /* лексемы */
    0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 8, 0, 0, 0, 0, 8,     '(', ')', 0, 0, 0, 0, '.', 0,
    9, 9, 9, 9, 9, 9, 9, 9,     9, 9, 0, 0, 0, 0, 0, 0,
    0, 0, 'B', 0, 'D', 0, 0, 0, 0, 0, 0, 0, 0, 0, 'N', 0,
    0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 'B', 0, 'D', 0, 0, 0, 0, 0, 0, 0, 0, 0, 'N', 0,
    0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,     0, 0, 0, 0, 0, 0, 0, 0
};

int num;
STRING str;

static BYTE get_lex(i)   /* лексический анализатор */
    STRING *i;
{
    num = 0;
    if (lexlit[**i] == 8) {  /* имя в кавычках */
  str = ++(*i);
  while (lexlit[*(*i)++] != 8);
  num = *i - str - 1;
  return 8;
    }    
    if (lexlit[**i] != 9)
  return lexlit[*(*i)++];
    while (lexlit[**i] == 9)    /* число */
  num = num * 10 + *(*i)++ - '0';
    return 9;
}

STRUCT(block) {    /* узел дерева */
    TREE(block)
    STRING name;    /* указатель на имя, хранящееся в формате */
    int ns;  /* длина имени */
    int thr;    /* # текущего прохода */
    int n, d;    /* число подблоков, направление */
    int s;  /* сумма длин подблоков */
    int is;  /* сам или входит в блок с выбранным именем */
    int s_nm;    /* сумма длин подблоков нужного имени */
};

DEL0(block)    /* деструктор узла */
TFREE(block)    /* деструктор дерева */

static add_block(cur)    /* добавить младшего сына */
    pblock *cur;
{
    pblock t;
    t = (*cur)->child;
    if (!t) {
  MALLOC(t, block)
  (*cur)->child = t;
    } else {
  while (!t->next)
   t = t->next;
  MALLOC(t->next, block)
  t = t->next;
    }
    t->dad = *cur;
    *cur = t;
}

static add_next(cur)    /* добавить брата */
    pblock *cur;
{
    pblock t;
    MALLOC(t, block)
    (*cur)->next = t;
    t->dad = (*cur)->dad;
    *cur = t;
}

static get_sum(cur, nm, ns, is)    /* расчет длины подблоков */
    STRING nm;  /* с учетом имени */
    pblock cur;
{
    pblock t;
    if (!is && nm && cur->name && cur->ns == ns
  && !strncmp(nm, cur->name, cur->ns))
  is =1;
    cur->is = is;
    if (t = cur->child)
  while (t) {
   cur->s += get_sum(t, nm, ns, is) * t->n;
   cur->s_nm += t->s_nm * t->n;
   t = t->next;
  }
    else {
  cur->s = 1;
  if (is)
   cur->s_nm = 1;
    }
    return cur->s;
}

static test_tree(cur, t)    /* тестовая выдача дерева блоков */
    pblock cur;
{
    pblock c;
    int i;
    for (i = 0; i < t; i++)
  printf("\t");
    printf("n=%d d=%d s=%d is=%d s_nm=%d",
  cur->n, cur->d, cur->s, cur->is, cur->s_nm);
    if (cur->name) {
  char *s;
  NALLOC(s, cur->name, cur->ns)
  printf("\t\"%s\"", s);
    }
    printf("\n");
    if (c = cur->child)
  test_tree(c, t + 1);
    if (c = cur->next)
  test_tree(c, t);
}

static build(o, cur, n, p, l)    /* генерация таблиы перестановок */
    pblock cur;  /* n - куда, p - откуда */
    int *o;
{
    pblock t;
    int i;
    if (!cur->n)  /* блок до конца строки */
  cur->n = (l - p) / cur->s;
    for (i = 0; i < cur->n; i++)    /* повтор подблоков */
  if (t = cur->child)    /* подблоки */
   build(o, t, n + i * cur->s,
    cur->d ? p + (cur->n - i - 1) * cur->s
     : p + i * cur->s, /* учет порядка */
    p + (i + 1) * cur->s);
  else   /* байты */
   o[n + i] = cur->d ? p + cur->n - i - 1 : p + i;
    n += cur->s * cur->n;
    if (t = cur->next)
  n = build(o, t, n, p + cur->s * cur->n, l);
    return n;
}

static build_nm(o, cur, n, p, l)    /* генерация таблиы перестановок */
    pblock cur;   /* с учетом имени */
    int *o;    /* n - куда, p - откуда */
{
    pblock t;
    int i;
    if (!cur->n)  /* блок до конца строки */
  cur->n = (l - p) / cur->s;
    for (i = 0; i < cur->n; i++)    /* повтор подблоков */
  if (t = cur->child)    /* подблоки */
   build_nm(o, t, n + i * cur->s_nm,
    cur->d ? p + (cur->n - i - 1) * cur->s
     : p + i * cur->s, /* учет порядка */
    p + (i + 1) * cur->s);
  else   /* байты */
   if (cur->is)
    o[n + i] = cur->d ? p + cur->n - i - 1 : p + i;
    n += cur->s_nm * cur->n;
    if (t = cur->next)
  n = build_nm(o, t, n, p + cur->s * cur->n, l);
    return n;
}

static build_n(cur, p, l)    /* пересчет полей  с учетом имени и, */
    pblock cur;  /* возможно (l != 0), длины входа */
{
    pblock t;
    int i, n;
    n = 0;
    if (!cur->is) {
  if (t = cur->child)
   n = build_n(t, p, p + cur->s) * cur->n;
    } else
  n = 1;
    if (l && !cur->n)  /* блок до конца строки */
  n *= (l - p) / cur->s;
    else if (t = cur->next)
  n += build_n(t, p + cur->s_nm * cur->n, l);
    return n;
}

static parser(root, f, l, nm, ns)  /* генерация дерева блоков */
    pblock root;
    BYTE *f;
    STRING nm;   /* с учетом имени */
{
    int c;
    pblock cur;
    cur = root;
    while (c = get_lex(&f)) {    /* взять лексему */
  if (c == '.')  /* принудительно следующий блок */
   add_next(&cur);
  if (c == '(') {  /* повторяющийся блок */
   if (cur->n)    /* следующий блок */
    add_next(&cur);
   add_block(&cur);
  } else if (c == 9) {    /* длина блока в подблоках */
   if (cur->n)    /* следующий блок */
    add_next(&cur);
   cur->n = num;
  } else if (c == 8) {    /* имя блока */
   cur->name = str;
   cur->ns = num;
  } else if (c == 'N') {    /* длина остается 0 */
   if (cur->n)    /* следующий блок */
    add_next(&cur);
  } else if (c == 'B')    /* обратный порядок в блоке */
   cur->d = 1;
     /* 'D' - ничего не делает */
  else if (c == ')')    /* конец блока */
   cur = cur->dad;
    }
    cur = root;
    while (cur) {   /* рассчитать длину подблоков */
  get_sum(cur, nm, ns, 0);
  cur = cur->next;
    }
    /* test_tree(root, 0); */
}

static int *make_o(f, l)  /* создать табоицу перестановки f->"" */
    STRING f;
{
    int *o;
    pblock root;   /* охватывающий блок */
    ALLOC(o, int, l)  /* выделить место под таблицу */
    MALLOC(root, block);
    parser(root, f, l, NULL, 0);    /* построение дерева блоков */
    build(o, root, 0, 0, l);    /* генерация таблицы */
    freeblock(root, 1);  /* удаление дерева */
    return o;
}

static int *make_o_nm(f, l, nm, lo)    /* создать табоицу перестановки f->"" */
    STRING f, nm;   /* с учетом имени */
    int *lo;
{
    int *o;
    pblock root;    /* охватывающий блок */
    ALLOC(o, int, l)   /* выделить место под таблицу */
    MALLOC(root, block);
    parser(root, f, l, nm, strlen(nm));    /* построение дерева блоков */
    *lo = build_nm(o, root, 0, 0, l);    /* генерация таблицы */
    freeblock(root, 1);   /* удаление дерева */
    return o;
}

gswap(fi, fo, ti, to, l)   /* копировать l байтов из ti в to, */
    STRING fi, fo, ti, to;   /* согласно форматов fi и fo */
{
    int i, *oi, *oo;
    oi = make_o(fi, l);   /* перестановочная таблица fi->"" */
    oo = make_o(fo, l);   /* перестановочная таблица fo->"" */
    for (i = 0; i < l; i++)   /* копирование ti->to с перестановкой */
  to[oo[i]] = ti[oi[i]];
}

gget(fi, fo, ti, to, l, nm)   /* вывести в to (согласно fo) все */
    STRING fi, fo, ti, to, nm;  /* значения полей с именем nm из ti */
{      /* (формата fi и длиной l) */
    int i, *oi, *oo, lo;    
    oi = make_o_nm(fi, l, nm, &lo);  /* перестановочная таблица fi->"" */
    if (lo) {    /* имя найдено */
  oo = make_o(fo, lo);  /* перестановочная таблица fo->"" */
  for (i = 0; i < lo; i++)    /* копирование ti->to с перестановкой */
   to[oo[i]] = ti[oi[i]];
    }
    return lo;
}

ggetnum(f, l, nm)    /* выдать количество полей  */
    STRING f, nm;    /* с именем nm из формата f */
{      /* при длине входного текста l */
    int n;
    pblock root;    /* охватывающий блок */
    MALLOC(root, block);
    parser(root, f, l, nm, strlen(nm));    /* построение дерева блоков */
    n = build_n(root, 0, l);  /* пересчет полей */
    freeblock(root, 1);   /* удаление дерева */
    return n;
}

gset(fi, fo, ti, to, l, nm)   /* заместить в ti (формата fi и */
    STRING fi, fo, ti, to, nm;  /* длины l) все поля с именем nm */
{      /* на to (формата fo) */
    int i, *oi, *oo, lo;    
    oi = make_o_nm(fi, l, nm, &lo);  /* перестановочная таблица fi->"" */
    if (lo) {    /* имя найдено */
  oo = make_o(fo, lo);  /* перестановочная таблица fo->"" */
  for (i = 0; i < lo; i++)    /* копирование to->ti с перестановкой */
   ti[oi[i]] = to[oo[i]];
    }
    return lo;
}

pname_list gfields(f)  /* выдергивание имен из формата; */
    STRING f;  /* имена остаются в формате, */
{    /* хранятся только указатели */
    pname_list x;
    int c;
    x = NULL;
    while (c = get_lex(&f))    {/* взять лексему */
  if (c == 8) {    /* имя блока */
   pname_list t;
   MALLOC(t, name_list)
   t->s = str;
   t->ns = num;
   t->next = x;
   x = t;
  }
    }
    return x;
}

BYTE I[900], O[900];

main()
{
    int i, l;
    STRING fi;
    pname_list p;
/*    scanf("%d", &l);
    read_hex(I, l);
    write_hex(I + 72 + 36, 32);
    printf("\n");
*/    fi = "'C_UZ'64.4'C_UZ_IMIT'4'IM_UZ'(32'C_LMK'.4'C_LMK_IMIT')20.4'C_FSG'.4'C_FSG_IMIT'";
/*    l = gget(fi, "", I, O, l, "C_LMK_IMIT");
    write_hex(O, l);
    printf("\n");
    p = gfields(fi);
*/    printf("%d\n", ggetnum(fi, 828, "C_LMK_IMIT"));
}

Можно видеть, что я нигде не ставлю проверок допустимости параметров. Это основное правило обеспечения работоспособности кода. Умные данные - это самый верный способ оставить в коде дыру. Пусть код валится как можно чаще и пусть все ошибки будут видны на верхнем уровне - тогда будет шанс их обнаружить.
***
Наиболее удобный этап выйти на удобный проблемно ориентированный язык - перед началом планирования в обычном блокноте попытаться нарисовать программу как некую Incredible Machine (в крайнем случае - панель прибора/план завода, который вы будете эмулировать/асучивать). Например (художник я еще тот, проект):



Или текстом см. там.
***
Если модель не удается проработать на бумаге, то получается срашненько.
Например, как в Лунолете.
***
Но, конечно, этот метод лучше всего работает в языке FORTH.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.

Сообщение отредактировал Gudleifr - Четверг, 24 Декабря 2015, 15:10
GudleifrДата: Вторник, 22 Декабря 2015, 18:04 | Сообщение # 910 | Тема: Реиграбельность ВН
почти ветеран
Сейчас нет на сайте
Цитата Hitguy ()
Да, первым же своим постом в теме.
Ну, как бы, первый Ваш пост при не мог иметь никакого отношения ко мне физически, я появился в теме позже. Так что думаю хватит обращать в этой теме внимание на Вашу брехню.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Вторник, 22 Декабря 2015, 17:55 | Сообщение # 911 | Тема: Реиграбельность ВН
почти ветеран
Сейчас нет на сайте
Цитата YellowAfterlife ()
Можно было бы несколько улучшить ситуацию, дав игроку возможность совершать какие-то действия для снижения\устранения шансов внезапной гибели.
Это, безусловно, правильно. Только, желательно, повесить на это какую-то "мораль". Например, игрок научается выбирать наиболее безопасный выход, получая смутные намеки. Я это называю головоломками "третьего рода" (по Стругацким):
1. если способв распознавания головоломок ясен еще до игры, это «спинномозговик» (1 уровень);
2. если правильную стратегию игрок вырабатывает в процессе игры, это уровень 2;
3. если стратегию надо изменять в течение игры, это уровень 3.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Вторник, 22 Декабря 2015, 17:33 | Сообщение # 912 | Тема: Реиграбельность ВН
почти ветеран
Сейчас нет на сайте
А рогалики не РПГ?
Цитата Hitguy ()
где здесь вариация при убийстве барлога не получить правильную концовку?
А почему кубик обязательно бросать в самом конце? Барлог может вас замочить даже если вы действовали правильно. Можно даже до него не дойти...
Кстати, в одном из первых расширений настольного TALISMAN практически в самом конце - получение Короны Власти - добавили случайный выбор вариантов, один из которых - сдохнуть.

Похоже, Вы уже давно слили.

Добавлено (22 декабря 2015, 17:33)
---------------------------------------------

Цитата Hitguy ()
А вот это действительно чистый флуд, никакого отношение к играм с предусмотренным сюжетом решениями и поведением
Вы думаете военные игры ограничиваются FPS и RTS? Классическая военная игра в буквальном значении этого слова подразумевает продуманный сюжет.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Вторник, 22 Декабря 2015, 17:14 | Сообщение # 913 | Тема: Реиграбельность ВН
почти ветеран
Сейчас нет на сайте
Hitguy, а чем Вас не устроило предложенное выше? Вы видели мало РПГ с развитой боевкой? Начнем с азов. Раз Rogue поминали, берем следующую - AKALABETH. Из приведенного кода видно, сдохнуть можно при любом поведении.

Добавлено (22 декабря 2015, 17:14)
---------------------------------------------
С точки зрения реализма...
Например, рассмотрим, какова специфика военных решений (по книге А.В.Маркина "Основы тактической подготовки современного солдата"):
1. Неопределенность обстановки.
2. Слабая корреляция правильности действий с положительностью результата.
3. Страх ответственности.
4. Отсутствие времени на обдумывание.
5. Неясность цели действий.
Т.е. для военных игр прямо-таки рекомендуется.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Вторник, 22 Декабря 2015, 16:37 | Сообщение # 914 | Тема: Реиграбельность ВН
почти ветеран
Сейчас нет на сайте
Цитата Hitguy ()
Беру, к примеру Фалллаут.
наличие одной (да даже миллиона) удовлетворяющей Вашим запросам игры, не доказывает отсутствия игр, где описанный прием с успехом используется. Так что, правильно, кончайте флуд о непонятой мечты безрукого ботана всегда "победять"...


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Вторник, 22 Декабря 2015, 16:32 | Сообщение # 915 | Тема: Практикуете ли вы смешение С и С++?
почти ветеран
Сейчас нет на сайте
OpenGOO, вы почти правы, за исключением:
Цитата OpenGOO ()
C генерирует высокопроизводительный машинный код
Он, по сути, вообще не генерирует код, т.к. является, по сути, просто макроассемблером. Что пишу - то и получаю.
Цитата OpenGOO ()
C ... не поддерживает ООП
Не поддерживает ООП в стиле C++. Никто не мешает использовать методы ООП в C, или иметь доступ к ОО-библиотекам.
Цитата OpenGOO ()
С++ генерирует высокопроизводительный машинный код
Только, если не пользоваться дурацкими библиотеками (типа STL, табличку я приводил), не провоцировать компилятор на создание избыточных конструкторов и отказаться от умных указателей и прочего мусора.
Цитата OpenGOO ()
С++ ... поддерживает ООП.
В стиле C++? к нормальному ООП отношения не имеющему.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Вторник, 22 Декабря 2015, 15:54 | Сообщение # 916 | Тема: Реиграбельность ВН
почти ветеран
Сейчас нет на сайте
Hitguy, так бы сразы и сказали... Берите любую РПГ-игру с развитой боевкой. Ситуация безвозвратной потери армии при "неудачных кубах" вполне вероятна. Или возьмите, например, KING'S BOUNTY. Упоминавшиеся выше рогалики. Любую игру, где возможен проигрыш "по очкам".

Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Вторник, 22 Декабря 2015, 15:37 | Сообщение # 917 | Тема: Реиграбельность ВН
почти ветеран
Сейчас нет на сайте
Hitguy, извините, но все мои примеры приведены вместе с утверждениями об их применимости. В отличие от Ваших.

Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Вторник, 22 Декабря 2015, 15:32 | Сообщение # 918 | Тема: Конвертирование вектора (списока) в строку.
почти ветеран
Сейчас нет на сайте
Цитата Daeloce ()
А это скорее вообще не ++, а Си.
Как и почти все, что работает. Посмотрите, например ядро Linux.
Цитата Daeloce ()
для которого "прятанье" данные является одним из основополагающих аспектов
Смотрите не "C++ для чайников", а нормальную ООП-литературу, тех же японцев.
Цитата Daeloce ()
Maps are typically implemented as binary search trees.
Значит, налажали. См. таблицу.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Вторник, 22 Декабря 2015, 15:09 | Сообщение # 919 | Тема: Конвертирование вектора (списока) в строку.
почти ветеран
Сейчас нет на сайте
Цитата Daeloce ()
Соответственно прошу примеры проектов/книги авторов, которые бы доказывали ваше утверждение.

Цитата Daeloce ()
На работе, где в основном пишу HPC вещи, плюсы в использую в режиме "Си с классами", ибо там голые массивы, да еще и руками выровненные под кэш и т.п. суровая необходимость, так что в ООП не развернешься.
Как бы, вот.
Цитата Daeloce ()
Ну например бинарные деревья, это map.
Таблица расстановки, если только в STL не налажали. Но не суть,
Цитата Daeloce ()
ибо область применения подобных алгоритмов крайне специфична
Отложим разговор лет на 10-20.
Цитата Daeloce ()
И снова я возвращаюсь к вопросу, вы вообще в курсе что такое ООП?
Надоели. Простите за хамство, но, в отличие от Вас, понимаю.
Разница между нашими пониманиями:


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
GudleifrДата: Вторник, 22 Декабря 2015, 14:41 | Сообщение # 920 | Тема: Конвертирование вектора (списока) в строку.
почти ветеран
Сейчас нет на сайте
Daeloce, речь не о том, как писать на C++ "правильно", а о том, что писать на нем иначе невозможно ("классический" способ не работает, способ "чтобы было" слишком затратен). Конечно грубо утверждать, что Вы "смотрели в книгу, а видели фигу", но, думаю, этого, к счастью, и не требуется. Еще надцать лет попишете (как сейчас) код, к которому нельзя по очевидным причинам прицепить ООП, и сами по другому посмотрите на "красивый код общепринятых классиков".

P.S. Почему я обзываю STL "быдлокодом"? По причине его убожества. Например, каждый человек, сталкивавшийся с большими объемами данных, помнит табличку:

И какой процент этого покрывает STL? А, ведь, "чистые" типы данных встречаются крайне редко.
Так что, STL просто "защищает" пользователя от данных вместо того, чтобы получить к ним доступ в нужной для него форме.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.

Сообщение отредактировал Gudleifr - Вторник, 22 Декабря 2015, 14:42
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг