Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
85 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
1

Движение вниз, верх (не очень гениальный вопрос)

14.01.2011, 08:27. Показов 2814. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго доброго времени суток.
Вот я решил поэкспериментировать над движением точки.
Извините грубо говоря за тупой вопрос.

Разобрался как продвигать налево и направо, стирая предыдущую точку.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (;;point.X++) // направо
{
    SetConsoleCursorPosition(console, point);
    cout << " *";
    Sleep(500);
}
 
for (;;point.X--) // налево
{
    SetConsoleCursorPosition(console, point);
    cout << "* ";
    Sleep(500);
}
Но никак не могу понять, как можно стирать точку когда продвигаешься вниз или верх
C++
1
2
3
4
5
6
for (;;point.Y++) // направо
{
    SetConsoleCursorPosition(console, point);
    cout << "*"; // как?
    Sleep(500);
}
прошу прощения за такой идиотизм, просто очень спешу(

Добавлено через 2 часа 29 минут
Или есть ли замена паскальному write и writeln?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2011, 08:27
Ответы с готовыми решениями:

Меню выпадает в верх, а не вниз
Собственно начал осваивать css и хотел сделать выпадающие меню, внезапно получилось так, что...

Создать свой компонент(кнопку) которая при наведении на него указателя мыши совершает прыжки верх и вниз
Кнопка должна не бегать а прыгать верх вниз(когда ты навел курсор на нее, а после того как ты...

Перехват события нажатия клавиш "верх/вниз"
Здравствуйте! Возможно ли перехватить событие нажития клавиш &quot;вверх/вниз&quot; в edit'e? И если да, то...

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

18
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
14.01.2011, 08:31 2
Цитата Сообщение от res Посмотреть сообщение
Или есть ли замена паскальному write и writeln?
C++
1
cout << "*" << endl;
0
85 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.01.2011, 11:03  [ТС] 3
Цитата Сообщение от Maxwe11 Посмотреть сообщение
C++
1
cout << "*" << endl;
он переходит на новую строку с координатой (x=0,y=0). А как я помню writeln сохраняет значение "y". Может и ошибаюсь.

Тогда как можно реализовать мою идею с передвижением в верх и вниз?

Добавлено через 11 минут
я никак не могу придумать самый простой способ для стираний предыдущего символа.

Добавлено через 1 час 29 минут
bump this
0
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 12:59 4
Вариант - хранить x и y курсора. Нужно стереть точку - стираешь как в варианте с влево, вправо, но вместо
C++
1
cout << "* ";
пишешь
C++
1
cout << " ";
Разрешение консольного текстового режима: 80x60.
0
85 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.01.2011, 13:12  [ТС] 5
Цитата Сообщение от knofl Посмотреть сообщение
Вариант - хранить x и y курсора. Нужно стереть точку - стираешь как в варианте с влево, вправо, но вместо
C++
1
cout << "* ";
пишешь
C++
1
cout << " ";
Разрешение консольного текстового режима: 80x60.
и что это значит?)
функцию покажи)
0
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 13:21 6
C++
1
2
3
4
5
6
for (;;point.X--) // налево
{
    SetConsoleCursorPosition(console, point);
    cout << "* ";
    Sleep(500);
}
Ето у тебя. Я предлагаю так:

C++
1
2
3
4
5
6
7
8
9
for (;;point.X--) 
{
    SetConsoleCursorPosition(console, point);
    cout << " "<<endl;
    point.Y++
    SetConsoleCursorPosition(console, point);
    cout << "*"<<endl;
    Sleep(500);
}
Вниз, вверх аналогично.
1
85 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.01.2011, 13:36  [ТС] 7
Спасибо,но я так уже делал. Подумал что не лучший вариант. А вот у с cout нельзя что нибудь натворить? Например удалить предыдущий символ. (зря не изучал string)
0
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 14:06 8
string изучать нечего - нормальная IDE и готово! Если прямо нужно почитай в инете описание. Потом тот вариант, что я тебе предложил и что у тебя уже был, вполне нормален. Упс: заметил ошибку=(
C++
1
2
3
4
5
6
7
8
9
for (;;point.X--) 
{
    SetConsoleCursorPosition(console, point);
    cout << " ";
    point.Y++
    SetConsoleCursorPosition(console, point);
    cout << "*";
    Sleep(500);
}
C++
1
2
point.Y++
    SetConsoleCursorPosition(console, point);
Эта фигня эквивалентна
C++
1
cout<<endl;
и по сути действует точно так же, только помещает курсор не в (0,0) а куда надо.

Ну если уж заговорили о стрингах можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
string str[60];
char ch[80];
 
for(int i=0; i<80; i++)
{
    ch=' ';
}
 
for(int i=0; i<60; i++)
{
    str[i]=ch;
}
 
str[2][5]='*';
cout<<str;
str[2][5]=' ';
str[2][6]='*';
for(int i=0; i<60; i++)
{
   cout<<str[i];
}
Не помню только можно ли присваивать стрингу массив чаров... Если нельзя то просто инициализировать это дело двойным циклом:

C++
1
2
3
4
5
6
7
for(int i=0; i<60; i++)
{
    for(int j=0; j<80; j++)
    {
       str[i][j]=' ';
    }
}
Ещё чтобы экран очистился:
C++
1
system("cls");
Вот пожалуй и всё - получается больше кода, но есть буфер и можно подступиться к любому символу.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
14.01.2011, 14:27 9
Цитата Сообщение от res Посмотреть сообщение
Но никак не могу понять, как можно стирать точку когда продвигаешься вниз или верх
переводить курсор на позицию звёздочки, писать туда пробел, потом переводить курсор вверх/вниз и на позицию левее...
0
85 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.01.2011, 15:38  [ТС] 10
easybudda, как насчёт почитать тему, модер наш?
knofl,спасибо я разобрался =)
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
14.01.2011, 16:34 11
Цитата Сообщение от res Посмотреть сообщение
easybudda, как насчёт почитать тему, модер наш?
как на счёт не хамить?
1
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 17:45 12
Обращайтесь ещё;-)
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
14.01.2011, 18:21 13
Лучший ответ Сообщение было отмечено как решение

Решение

res, диржы, эксперементатор ты чей-то...
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
#include <windows.h>
#include <cstdlib>
 
#define LEFT 2
#define RIGHT 77
#define TOP 1
#define BOTTOM 23
#define DELAY 100
#define SET_CHAR "*"
#define CLEAR_CHAR " "
#define DELTA 1
 
int main(){
    HANDLE hCon;
    COORD pos;
    int dX, dY;
    CONSOLE_CURSOR_INFO cInfo;
 
    hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    pos.X = ( RIGHT - LEFT ) / 2 + LEFT;
    pos.Y = ( BOTTOM - TOP ) / 2 + TOP;
    dX = dY = DELTA;
 
    system("cls");
    cInfo.dwSize = 1;
    cInfo.bVisible = FALSE;
    SetConsoleCursorInfo(hCon, &cInfo);
 
    while ( true ){
        WriteConsoleOutputCharacterA(hCon, SET_CHAR, 1, pos, NULL);
        Sleep(DELAY);
        WriteConsoleOutputCharacterA(hCon, CLEAR_CHAR, 1, pos, NULL);
        if ( pos.X + dX < LEFT || pos.X + dX > RIGHT )
            dX *= -1;
        if ( pos.Y + dY < TOP || pos.Y + dY > BOTTOM )
            dY *= -1;
        pos.X += dX;
        pos.Y += dY;
    }
 
    return 0;
}
3
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 22:54 14
Есть проблема - такой код работает только в винде=(
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
14.01.2011, 23:09 15
Цитата Сообщение от knofl Посмотреть сообщение
такой код работает только в винде
для невиндовса man ncurses
1
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 23:45 16
Вот это я понимаю, и думаю должно работать и в винде?
0
85 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
15.01.2011, 01:50  [ТС] 17
easybudda, спасибо, механику то реализовать не проблема. И мне нужно было использование только того класса)
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
15.01.2011, 02:32 18
Цитата Сообщение от knofl Посмотреть сообщение
Вот это я понимаю, и думаю должно работать и в винде?
ncurses - *NIX-овая библиотека. Может и есть портированная под винду, но я такую не видел...
0
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
15.01.2011, 02:34 19
easybudda, А жаль, кароч надо пользоваться QT и не париться, за нас уже напарились;-)
0
15.01.2011, 02:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2011, 02:34
Помогаю со студенческими работами здесь

Движение звезд вниз экрана
есть процедура, но звезды уплывают вниз и больше не появляются, цикл бесконечный. нужно, чтобы...

Движение точки вверх - вниз
.code start: mov ax, 0013h ; int 10h ; ;--------------тело проги tochka: MOV...

Циклическое движение картинки сверху вниз
Здравствуйте! У меня есть небольшая проблемка, мне надо, чтобы тогда, когда моя картинка...

Плавное движение текста (Label) вниз
Всем привет! Хотелось бы узнать, как сделать плавное движение Label вниз? Причем плавное, и...


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

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