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

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

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

Author24 — интернет-сервис помощи студентам
И так, облазив весь ютуб и инет, я не нашёл не одного урока в котором бы описывалось движение по осям x и y.
Я бы хотел уроки или код по которому персонаж может двигаться, и ещё бы не плохо было урок про колизию со стенами.
Миниатюры
Движение по осям в консоли  
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2013, 15:41
Ответы с готовыми решениями:

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

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

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

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

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

Не по теме:


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

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

Не по теме:

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



tyrbo123, на самом деле можете четко сформулировать вопрос, а то как-то не очень понятно, что вам нужно. Вы хотите найти именно документацию к функциям по работе с консолью на русском языке, так?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
01.08.2013, 17:00 12
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Вы хотите найти именно документацию к функциям по работе с консолью на русском языке, так?
Скорее всего ему нужна документация(книга, статья, видео курс и т.п.) по геймдеву начального уровня, где объяснят все с самого-самого начала, и зачем-то он сюда еще приплел консоль.
0
3 / 3 / 0
Регистрация: 27.02.2013
Сообщений: 39
02.08.2013, 16:26  [ТС] 13
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 14
tyrbo123, может быть потому что, никто это не нашел(Спасибо кстати, полезно)
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
02.08.2013, 23:53 15
один из простейших вариантов есть тут:
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  [ТС] 16
DU, это прекрасно, и очень мне прегодится, но я уже нашёл выход, дело в том что нужно было управлять обьектом.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
04.08.2013, 08:56 17
Цитата Сообщение от tyrbo123 Посмотреть сообщение
Почему некто из вас не скинул мне вот это?
Потому что это никто не смотрит?

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

Не по теме:

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

0
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 84
04.08.2013, 12:51 18
Цитата Сообщение от tyrbo123 Посмотреть сообщение
И так, облазив весь ютуб и инет, я не нашёл не одного урока в котором бы описывалось движение по осям x и y.
Я бы хотел уроки или код по которому персонаж может двигаться, и ещё бы не плохо было урок про колизию со стенами.
Чувак, спасибо огромное, ты подал мне идею для очередного "фигнестрадания".
ЗЫ:Если доделаю, выкину src сюда.
0
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;
}
0
1 / 1 / 3
Регистрация: 02.04.2015
Сообщений: 169
02.12.2015, 00:24 20
Цитата Сообщение от Survial Посмотреть сообщение
Вот, например, такой вариант.
Посмотри дату сообщения, которое перед твоим
0
02.12.2015, 00:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2015, 00:24
Помогаю со студенческими работами здесь

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

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

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

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


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

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