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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
tyrbo123
3 / 3 / 1
Регистрация: 27.02.2013
Сообщений: 39
01.08.2013, 15:41     Движение по осям в консоли #1
И так, облазив весь ютуб и инет, я не нашёл не одного урока в котором бы описывалось движение по осям x и y.
Я бы хотел уроки или код по которому персонаж может двигаться, и ещё бы не плохо было урок про колизию со стенами.
Миниатюры
Движение по осям в консоли  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2013, 15:41     Движение по осям в консоли
Посмотрите здесь:

С++ Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Известны координаты левого нижнего угла каждого из них... C++
C++ Описать процедуру RectPS(x1, y1, x2, y2, P), вычисляющую периметр P прямоугольника со сторонами, параллельными осям координат, по координатам...
Составить описание класса прямоугольников со сторонами, параллельными осям координат C++
C++ Задан вектор с координатами (х, у, z)- Найти углы наклона этого вектора к координатным осям
Задан вектор с координатами (х, у, z); найти углы наклона этого вектора к координатным осям C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,341
01.08.2013, 15:48     Движение по осям в консоли #2
tyrbo123, а чему тут учить? Какая коллизия со стенами? Если бы это было трехмерное пространство, то еще ладно, но тут то? Все необходимые функции для работы с консолью тута.
tyrbo123
3 / 3 / 1
Регистрация: 27.02.2013
Сообщений: 39
01.08.2013, 16:01  [ТС]     Движение по осям в консоли #3
Я на 100% уверен что там нету темы на русском для движения персонажа, так как консоль не для этого.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,341
01.08.2013, 16:07     Движение по осям в консоли #4
tyrbo123, ну дык ты прям и ищешь там функцию о том как двигать персонажа в консоли по осям координат??? xD Там зато есть функции для отображения определенного символа определенного цвета и с определенным задним фотом в определенное место консоли.(Затер старый символ("персонаж"), нарисовал на новом). Там есть функция для получения данных об определенном участке консоли - так можно определять группы символов нарисованных в консоли("препятствия").
А на русском ты практически никогда ничего путного не найдешь, тем более по такой тыпой тематике.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,889
Записей в блоге: 2
Завершенные тесты: 1
01.08.2013, 16:07     Движение по осям в консоли #5
Цитата Сообщение от tyrbo123 Посмотреть сообщение
темы на русском
Занимаетесь C++ - учите английский, хоть немного.
Цитата Сообщение от tyrbo123 Посмотреть сообщение
для движения персонажа
Напишите свою из кирпичиков, предоставленных ОС Windows (API)
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
01.08.2013, 16:10     Движение по осям в консоли #6
tyrbo123, итак.
Ваша задача на самом деле состоит из двух. Это расчет движения какого-то объекта и вывод результатов в консоль.
Для решения первой вам нужно составить какой-либо массив допустимых координат ([telepathy]коллизия стен[/telepathy]) и перемещаться по нему. После каждого перемещения, выводить новую текущую позицию объекта (персонажа) в консоль, что решит вторую вашу задачу.
tyrbo123
3 / 3 / 1
Регистрация: 27.02.2013
Сообщений: 39
01.08.2013, 16:43  [ТС]     Движение по осям в консоли #7
О господи... Один скинул ссылку даже не сказав название функции или где искать, другой говорит что я не знаю английский, я просто хочу на русском, так удобнее, я знаю как это делается Satana, мне просто нечего написать, это как хочешь сказать слово, но не знаешь букв.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,889
Записей в блоге: 2
Завершенные тесты: 1
01.08.2013, 16:45     Движение по осям в консоли #8
Цитата Сообщение от tyrbo123 Посмотреть сообщение
я просто хочу на русском, так удобнее
Держите:
Функции консоли
Цитата Сообщение от tyrbo123 Посмотреть сообщение
другой говорит что я не знаю английский

Не по теме:


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

