Форум программистов, компьютерный форум CyberForum.ru

Шлейф из символов в консоли - C++

Восстановить пароль Регистрация
 
shadowstar
1 / 1 / 0
Регистрация: 28.02.2012
Сообщений: 20
01.03.2012, 00:40     Шлейф из символов в консоли #1
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
#include <iostream>
#include <windows.h>
using namespace std;
 
/*void rebuild_snake(COORD *array, int array_count)
{
    for(int i = array_count-1; i >= 1; --i)
        array[i] = array[i-1];
 
}*/
 
void main(){
    HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE); // дескриптор окна
    COORD c; // переменная, отвечающая за координаты в консоли
 
    HANDLE h_in=GetStdHandle(STD_INPUT_HANDLE); // дескриптор окна для работы с мышкой
    SetConsoleMode(h_in,ENABLE_MOUSE_INPUT); // установка режима использования мышки
 
    INPUT_RECORD all_events[256]; // массив событий, произошедших в консоли
    DWORD read_event; // переменная, в которую запишется количество произошедших событий
 
    while(1){
        ReadConsoleInput(h_in,all_events,256,&read_event); // получить все события, произошедшие в консоли
        for(int i=0;i<read_event;i++){ // пройтись по всем событиям
            c.X=all_events[i].Event.MouseEvent.dwMousePosition.X; // запомнить координаты мышки
            c.Y=all_events[i].Event.MouseEvent.dwMousePosition.Y;
 
 
            if(c.X>0 && c.X<80 && c.Y>0 && c.Y<40 &&
                all_events[i].Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED){ // если нажата левая кнопка мыши
 
                    SetConsoleCursorPosition(h,c); // установка координат в то место, где курсор
                    SetConsoleTextAttribute(h,9); // установка цвета
 
                    cout<<"@"; // показ нужного символа в нужном месте
            }
 
 
            COORD t={0,0};
            SetConsoleCursorPosition(h,t);
            cout<<"\t";
            SetConsoleCursorPosition(h,t);
            cout<<c.X<<" "<<c.Y; 
 
 
            if(all_events[i].Event.MouseEvent.dwEventFlags==DOUBLE_CLICK){ // если нажата левая кнопка мыши
 
 
                cout<<"@"; // показ нужного символа в нужном месте
            }
        }
    }
}
программа рисует @ в консоли когда нажата левая кнопка мыши.........не могу придумать как можно зделать так чтоб при нажатии кнопки мыши начинал рисоватся шлейф(как в игре змейка) в 20 (число изменяется) символов и хвостик исчезал.........при отпускании кнопки мыши шлейф исчезает))

может подскажет кто с идеями по этому поводу???

Добавлено через 1 час 23 минуты
СПАСИБО за помощь сам написал))))))

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
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <windows.h>
using namespace std;
 
 
const int size = 50; // размер змейки
int Xarray [size];
int Yarray [size];
 
void rebuild_snake(int *_Xarray, int *_Yarray)
{
    for(int i = size - 1; i >= 1; --i)
    {
        Xarray[i] = _Xarray[i-1];
        Yarray[i] = _Yarray[i-1];
    }
}
 
void main()
{
 
    system("mode con cols=80 lines=40");
 
    HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE); // дескриптор окна
    COORD c; // переменная, отвечающая за координаты в консоли
 
    int counter = 0;;
 
    COORD XY = {0,0};
 
    HANDLE h_in=GetStdHandle(STD_INPUT_HANDLE); // дескриптор окна для работы с мышкой
    SetConsoleMode(h_in,ENABLE_MOUSE_INPUT); // установка режима использования мышки
 
    INPUT_RECORD all_events[256]; // массив событий, произошедших в консоли
    DWORD read_event; // переменная, в которую запишется количество произошедших событий
 
    while(1){
        ReadConsoleInput(h_in,all_events,256,&read_event); // получить все события, произошедшие в консоли
        for(int i=0;i<read_event;i++){ // пройтись по всем событиям
            c.X=all_events[i].Event.MouseEvent.dwMousePosition.X; // запомнить координаты мышки
            c.Y=all_events[i].Event.MouseEvent.dwMousePosition.Y;
 
 
            if(c.X>0 && c.X<80 && c.Y>0 && c.Y<40 &&
                all_events[i].Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED){ // если нажата левая кнопка мыши
 
                    SetConsoleCursorPosition(h,c); // установка координат в то место, где курсор
                    SetConsoleTextAttribute(h,9); // установка цвета
 
                    cout<<"@"; // показ нужного символа в нужном месте
 
                    rebuild_snake (Xarray, Yarray);
 
                    Xarray[i] = c.X;
                    Yarray[i] = c.Y;
 
                    XY.X = Xarray[size - 1];
                    XY.Y = Yarray[size - 1];
                    SetConsoleCursorPosition(h,XY);
 
                    cout << " " ;
 
            }
 
            COORD t={0,0};
            SetConsoleCursorPosition(h,t);
            cout<<"\t";
            SetConsoleCursorPosition(h,t);
            cout<<c.X<<" "<<c.Y; 
 
 
            if(all_events[i].Event.MouseEvent.dwEventFlags==DOUBLE_CLICK){ // если нажата левая кнопка мыши
 
 
                cout<<"@"; // показ нужного символа в нужном месте
            }
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2012, 00:40     Шлейф из символов в консоли
Посмотрите здесь:

Смена набора символов в консоли C++
C++ Чтение символов с консоли
C++ цвет символов в консоли
C++ Запрет ввода символов в консоли
Ввод строки из 10 символов в консоли C++
Ввод символов из консоли C++
C++ Подсчитать количество символов в консоли
Обновление символов в консоли C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 03:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru