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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.01.2011, 08:27     Движение вниз, верх (не очень гениальный вопрос) #1
Всем доброго доброго времени суток.
Вот я решил поэкспериментировать над движением точки.
Извините грубо говоря за тупой вопрос.

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

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?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2011, 08:27     Движение вниз, верх (не очень гениальный вопрос)
Посмотрите здесь:

C++ подскажите срочно очень легкий вопрос
C++ Очень простой вопрос про циклы
C++ Очень срочно надо решить вопрос Пожалуйста
возврат на верх C++
C++ Очень простой вопрос
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.01.2011, 08:31     Движение вниз, верх (не очень гениальный вопрос) #2
Цитата Сообщение от res Посмотреть сообщение
Или есть ли замена паскальному write и writeln?
C++
1
cout << "*" << endl;
res
56 / 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
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 12:59     Движение вниз, верх (не очень гениальный вопрос) #4
Вариант - хранить x и y курсора. Нужно стереть точку - стираешь как в варианте с влево, вправо, но вместо
C++
1
cout << "* ";
пишешь
C++
1
cout << " ";
Разрешение консольного текстового режима: 80x60.
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.01.2011, 13:12  [ТС]     Движение вниз, верх (не очень гениальный вопрос) #5
Цитата Сообщение от knofl Посмотреть сообщение
Вариант - хранить x и y курсора. Нужно стереть точку - стираешь как в варианте с влево, вправо, но вместо
C++
1
cout << "* ";
пишешь
C++
1
cout << " ";
Разрешение консольного текстового режима: 80x60.
и что это значит?)
функцию покажи)
knofl
 Аватар для knofl
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);
}
Вниз, вверх аналогично.
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.01.2011, 13:36  [ТС]     Движение вниз, верх (не очень гениальный вопрос) #7
Спасибо,но я так уже делал. Подумал что не лучший вариант. А вот у с cout нельзя что нибудь натворить? Например удалить предыдущий символ. (зря не изучал string)
knofl
 Аватар для knofl
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");
Вот пожалуй и всё - получается больше кода, но есть буфер и можно подступиться к любому символу.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
14.01.2011, 14:27     Движение вниз, верх (не очень гениальный вопрос) #9
Цитата Сообщение от res Посмотреть сообщение
Но никак не могу понять, как можно стирать точку когда продвигаешься вниз или верх
переводить курсор на позицию звёздочки, писать туда пробел, потом переводить курсор вверх/вниз и на позицию левее...
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.01.2011, 15:38  [ТС]     Движение вниз, верх (не очень гениальный вопрос) #10
easybudda, как насчёт почитать тему, модер наш?
knofl,спасибо я разобрался =)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
14.01.2011, 16:34     Движение вниз, верх (не очень гениальный вопрос) #11
Цитата Сообщение от res Посмотреть сообщение
easybudda, как насчёт почитать тему, модер наш?
как на счёт не хамить?
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 17:45     Движение вниз, верх (не очень гениальный вопрос) #12
Обращайтесь ещё;-)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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;
}
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 22:54     Движение вниз, верх (не очень гениальный вопрос) #14
Есть проблема - такой код работает только в винде=(
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
14.01.2011, 23:09     Движение вниз, верх (не очень гениальный вопрос) #15
Цитата Сообщение от knofl Посмотреть сообщение
такой код работает только в винде
для невиндовса man ncurses
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 23:45     Движение вниз, верх (не очень гениальный вопрос) #16
Вот это я понимаю, и думаю должно работать и в винде?
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
15.01.2011, 01:50  [ТС]     Движение вниз, верх (не очень гениальный вопрос) #17
easybudda, спасибо, механику то реализовать не проблема. И мне нужно было использование только того класса)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
15.01.2011, 02:32     Движение вниз, верх (не очень гениальный вопрос) #18
Цитата Сообщение от knofl Посмотреть сообщение
Вот это я понимаю, и думаю должно работать и в винде?
ncurses - *NIX-овая библиотека. Может и есть портированная под винду, но я такую не видел...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2011, 02:34     Движение вниз, верх (не очень гениальный вопрос)
Еще ссылки по теме:

C++ Вопрос,очень легкий)
Улитка.Матрицу M (m,n) заполнить натуральными числами от 1 до m*n по спирали, начинающей в левом верх C++
C++ Странная ошибка при компиляции очень очень большой проги ,,boomerang,,

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

Или воспользуйтесь поиском по форуму:
knofl
 Аватар для knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
15.01.2011, 02:34     Движение вниз, верх (не очень гениальный вопрос) #19
easybudda, А жаль, кароч надо пользоваться QT и не париться, за нас уже напарились;-)
Yandex
Объявления
15.01.2011, 02:34     Движение вниз, верх (не очень гениальный вопрос)
Ответ Создать тему
Опции темы

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