tyrbo123
3 / 3 / 1
Регистрация: 27.02.2013
Сообщений: 39
01.08.2013, 16:49  [ТС]     Движение по осям в консоли #9
Спасибо тебе, это будет мне очень поелзно!
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,341
01.08.2013, 16:51     Движение по осям в консоли #10
Цитата Сообщение от tyrbo123 Посмотреть сообщение
мне просто нечего написать, это как хочешь сказать слово, но не знаешь букв
Тебе дали азбуку - ищи там нужные тебе буковки и составляй слова.
Не знаешь английский? Возьми переводчик, технические тексты переводить очень просто.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
01.08.2013, 16:56     Движение по осям в консоли #11

Не по теме:

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



tyrbo123, на самом деле можете четко сформулировать вопрос, а то как-то не очень понятно, что вам нужно. Вы хотите найти именно документацию к функциям по работе с консолью на русском языке, так?
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,341
01.08.2013, 17:00     Движение по осям в консоли #12
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Вы хотите найти именно документацию к функциям по работе с консолью на русском языке, так?
Скорее всего ему нужна документация(книга, статья, видео курс и т.п.) по геймдеву начального уровня, где объяснят все с самого-самого начала, и зачем-то он сюда еще приплел консоль.
tyrbo123
3 / 3 / 1
Регистрация: 27.02.2013
Сообщений: 39
02.08.2013, 16:26  [ТС]     Движение по осям в консоли #13
http://www.cyberforum.ru/attachments/296137d1375338319
Вот зачем не нужна консоль...

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

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

Добавлено через 18 минут
Почему некто из вас не скинул мне вот это? http://www.youtube.com/watch?v=kfRjvvgjTNQ
Nerock
8 / 7 / 0
Регистрация: 02.05.2012
Сообщений: 92
02.08.2013, 16:52     Движение по осям в консоли #14
tyrbo123, может быть потому что, никто это не нашел(Спасибо кстати, полезно)
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.08.2013, 23:53     Движение по осям в консоли #15
один из простейших вариантов есть тут:
Закон отражения в ограниченой зоне на консольном приложении
дублирую:
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;
}
tyrbo123
3 / 3 / 1
Регистрация: 27.02.2013
Сообщений: 39
03.08.2013, 00:14  [ТС]     Движение по осям в консоли #16
DU, это прекрасно, и очень мне прегодится, но я уже нашёл выход, дело в том что нужно было управлять обьектом.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,889
Записей в блоге: 2
Завершенные тесты: 1
04.08.2013, 08:56     Движение по осям в консоли #17
Цитата Сообщение от tyrbo123 Посмотреть сообщение
Почему некто из вас не скинул мне вот это?
Потому что это никто не смотрит?

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

Не по теме:

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

Misterkat
 Аватар для Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 83
04.08.2013, 12:51     Движение по осям в консоли #18
Цитата Сообщение от tyrbo123 Посмотреть сообщение
И так, облазив весь ютуб и инет, я не нашёл не одного урока в котором бы описывалось движение по осям x и y.
Я бы хотел уроки или код по которому персонаж может двигаться, и ещё бы не плохо было урок про колизию со стенами.
Чувак, спасибо огромное, ты подал мне идею для очередного "фигнестрадания".
ЗЫ:Если доделаю, выкину src сюда.
Survial
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 4
02.12.2015, 00:03     Движение по осям в консоли #19
Вот, например, такой вариант.
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2015, 00:24     Движение по осям в консоли
Еще ссылки по теме:

Составить описание класса прямоугольников со сторонами, параллельными осям координат C++
Стороны, параллельные осям координат и диагонали C++
Составить описание класса прямоугольников со сторонами, параллельными осям координат C++

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

Или воспользуйтесь поиском по форуму:
bambique
1 / 1 / 2
Регистрация: 02.04.2015
Сообщений: 168
02.12.2015, 00:24     Движение по осям в консоли #20
Цитата Сообщение от Survial Посмотреть сообщение
Вот, например, такой вариант.
Посмотри дату сообщения, которое перед твоим
Yandex
Объявления
02.12.2015, 00:24     Движение по осям в консоли
Ответ Создать тему
Опции темы

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