Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/47: Рейтинг темы: голосов - 47, средняя оценка - 4.96
3 / 3 / 0
Регистрация: 27.02.2013
Сообщений: 39

Движение по осям в консоли

01.08.2013, 15:41. Показов 9739. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
И так, облазив весь ютуб и инет, я не нашёл не одного урока в котором бы описывалось движение по осям x и y.
Я бы хотел уроки или код по которому персонаж может двигаться, и ещё бы не плохо было урок про колизию со стенами.
Миниатюры
Движение по осям в консоли  
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.08.2013, 15:41
Ответы с готовыми решениями:

C++ DirectX (как реализовать движение тела по осям, вращение)
Если можно, то на примере.

Движение в консоли
Здравствуйте, уважаемое сообщество. Помогите, пожалуйста, разобраться с движением объектов в консоли - или направьте, где эта тема...

Движение символов по консоли
Вот код: position.h/cpp //.h #ifndef _POSITION_H #define _POSITION_H #include <stdio.h>

20
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
01.08.2013, 15:48
tyrbo123, а чему тут учить? Какая коллизия со стенами? Если бы это было трехмерное пространство, то еще ладно, но тут то? Все необходимые функции для работы с консолью тута.
0
3 / 3 / 0
Регистрация: 27.02.2013
Сообщений: 39
01.08.2013, 16:01  [ТС]
Я на 100% уверен что там нету темы на русском для движения персонажа, так как консоль не для этого.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
01.08.2013, 16:07
tyrbo123, ну дык ты прям и ищешь там функцию о том как двигать персонажа в консоли по осям координат??? xD Там зато есть функции для отображения определенного символа определенного цвета и с определенным задним фотом в определенное место консоли.(Затер старый символ("персонаж"), нарисовал на новом). Там есть функция для получения данных об определенном участке консоли - так можно определять группы символов нарисованных в консоли("препятствия").
А на русском ты практически никогда ничего путного не найдешь, тем более по такой тыпой тематике.
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
01.08.2013, 16:07
Цитата Сообщение от tyrbo123 Посмотреть сообщение
темы на русском
Занимаетесь C++ - учите английский, хоть немного.
Цитата Сообщение от tyrbo123 Посмотреть сообщение
для движения персонажа
Напишите свою из кирпичиков, предоставленных ОС Windows (API)
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
01.08.2013, 16:10
tyrbo123, итак.
Ваша задача на самом деле состоит из двух. Это расчет движения какого-то объекта и вывод результатов в консоль.
Для решения первой вам нужно составить какой-либо массив допустимых координат ([telepathy]коллизия стен[/telepathy]) и перемещаться по нему. После каждого перемещения, выводить новую текущую позицию объекта (персонажа) в консоль, что решит вторую вашу задачу.
0
3 / 3 / 0
Регистрация: 27.02.2013
Сообщений: 39
01.08.2013, 16:43  [ТС]
О господи... Один скинул ссылку даже не сказав название функции или где искать, другой говорит что я не знаю английский, я просто хочу на русском, так удобнее, я знаю как это делается Satana, мне просто нечего написать, это как хочешь сказать слово, но не знаешь букв.
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
01.08.2013, 16:45
Цитата Сообщение от tyrbo123 Посмотреть сообщение
я просто хочу на русском, так удобнее
Держите:
Функции консоли
Цитата Сообщение от tyrbo123 Посмотреть сообщение
другой говорит что я не знаю английский

Не по теме:


получили ата-та от ТС, ну и правильно, а то мы тут совсем распоясались :D

0
3 / 3 / 0
Регистрация: 27.02.2013
Сообщений: 39
01.08.2013, 16:49  [ТС]
Спасибо тебе, это будет мне очень поелзно!
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
01.08.2013, 16:51
Цитата Сообщение от tyrbo123 Посмотреть сообщение
мне просто нечего написать, это как хочешь сказать слово, но не знаешь букв
Тебе дали азбуку - ищи там нужные тебе буковки и составляй слова.
Не знаешь английский? Возьми переводчик, технические тексты переводить очень просто.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
01.08.2013, 16:56

Не по теме:

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Не знаешь английский? Возьми переводчик
Возьми заложников! И пусть кто-нибудь другой выполнит грязную работу, а то
Цитата Сообщение от Croessmah Посмотреть сообщение
мы тут совсем распоясались



tyrbo123, на самом деле можете четко сформулировать вопрос, а то как-то не очень понятно, что вам нужно. Вы хотите найти именно документацию к функциям по работе с консолью на русском языке, так?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
01.08.2013, 17:00
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Вы хотите найти именно документацию к функциям по работе с консолью на русском языке, так?
Скорее всего ему нужна документация(книга, статья, видео курс и т.п.) по геймдеву начального уровня, где объяснят все с самого-самого начала, и зачем-то он сюда еще приплел консоль.
0
3 / 3 / 0
Регистрация: 27.02.2013
Сообщений: 39
02.08.2013, 16:26  [ТС]
https://www.cyberforum.ru/atta... 1375338319
Вот зачем не нужна консоль...

Добавлено через 36 секунд
Вроде бы умный программист, а не знаешь про псевдографику, и 2D в консоли...

Добавлено через 19 минут
Вообщем я всё понял XD
Вот то что мне надо было искать ASCII - в таком делали то что я видел.

Добавлено через 18 минут
Почему некто из вас не скинул мне вот это? http://www.youtube.com/watch?v=kfRjvvgjTNQ
2
9 / 8 / 2
Регистрация: 02.05.2012
Сообщений: 92
02.08.2013, 16:52
tyrbo123, может быть потому что, никто это не нашел(Спасибо кстати, полезно)
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
02.08.2013, 23:53
один из простейших вариантов есть тут:
https://www.cyberforum.ru/post3355629.html
дублирую:
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <string>
#include <vector>
 
HANDLE GetConsoleHandle()
{
  return GetStdHandle(STD_OUTPUT_HANDLE);
}
 
void GoToXY(unsigned x, unsigned y)
{
  COORD coord = { static_cast<SHORT>(x), static_cast<SHORT>(y) };
  SetConsoleCursorPosition(GetConsoleHandle(), coord);
}
 
class ScreenBuffer
{
  int m_width;
  int m_height;
  std::string m_buffer;
 
public:
  ScreenBuffer(int width, int height)
    : m_width(width)
    , m_height(height)
  {
    const int size = (m_width + 1) * m_height;
    m_buffer.resize(size);
    Clear();
  }
 
  int GetWidth()
  {
    return m_width;
  }
 
  int GetHeight()
  {
    return m_height;
  }
 
  void Fill(char ch)
  {
    for (size_t i = 0, end = m_buffer.size(); i != end; ++i)
      m_buffer[i] = ch;
 
    for (size_t i = 1, end = m_height; i <= end; ++i)
    {
      m_buffer[(i * (m_width + 1)) - 1] = '\n';
    }
  }
 
  void Clear()
  {
    Fill(' ');
  }
 
  void Draw(int x, int y, char ch)
  {
    m_buffer[y * (m_width + 1) + x] = ch;
  }
 
  void Draw(double x, double y, char ch)
  {
    Draw(int(x), int(y), ch);
  }
 
  void DrawToScreen() const
  {
    GoToXY(0, 0);
    std::cout << m_buffer;
  }
};
 
void DrawBorder(ScreenBuffer& screen)
{
  const int screenWidth = screen.GetWidth();
  const int screenHeight = screen.GetHeight();
 
  for (int i = 0; i < screenWidth; ++i)
  {
    screen.Draw(i, 0, '.');
    screen.Draw(i, screenHeight - 1, '.');
  }
 
  for (int i = 0, end = screen.GetHeight(); i != end; ++i)
  {
    screen.Draw(0, i, '.');
    screen.Draw(screenWidth - 1, i, '.');
  }
}
 
struct Object
{
  double x;
  double y;
  int width;
  int height;
  double xSpeed;
  double ySpeed;
 
  virtual void Draw(ScreenBuffer& screen) = 0;
 
  Object()
    : x(0)
    , y(0)
    , width(0)
    , height(0)
    , xSpeed(0)
    , ySpeed(0)
  {
  }
};
 
class Rect : public Object
{
public:
  Rect(int w, int h, char ch)
    : symbol(ch)
  {
    width = w;
    height = h;
  }
 
  void Draw(ScreenBuffer& screen)
  {
    for (int i = 0; i < width; ++i)
    {
      screen.Draw(x + i, y, symbol);
      screen.Draw(x + i, y + height - 1, symbol);
    }
 
    for (int i = 0; i < height; ++i)
    {
      screen.Draw(x, y + i, symbol);
      screen.Draw(x + width - 1, y + i, symbol);
    }
  }
 
private:
  char symbol;
};
 
class Cross : public Object
{
public:
  Cross(char ch)
    : symbol(ch)
  {
    width = 3;
    height = 3;
  }
 
  void Draw(ScreenBuffer& screen)
  {
    for (int i = 0; i < width; ++i)
    {
      screen.Draw(x + i, y + 1, symbol);
    }
 
    for (int i = 0; i < height; ++i)
    {
      screen.Draw(x + 1, y + i, symbol);
    }
  }
 
private:
  char symbol;
};
 
void ProcessObject(ScreenBuffer& screen, Object& obj)
{
  obj.x += obj.xSpeed;
  obj.y += obj.ySpeed;
 
  if (obj.x >= screen.GetWidth() - obj.width)
  {
    obj.xSpeed = -obj.xSpeed;
    obj.x = screen.GetWidth() - obj.width - (obj.x - screen.GetWidth() + obj.width);
  }
  else if (obj.x < 0)
  {
    obj.xSpeed = -obj.xSpeed;
    obj.x = -obj.x;
  }
 
  if (obj.y >= screen.GetHeight() - obj.height)
  {
    obj.ySpeed = -obj.ySpeed;
    obj.y = screen.GetHeight() - obj.height - (obj.y - screen.GetHeight() + obj.height);
  }
  else if (obj.y < 0)
  {
    obj.ySpeed = -obj.ySpeed;
    obj.y = -obj.y;
  }
}
 
void AddObjects(std::vector<Object*>& objs)
{
  {
    Object* obj = new Rect(5, 5, '*');
    obj->xSpeed = 3;
    obj->ySpeed = 1;
    obj->x = 2;
    obj->y = 10;
    objs.push_back(obj);
  }
 
  {
    Object* obj = new Rect(3, 3, '#');
    obj->xSpeed = 1;
    obj->ySpeed = 1;
    obj->x = 5;
    obj->y = 1;
    objs.push_back(obj);
  }
 
  {
    Object* obj = new Cross('+');
    obj->xSpeed = 1;
    obj->ySpeed = 0.1;
    obj->x = 10;
    obj->y = 1;
    objs.push_back(obj);
  }
}
 
void DeleteObjects(std::vector<Object*>& objs)
{
  for (std::vector<Object*>::iterator it = objs.begin(), end = objs.end(); it != end; ++it)
    delete *it;
}
 
int main()
{
  const int screenWidth = 60;
  const int screenHeight = 20;
  ScreenBuffer screen(screenWidth, screenHeight);
 
  std::vector<Object*> objs;
  AddObjects(objs);
 
  for (;;)
  {
    screen.Clear();
    DrawBorder(screen);
 
    for (std::vector<Object*>::iterator it = objs.begin(), end = objs.end(); it != end; ++it)
    {
      Object& obj = **it;
      ProcessObject(screen, obj);
      obj.Draw(screen);
    }
 
    screen.DrawToScreen();
 
    Sleep(10);
  }
 
  DeleteObjects(objs);
 
  return 0;
}
1
3 / 3 / 0
Регистрация: 27.02.2013
Сообщений: 39
03.08.2013, 00:14  [ТС]
DU, это прекрасно, и очень мне прегодится, но я уже нашёл выход, дело в том что нужно было управлять обьектом.
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
04.08.2013, 08:56
Цитата Сообщение от tyrbo123 Посмотреть сообщение
Почему некто из вас не скинул мне вот это?
Потому что это никто не смотрит?

Цитата Сообщение от tyrbo123 Посмотреть сообщение
Вроде бы умный программист, а не знаешь про псевдографику, и 2D в консоли...
А как же 3D в консоли?

Не по теме:

DU, сверху "убегает" на один символ за рамку :(

0
 Аватар для Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 84
04.08.2013, 12:51
Цитата Сообщение от tyrbo123 Посмотреть сообщение
И так, облазив весь ютуб и инет, я не нашёл не одного урока в котором бы описывалось движение по осям x и y.
Я бы хотел уроки или код по которому персонаж может двигаться, и ещё бы не плохо было урок про колизию со стенами.
Чувак, спасибо огромное, ты подал мне идею для очередного "фигнестрадания".
ЗЫ:Если доделаю, выкину src сюда.
0
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 4
02.12.2015, 00:03
Вот, например, такой вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <Windows.h>
 
int main() {
    COORD position;  // Объявление необходимой структуры
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);  // Получение дескриптора устройства стандартного вывода
 
    position.X = 10;   
    position.Y = 15; 
 
    SetConsoleCursorPosition(hConsole, position);       // Перемещение каретки по заданным координатам
 
    puts("Hello World!");
 
    return 0;
}
0
1 / 1 / 3
Регистрация: 02.04.2015
Сообщений: 169
02.12.2015, 00:24
Цитата Сообщение от Survial Посмотреть сообщение
Вот, например, такой вариант.
Посмотри дату сообщения, которое перед твоим
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.12.2015, 00:24
Помогаю со студенческими работами здесь

Движение персонажа в консоли с препятствиями
Приветствую! Есть проблема: задали написать игру с главным персонажем, врагами и препятствиями(стенами, границами). Я не совсем понимаю...

Как изобразить движение объекта в консоли?
Всем привет! Воообще новенький-преновенький в плюсах. Как анимировать движение, например, квадрата ниже вправо на некоторое количество...

Движение каретки по заданному массиву в консоли
Уважаемые программисты, подскажите пожалуйста... Есть одномерный массив на 9 элементов. Цель: В консоли 1) Передвижение каретки...

Движение символов в консоли при нажатии клавиш
Как сделать, так, что-бы была буква на консоли, и при нажатии клавиш, она двигалась в соответствующие стороны, и ещё другие буквы...

Движение анимации в консоли при нажатии на определённую кнопку
Мне нужно сделать так, чтобы ракета, при нажатии на определенную кнопку, двигалась в верх. Как это можно сделать? #include...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru