Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 18.03.2018
Сообщений: 61
1

Прорисовка консоли С++

06.12.2018, 00:00. Показов 6132. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня имеется небольшая игра, где требуется рисовать карту, монстров, сундуки и прочее, при этом приходится каждый раз чистить всю консоль с помощью system("cls") и рисовать все заново. Из-за этого получается раздражающее мигание. Как его убрать, желательно, самым простым способом?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2018, 00:00
Ответы с готовыми решениями:

Медленная прорисовка/отрисовка консоли
Доброго времени суток. Я - начинающий программист на С++ , пишу консольный игровой движок на С++ +...

Отобразить в консоли:увеличить и уменьшить длину массива на заданное ранее из консоли число
Доброго дня суток, исходный код и задача есть Подскажите пж, не получается реализовать некоторые...

Как запустить программу из консоли без блокировки консоли?
Вводу например firefox в консоль открывается приложение и в консоль больше ничего ввести нельзя...

Вызов консоли для другой вкладки из консоли js
Всем привет! Пишу скрипт для авто нажатия определенных элементов на сайте в определенной...

3
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
06.12.2018, 00:06 2
Лучший ответ Сообщение было отмечено GavNoKoder как решение

Решение

SetConsoleCursorPosition + перерисовка только изменившихся частей.
1
0 / 0 / 0
Регистрация: 18.03.2018
Сообщений: 61
06.12.2018, 18:22  [ТС] 3
Вот есть код, который создает карту. Дальше в main мы чистим консоль и вызываем заново создание карты и так до бесконечности. Можно с примером, пожалуйста:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (int i = 0; i < 22; i++){
    cout << "#";
}
for (int y = 0; y < 20; y++){
    cout << "\n#";
for (int x = 0; x < 20; x++){
    if (mapp[y][x] == "") mapp[y][x] = " ";
    cout << mapp[y][x];
}
    cout << "#";
}
cout << endl;
for (int i = 0; i < 22; i++){
    cout << "#";
}
0
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
06.12.2018, 18:53 4
Пожалуйста, пример. Рамка рисуется только в самом начале, перерисовывать ее нет необходимости. В цикле перерисовывается только поле. В качестве примера здесь выводится фигура X, состоящая из цифр от 0 до 9.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <Windows.h>
using namespace std;
 
void draw_border(unsigned w, unsigned h, char fill) {
    for (unsigned i = 0; i < w + 2; i++) {
        cout << fill;
    }
    cout << endl;
 
    for (unsigned i = 0; i < h; i++) {
        cout << fill;
        for (unsigned j = 0; j < w; j++) {
            cout << ' ';
        }
        cout << fill << endl;
    }
 
    for (unsigned i = 0; i < w + 2; i++) {
        cout << fill;
    }
    cout << endl;
}
 
void draw_map(char **map, unsigned w, unsigned h) {
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    
    for (unsigned i = 0; i < h; i++) {
        SetConsoleCursorPosition(hConsole, {1, (SHORT)(i + 1)});
        for (unsigned j = 0; j < w; j++) {
            cout << map[i][j];
        }
    }
 
    SetConsoleCursorPosition(hConsole, { 0, (SHORT)(h + 2) });
}
 
int main() {
    const unsigned WIDTH = 20;
    const unsigned HEIGHT = 20;
 
    char **map = new char*[HEIGHT];
    for (unsigned i = 0; i < HEIGHT; i++) {
        map[i] = new char[WIDTH];
        for (unsigned j = 0; j < WIDTH; j++) {
            map[i][j] = ' ';
        }
    }
 
    draw_border(WIDTH, HEIGHT, '#');
    draw_map(map, WIDTH, HEIGHT);
 
    // Этот пример с выводом числа работает только для квадратного поля!
    for (unsigned i = 0; i < 10; i++) {
        for (unsigned j = 0; j < WIDTH; j++) {
            map[j][j] = '0' + i;
            map[j][WIDTH - j - 1] = '0' + i;
        }
        draw_map(map, WIDTH, HEIGHT);
        Sleep(1000);
    }
    
    for (unsigned i = 0; i < HEIGHT; i++) {
        delete[] map[i];
    }
    delete[] map;
 
    system("pause");
    return 0;
}
0
06.12.2018, 18:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2018, 18:53
Помогаю со студенческими работами здесь

Клавиши F1-F12 в консоли, и работа с мышкой в консоли
Я искал на сайте, но не нашел упоминания о том как обрабатывать и или узнавать где находится курсор...

Возможно ли, работая в консоли хрома, сохранять информацию, помимо логов консоли (console.log), куда-нибудь ещё?
Всем, привет :) Подскажите пожалуйста, возможно ли на js, работая в консоли хрома, сохранять...

Прорисовка
есть такая функцияф в делфи Application.ProcessMessages Подскажите аналог в шарпе.

Прорисовка полигона
Здравствуйте! Я хочу нарисовать полигон некоторой толщины, а потом залить его. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru