1. C++ / Говнокод #28148

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    // Ручной режим
        if (!botMode) {
            cout << "Manual mode activated\n";
            Sleep(1000);
    
            while (1) {                                             // Основной цикл
    
                MAP = modMap(pos, MAP, PVM);
                auto moveField =  moveMapField(MAP);
                auto TVM = waveViewCheck(pos, MAP);                 // Вызов функции проверки видимости элементов
                PVM = refreshMap(PVM, TVM);
    
                system("cls");                                      // Очистка поля с каждой итерацией
                coutMAP(pos, MAP);                                  // Вывод всей карты
                cout << endl;
                coutMAP(pos, PVM);                                  // Вывод видимой карты
    
                if (MAP[pos.y][pos.x] == END) {
                    cout << endl << "Level Complete!\n";
                    Sleep(3000);
                    return 0;
                }
    
                int k = getch();
                if (k == 113 || k == 81) break;                     // Press Q - exit
                if (k == 224) k = getch();
                switch (k) {                                // Перемещение стрелочками
                    case 72:                                // Вверх
                        if ((moveField[pos.y-1][pos.x] == BLANK || (moveField[pos.y-1][pos.x] > 0 && MAP[pos.y-1][pos.x] % 2 == 1)) && pos.y > 0) {
                            pos.y -= 1;
                        }
                        break;
                    case 75:                                // Влево
                        if ((moveField[pos.y][pos.x-1] != WALL || (moveField[pos.y][pos.x-1] > 0 && MAP[pos.y][pos.x-1] % 2 == 1)) && pos.y > 0) {
                            pos.x -= 1;
                        }
                        break;
                    case 77:                                // Вправо
                        if ((moveField[pos.y][pos.x+1] != WALL || (moveField[pos.y][pos.x+1] > 0 && MAP[pos.y][pos.x+1] % 2 == 1)) && pos.y > 0) {
                            pos.x += 1;
                        }
                        break;
                    case 80:                                // Вниз
                        if ((moveField[pos.y+1][pos.x] != WALL || (moveField[pos.y+1][pos.x] > 0 && MAP[pos.y+1][pos.x] % 2 == 1)) && pos.y > 0) {
                            pos.y += 1;
                        }
                        break;
                }
            }
        }

    Запостил: kcalbCube, 01 Мая 2022

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

    • Чувак, от тебя пахнет дерьмohм
      !
      Ответить
    • > system("cls"); // Очистка поля с каждой итерацией
      скучно, девочки
      Ответить
    • > рисует поле
      > cout

      Дальше не читал.
      ncurses/pdcurses хотя бы возьми.
      Ответить
      • этоже пинда
        Ответить
        • pdcurses под винду работают.
          для ncurses вроде тоже порт есть.
          Ответить
          • ncurses врядли, бо win32 консоль отличается зело от терминалов, а pdcurses таки да
            Ответить
            • Можно взять какую-нибудь другую консоль
              Ответить
              • В пинду вроде пытаются завезти нормальный терминал, который будет уметь в ANSI на уровне хотя бы xterm, но сама виндоконсоль управлется совершенно иным API
                Ответить
            • ЕМНИП ncurses можно собрать в mingw. Там вроде то ли свой терминал используется, то ли виртуальный терминал, из которого содержимое перекидывается в виндовый.
              Ну и под сигвином вроде запускается.
              Ответить
              • Какая-то это анальная клоунада
                Зачем? Чтобы сделать кросс-платформенную консольную игрушку?
                Ответить
                • Обычно — если хочется поиграть в коконсольную игрушку под прыщи на винде.
                  Cataclysm к примеру оригинально не работал под винду, потому что Whales — линуксоид и пользовался ncurses.
                  Ответить
      • вас только это смутило?
        Ответить
        • До третьей строчки вроде ничего особо криминального не было.
          Ответить
          • меня больше поразили символы цифрами
            Ответить
            • Возможно, когда-то обжёгся на разнице кодовых страниц в исходнике и консоли с кириллицей, и теперь боится всего. С 224 тоже понятно, это первый символ пары, которая генерируется для стрелок.

              У меня вопрос, почему вверх можно ходить только на пустое место, а во все остальные — лишь бы не в стену?
              Ответить
              • потому что к богу?
                Ответить
              • chcp же
                Ответить
              • UP......H
                LEFT....K
                RIGHT...M
                DOWN....R
                
                REDEFINE KEYS (Y/N)


                А еще pos.y > 0 везде.
                Ответить
                • В данном случае 72 это не H, а вторая половина пары байт генерируемая для нажатия стрелки (у getch многие клавиши кодируются несколькими байтами. Если ты получил специальный первый байт, нужно прочесть второй и разбираться с ним). Кстати, данный код не работает со стрелками на нумпаде.
                  Ответить
                  • Только не Геть-Ч, а ЭВМ-Пека.
                    Ответить
                    • Если быть ещё конкретнее, то прослойка которая превращает сканкоды пришедшие от USB девайса (ну не PS/2 же у него) в говно мамонта.
                      Ответить
                      • > PS/2
                        Почему нет? Этот интерфейс еще не мертв. А синаптики всякие вообще считают, что самое то
                        Ответить
                  • а почему такие? сделали бы как в виме маппинг..
                    Ответить
                  • printf("Нажмите любую клавишу (кроме стрелок и т.п.)\n");
                    getch();
                    Ответить
    • Пиздец.
      Ответить

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