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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
#1

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

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

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

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

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++
до смешного простой) как прервать выполнение ФУНКЦИИ в процессе работы программы? return 0; в этом случае не подходит т.к....

Очень простой вопрос про циклы - C++
Всем привет! Я только начал изучать с++. Меня интересует такой вопрос: Как сделать цик чтобы к переменной i добавлялась переменная...

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 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
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
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
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
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,602
14.01.2011, 14:27 #9
Цитата Сообщение от res Посмотреть сообщение
Но никак не могу понять, как можно стирать точку когда продвигаешься вниз или верх
переводить курсор на позицию звёздочки, писать туда пробел, потом переводить курсор вверх/вниз и на позицию левее...
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
14.01.2011, 15:38  [ТС] #10
easybudda, как насчёт почитать тему, модер наш?
knofl,спасибо я разобрался =)
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,602
14.01.2011, 16:34 #11
Цитата Сообщение от res Посмотреть сообщение
easybudda, как насчёт почитать тему, модер наш?
как на счёт не хамить?
knofl
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 17:45 #12
Обращайтесь ещё;-)
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,602
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
19 / 19 / 1
Регистрация: 05.04.2010
Сообщений: 122
14.01.2011, 22:54 #14
Есть проблема - такой код работает только в винде=(
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,602
14.01.2011, 23:09 #15
Цитата Сообщение от knofl Посмотреть сообщение
такой код работает только в винде
для невиндовса man ncurses
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2011, 23:09
Привет! Вот еще темы с ответами:

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

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

Движение кнопки вниз/лево/право - Visual Basic .NET
Эмм.Изучаю язык по книге Лукина.Все идет хорошо но наткнулся на одно но. Как реализовать движение кнопки вниз/верх/лево. Вот задание ...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.01.2011, 23:09
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru