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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
tyrbo123
3 / 3 / 1
Регистрация: 27.02.2013
Сообщений: 39
#1

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

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

И так, облазив весь ютуб и инет, я не нашёл не одного урока в котором бы описывалось движение по осям x и y.
Я бы хотел уроки или код по которому персонаж может двигаться, и ещё бы не плохо было урок про колизию со стенами.
1
Миниатюры
Движение по осям в консоли  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2013, 15:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Движение по осям в консоли (C++):

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

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

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

Движение планеты в системе двойной звезды или движение трех тел - C++
программа должна выводить координаты движения звезд и планеты в файл (рисую в gnuplot). во-первых, не понимаю, почему выходит, что все...

Клавиши F1-F12 в консоли, и работа с мышкой в консоли - C++
Я искал на сайте, но не нашел упоминания о том как обрабатывать и или узнавать где находится курсор мышки (и еще мне надо бы узнать нажатие...

считывание с консоли ( не с клавы, а именно с консоли) - C++
нужно написать функцию которая возвращает string в котором написано 500 символов которые были выведены в консоли от начала. среда :...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nonedark2008
909 / 648 / 134
Регистрация: 28.07.2012
Сообщений: 1,760
01.08.2013, 15:48 #2
tyrbo123, а чему тут учить? Какая коллизия со стенами? Если бы это было трехмерное пространство, то еще ладно, но тут то? Все необходимые функции для работы с консолью тута.
0
tyrbo123
3 / 3 / 1
Регистрация: 27.02.2013
Сообщений: 39
01.08.2013, 16:01  [ТС] #3
Я на 100% уверен что там нету темы на русском для движения персонажа, так как консоль не для этого.
0
nonedark2008
909 / 648 / 134
Регистрация: 28.07.2012
Сообщений: 1,760
01.08.2013, 16:07 #4
tyrbo123, ну дык ты прям и ищешь там функцию о том как двигать персонажа в консоли по осям координат??? xD Там зато есть функции для отображения определенного символа определенного цвета и с определенным задним фотом в определенное место консоли.(Затер старый символ("персонаж"), нарисовал на новом). Там есть функция для получения данных об определенном участке консоли - так можно определять группы символов нарисованных в консоли("препятствия").
А на русском ты практически никогда ничего путного не найдешь, тем более по такой тыпой тематике.
0
Croessmah
Эксперт CЭксперт С++
13232 / 7504 / 846
Регистрация: 27.09.2012
Сообщений: 18,433
Записей в блоге: 3
Завершенные тесты: 1
01.08.2013, 16:07 #5
Цитата Сообщение от tyrbo123 Посмотреть сообщение
темы на русском
Занимаетесь C++ - учите английский, хоть немного.
Цитата Сообщение от tyrbo123 Посмотреть сообщение
для движения персонажа
Напишите свою из кирпичиков, предоставленных ОС Windows (API)
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
01.08.2013, 16:10 #6
tyrbo123, итак.
Ваша задача на самом деле состоит из двух. Это расчет движения какого-то объекта и вывод результатов в консоль.
Для решения первой вам нужно составить какой-либо массив допустимых координат ([telepathy]коллизия стен[/telepathy]) и перемещаться по нему. После каждого перемещения, выводить новую текущую позицию объекта (персонажа) в консоль, что решит вторую вашу задачу.
0
tyrbo123
3 / 3 / 1
Регистрация: 27.02.2013
Сообщений: 39
01.08.2013, 16:43  [ТС] #7
О господи... Один скинул ссылку даже не сказав название функции или где искать, другой говорит что я не знаю английский, я просто хочу на русском, так удобнее, я знаю как это делается Satana, мне просто нечего написать, это как хочешь сказать слово, но не знаешь букв.
0
Croessmah
Эксперт CЭксперт С++
13232 / 7504 / 846
Регистрация: 27.09.2012
Сообщений: 18,433
Записей в блоге: 3
Завершенные тесты: 1
01.08.2013, 16:45 #8
Цитата Сообщение от tyrbo123 Посмотреть сообщение
я просто хочу на русском, так удобнее
Держите:
Функции консоли
Цитата Сообщение от tyrbo123 Посмотреть сообщение
другой говорит что я не знаю английский

Не по теме:


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

0
tyrbo123
3 / 3 / 1
Регистрация: 27.02.2013
Сообщений: 39
01.08.2013, 16:49  [ТС] #9
Спасибо тебе, это будет мне очень поелзно!
0
nonedark2008
909 / 648 / 134
Регистрация: 28.07.2012
Сообщений: 1,760
01.08.2013, 16:51 #10
Цитата Сообщение от tyrbo123 Посмотреть сообщение
мне просто нечего написать, это как хочешь сказать слово, но не знаешь букв
Тебе дали азбуку - ищи там нужные тебе буковки и составляй слова.
Не знаешь английский? Возьми переводчик, технические тексты переводить очень просто.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
01.08.2013, 16:56 #11

Не по теме:

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



tyrbo123, на самом деле можете четко сформулировать вопрос, а то как-то не очень понятно, что вам нужно. Вы хотите найти именно документацию к функциям по работе с консолью на русском языке, так?
0
nonedark2008
909 / 648 / 134
Регистрация: 28.07.2012
Сообщений: 1,760
01.08.2013, 17:00 #12
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Вы хотите найти именно документацию к функциям по работе с консолью на русском языке, так?
Скорее всего ему нужна документация(книга, статья, видео курс и т.п.) по геймдеву начального уровня, где объяснят все с самого-самого начала, и зачем-то он сюда еще приплел консоль.
0
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
2
Nerock
8 / 7 / 0
Регистрация: 02.05.2012
Сообщений: 92
02.08.2013, 16:52 #14
tyrbo123, может быть потому что, никто это не нашел(Спасибо кстати, полезно)
0
DU
1483 / 1059 / 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;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2013, 23:53
Привет! Вот еще темы с ответами:

Стороны, параллельные осям координат и диагонали - C++
На координатной плоскости построили квадрат, заданный координатами двух противоположных вершин: а) со сторонами, параллельными осям...

Класс прямоугольников со сторонами параллельными осям координат - C++
Описал класс прямоугольников со сторонами параллельными осям координат(Нашел как это делать и поэтому трудностей не возникло). Однако нашел...

Составить описание класса прямоугольников со сторонами, параллельными осям координат - C++
Составить описание класса прямоугольников со сторонами, параллельными осям координат. Предусмотреть возможность перемещения...

Найти площадь прямоугольника, который принадлежит обеим осям координат - C++
Подскажите алгоритм! Есть два прямоугольника в декартовой системе исчисления. Их стороны параллельны осям координат. Как найти площадь...


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

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

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