Кресты / Говнокод #28148 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 kcalbCube, (Updated )

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

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

            У меня вопрос, почему вверх можно ходить только на пустое место, а во все остальные — лишь бы не в стену?
            Ответить
              • В данном случае 72 это не H, а вторая половина пары байт генерируемая для нажатия стрелки (у getch многие клавиши кодируются несколькими байтами. Если ты получил специальный первый байт, нужно прочесть второй и разбираться с ним). Кстати, данный код не работает со стрелками на нумпаде.
                Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8