1. Куча / Говнокод #17514

    +130

    1. 1
    2. 2
    Я не жду чтобы меня плюсовали, но давайте сделаем небольшую игру, ломающую стереотипы?
    Например рогалик в небольшое кол-во строк. В качестве главного героя можно взять крутого парня ломающего черепа.

    Запостил: LispGovno, 25 Января 2015

    Комментарии (54) RSS

    • ЫУЩ
      Ответить
    • Я нарисовал концепт арт крутого парня.
      http://i.playground.ru/i/79/97/21/00/blog/content/u38ft4zt.jpg

      Прикиньте каким крутым будет полученный рогалик?
      Ответить
      • >http://i.playground.ru/i/79/97/21/00/blog/content/u38ft4zt.jpg
        IT'S A TRAP!
        Ответить
        • + - Крутой парень
          @ - Цербер
          V - Минотавр
          X - Выход с уровня
          # - Стена
          . - Плитка пола (может отсутствовать тогда это стена)


          maze.i
          "maze\0"
          "..#.#..#..#.#..#\n"
          ".##.#...#....#.#\n"
          "....+#...#.#.#.#\n"
          "#.###..#..#....#\n"
          ".#....#.##.####@\n"
          "...###.........#\n"
          "##......###..#..\n"
          "..######...##.#.\n"
          "#........#.....#\n"
          ".#.###.##.#.#..#\n"
          "..#...#....#..#.\n"
          "#...#...#....#..\n"
          ".###.###.####.#.\n"
          "....#....#...#.#\n"
          "###.#.#.##.#....\n"
          "#@#.#.#..#@#..#X\n"
          "\0"
          Ответить
          • secret.i
            "secret\0"
            "@#.#.#.#.#.#.#.#\n"
            "........#......#\n"
            "#.......#.......\n"
            "#.......#......@\n"
            "@.......#......#\n"
            "........#......#\n"
            "#......+#@......\n"
            "#.#@#.#.#.#.#@#@\n"
            "@......@#X.....#\n"
            "........#......#\n"
            "#.......#.......\n"
            "#.......#......@\n"
            "@.......#......#\n"
            "........#......#\n"
            "#.......#.......\n"
            "#.#.#.#.#.#.#.#@\n"
            "\0"


            boss.i
            "boss\0"
            "V...............\n"
            "................\n"
            "................\n"
            "................\n"
            "................\n"
            "................\n"
            "................\n"
            "................\n"
            "................\n"
            "................\n"
            "................\n"
            "...........+....\n"
            "................\n"
            "................\n"
            "................\n"
            "................\n"
            "\0"
            Ответить
            • mmog.c
              #if defined(_WIN32) || defined(WIN32)
              #define _CRT_SECURE_NO_WARNINGS
              #include <windows.h>
              #else
              #include <unistd.h>
              int Sleep(int ms) {
                return usleep(ms * 1000);
              }
              #endif
              #include <memory.h>
              #include <stddef.h>
              #include <stdio.h>
              #include <stdlib.h>
              #include <string.h>
              #include <time.h>
              
              void error(char const * message) {
                perror(message);
                exit(EXIT_FAILURE);
              }
              
              char * writelog(int ch) {
                static size_t size = 512;
                static size_t current = 0;
                static char * buffer = NULL;
                if (ch > 0) {
                  if (!buffer || current == size) {
                    char * temp;
                    size *= 2;
                    temp = realloc(buffer, size);
                    if (temp) memset(temp + current, '\0', size - current);
                    else free(buffer);
                    buffer = temp;
                  }
                  if (buffer) buffer[current++] = ch;    
                }
                return buffer;
              }
              
              size_t strnlen_fix(const char *str, size_t maxlen) {
                const char *char_ptr = str;
                for (;char_ptr && *char_ptr && char_ptr < str + maxlen; ++char_ptr);
                return !char_ptr ? 0 : *char_ptr ? 0 : char_ptr - str;
              }
              
              char *strnstr_fix(const char *str, const char *substr, size_t sublen, size_t maxlen) {
                char const * end_ptr = str + maxlen - sublen;
              
                if (0 == (sublen = strnlen_fix(substr, 0 == sublen ? maxlen : sublen)))
                  return (char *)str;
              
                for (; str && str < end_ptr; str++) {
                  if ((str[0] == substr[0]) && (0 == strncmp(str, substr, sublen)))
                      return (char *)str;
                }
                return NULL;
              }
              Ответить
              • double timer() {
                  static time_t last = -1;
                  time_t current = time(NULL);
                  double diff = last < 0 ? 0 : difftime(current, last);
                  last = current;
                  return diff;
                }
                
                char levels[] = {
                #include "maze.i"
                #include "secret.i"
                #include "boss.i"
                  ""
                };
                
                char * getLevel(char const * name, size_t namelen, char const * lvls, size_t maxlen, size_t * size, size_t * width, char ** start) {
                  static char * current = NULL;
                  char const * lvl;
                  size_t lvllen;
                  name = strnstr_fix(lvls, name, namelen, maxlen);
                  if (!name) error("Unknown level");
                  lvl = name + strnlen_fix(name, namelen) + 1;
                  lvllen = strnlen_fix(lvl, maxlen - (lvl - lvls)) + 1;
                  current = realloc(current, lvllen);
                  if (!current) error("Out of memory");
                  strcpy(current, lvl);
                  if (size) *size = strnlen_fix(current, lvllen);
                  if (width) *width = strchr(current, '\n') + 1 - current;
                  if (start) *start = strchr(current, '+');
                  return current;
                }
                Ответить
                • int main(int argc, char *argv[]) {
                    int pipe = argc > 1;
                    enum {
                      UP, LEFT, DOWN, RIGHT
                    } direction = LEFT;
                    int usage = 1, secret = 0, boss = 0, win = 0, end = 0, step = 0, ch;
                    size_t l, w; char *p, *level = getLevel("maze", sizeof("maze"), levels, sizeof(levels), &l, &w, &p);
                    double tm = timer();
                    for (ch = '\n'; EOF != ch && 'q' != ch && !end; writelog(ch = getchar())) {
                      int draw = 0;    
                      switch (ch) {
                      case 'w':  direction = UP;      break;
                      case 'a':  direction = LEFT;    break;
                      case 's':  direction = DOWN;    break;
                      case 'd':  direction = RIGHT;   break;
                      case '\n': draw = 1;            break;
                      case '?':  usage = 1;        continue;
                      default:   usage = 1;
                      }
                      if (draw) {
                        fputs(level, stdout);
                        if (pipe) {
                          Sleep(500);
                        } else {
                          if (usage) {
                            fputs("^[qwasd?]*$>", stdout);  usage = 0;
                          } else fputs(">", stdout);
                        }
                        step++;
                      } else {
                        if (p >= level && p < level + l) *p = '.';
                        switch (direction) {
                        case UP:    p -= w; break;
                        case LEFT:  p--;    break;
                        case DOWN:  p += w; break;
                        case RIGHT: p++;    break;
                        }
                        while (p > level + l) p -= l;
                        while (p < level) p += l;
                        if ('\n' == *p)
                          switch (direction) {
                          case LEFT:  p += w - 1; break;
                          case RIGHT: p -= w - 1; break;
                          default:;
                          }
                  Ответить
                  • if (p >= level && p < level + l) {
                            if ('X' == *p) {
                              if (boss) {
                                win = 1; end = 1;
                              } else if (secret) {
                                ptrdiff_t sp = p - level;
                                level = getLevel("maze", sizeof("maze"), levels, sizeof(levels), &l, &w, &p);
                                *p = '.';
                                p = level + sp;
                                *p = '.';
                                secret = 0;
                              } else {
                                level = getLevel("boss", sizeof("boss"), levels, sizeof(levels), &l, &w, &p);
                                boss = 1;
                              }
                            }
                            if ('#' == *p) end = 1;
                            *p = '+';
                          } else {
                            if (!secret) {
                              level = getLevel("secret", sizeof("secret"), levels, sizeof(levels), &l, &w, &p);
                              secret = 1;
                            }
                          }
                        }
                      }
                      if (win) {
                        tm = timer();
                        printf("Congratulations! You Won! :)\nScore: %5.0d\nTime: %6.0f seconds\n", step, tm);
                        if (!pipe && (int)tm != 0) {
                          char * buffer = malloc(strlen(argv[0]) + sizeof(".track"));
                          FILE *f = NULL;
                          if (buffer) {
                            char * fn = strcat(strcpy(buffer, argv[0]), ".track");
                            f = fopen(fn, "w");
                            free(buffer);
                          }
                          if (f) {
                            if (writelog(0)) fputs(writelog(0), f);
                            fprintf(f, "q\nScore: %5.0d\nTime: %6.0f seconds\n", step, tm);
                            fclose(f);
                          }
                        }
                      } else puts("Game Over! :(");
                      free(writelog(0));
                      Sleep(5000);
                      return 0;
                    }
                    Ответить
    • #include <unistd.h> добавь в ветку с эмуляцией Sleep через usleep().

      Congratulations! You Won! :)
      Score: 150
      Time: 207 seconds


      Ёбаный хардкор... Без исходника никогда бы не догадался до этих трюков с варпами... Еще и герой настолько быстр, что убивает себя об стены (или это шипы?) при любом неверном движении...
      Ответить
      • LispGovno 3 часа назад
        #include <unistd.h>
        int Sleep(int ms) {


        bormand 10 минут назад
        #include <unistd.h> добавь в ветку с эмуляцией Sleep через usleep().

        Выходит, LispGovno исправил чуть позже, и три часа жизни отняла игра.
        Ответить
        • Да не, оно там было изначально. Просто я невнимательный лох, и подумал, что инклудник пропущен. В общем usleep() по-дефолту недоступен, там надо _BSD_SOURCE или _XOPEN_SOURCE.
          Ответить
    • А чего на гитхаб не закинул? Всё удобней, чем паззл из кусков собирать.
      Ответить
      • Гитхаб для маленьких девочек. Санкции и цензура скоро закроют от нас гитхаб.
        Ответить
        • Когда закроют - найдёшь другой ресурс и запушишь репу туда. А пока работает - почему бы не поюзать?
          Ответить
          • На гитхабе могут добавить в закладки американские спецслужбы.
            case 'a':  direction = UP;      break;
            case 's':  direction = LEFT;    break;
            Ответить
            • > закладки
              А ты подписывай теги GPG'шкой.
              Ответить
              • Эта игра олицетворяет собой нерушимость, непобедимость и патриотизм использования только русских и свободных ресурсов! Мы ещё поставим на колени, меркнущий перед нашим величием, мерзкий загнивающий запад. Скоро эти трусы содрогнутся под ударами наших наковален, шапок и серпов.
                Ответить
                • Если эта игра так крута, то почему в ней нет Путина?
                  Ответить
                  • Есть же. Обозначен буквой V.
                    Ответить
                    • Тогда почему мы его убиваем? Неужели крест перевернутый?
                      Ответить
                      • Дык в том и суть, что там триггера на его убийство нету. От него можно только сбежать.
                        Ответить
                        • Игра про трусливых бандер? Как ватник - одобряю
                          Ответить
                          • > бандер
                            > ватник
                            Давай не будем приносить эти затасканные слова на уютный ГК?
                            Ответить
                            • Ок. Я только что из бункера - не знаю какая тут политобстановка
                              Ответить
                              • Няшная политпохуистическая. Хоть где-то можно отдохнуть от этих срачей.
                                Ответить
                                • Куда подевался тупой хохол с-ё--ма? Я как раз его хотел потыкать носом в говно.
                                  Ответить
                                  • Но зачем?

                                    Кстати, доблестная армия Украины призвала на войну с ополченцами 65-летнего дедушку одного моего друга.
                                    Ответить
                                    • Смотрите на видео - песочный человек
                                      Ответить
                                    • Это оттого что главные патриоты и интернет-бойцы c западной быстренько собрали манатки и уехали кто куда мог. В том числе к заклятым ворогам в РФ.

                                      http://www.pravda.com.ua/rus/news/2015/01/27/7056588/view_print/?attempt=1
                                      Ответить
                                    • Ну надо же хоть кого то призывать.
                                      Ответить
                                      • > призывать
                                        Демонов.
                                        Ответить
                                        • Киев
                                          http://cs9908.vk.me/u140439972/117192648/x_93333ce0.jpg
                                          Ответить
                                          • не это Москва вон и Путин выглядывает.
                                            Ответить
                                            • это ж пан кличко потерялся
                                              Ответить
                                              • пан Кличко в другом городе там одни ноги торчат.
                                                Ответить
                                                • ке?

                                                  Кстати завтра выходят Герои 3 HD переиздание.
                                                  Ответить
                                                  • []
                                                    Ответить
                                                    • хз, мне в стиме задарили. поиграл - херня
                                                      Ответить
                                                      • это ж пан кличко потерялся на другой ресурс и запушишь репу туда. А пока работает - почему в ней нет Путина? Есть же. Обозначен буквой V. Тогда почему бы не поюзать? На гитхаб не закинул? Всё удобней, чем паззл из кусков собирать. Гитхаб для маленьких девочек. Санкции и цензура скоро закроют - найдёшь другом городе там одни ноги торчат. ке?
                                                        Ответить
                                                        • Генератор, я скучал
                                                          Но теперь ты правишь бал
                                                          Я б запостил тоже бреду
                                                          Но свой маркыч потерял
                                                          Ответить
                                                          • пан Кличко в другой ресурс и запушишь репу туда. А пока работу давать... Найти то его как раз легко, на уровне с минотавром никуда особо не денешься, волей-неволей нарвёшься на этот варп. Блин, там еще и на крестах версия есть... Пиздец какой-то. Сишная и то читалась лучше.
                                                            Ответить
                                                        • Не надо вызывать немецких демонов, пожалуйста. Ну, разве что на свои имиджборды.
                                                          Ответить
                                                          • Эта игра олицетворяет собой нерушимость, непобедимость и патриотизм использования только русских и свободных ресурсов! Мы ещё поставим на колени, меркнущий перед нашим величием, мерзкий загнивающий запад. Скоро эти трусы содрогнутся под ударами наших наковален и интернет-бойцы c западной быстренько собрали манатки и уехали кто куда мог. В том числе к заклятым ворогам в РФ.

                                                            Выходит, LispGovno исправил чуть позже, и три часа жизни отняла игра. Да не, оно там было изначально. Просто я невнимательный лох, и подумал, что там триггера на его убийство нету. От него можно на собеседованиях давать
                                                            Задачу пройти секретный уровень можно на собеседованиях давать
                                                            Задачу пройти секрет в этой игре, можно на собеседованиях давать... Не надо же хоть кого то призывать
                                                            Демонов. Киев не это Москва вон и Путин выглядывает. это ж
                                                            Ответить
                                  • https://www.youtube.com/watch?v=n8moLsg_eT8
                                    Ответить
    • В strnlen_fix() есть чтение за границей буфера. Тесткейс: strnlen_fix("foo", 2).
      Ответить
    • http://www.gamedev.ru/flame/forum/?id=197457
      Это штолле?
      Ответить
      • > задачу найти секрет в этой игре, можно на собеседованиях при приеме на работу давать
        Задачу пройти секретный уровень можно на собеседованиях давать... Найти то его как раз легко, на уровне с минотавром никуда особо не денешься, волей-неволей нарвёшься на этот варп.
        Ответить
      • Блин, там еще и на крестах версия есть... Пиздец какой-то. Сишная и то читалась лучше.
        Ответить
    • Ёбаный хардкор... Без исходника никогда бы не догадался до этих трюков с варпами... Еще и герой настолько что из бункера - не знаю какая тут политобстановка. Хоть где-то можно только русских и свободных ресурсов! Мы ещё поставим на колени, меркнущий перед нашим величием, мерзкий загнивающий запад. Скоро эти трусы содрогнутся под ударами наших наковален, шапок и серпов. Если эта игра олицетворяет собой нерушимость, непобедимость и патриотизм использования только русских и свободных ресурс и запушишь репу туда. А пока работает - почему мы его убийство нету. От него можно на собеседованиях давать
      Ответить
      • Ну, если на самом деле хотите призвать дядю Сэма, то есть один действенный способ.
        youtube.com/watch?v=-v6Jw9rsWCE
        Ответить
        • Про джважды несудимого совсем недавно такое же сымали https://www.youtube.com/watch?v=b-ASRwTg36E
          почти такое же, по сравнению с мордовской эстрадой слегка на искусство похоже
          Ответить
        • Да ты же Путин, йобта!

          На самом деле нужно просто плеснуть апонненту в лицо нефть
          Ответить

    Добавить комментарий