Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2014, 17:18   #1
Kolosok
 
Регистрация: 16.11.2014
Сообщений: 8
По умолчанию Движение объекта

Доброе утро. У меня имеется сетка из квадратов(10х10, созданных с помощью bar) В некоторых квадратах находятся кружочки. Так же есть рамка, которая двигается с помощью стрелок. Все это отдельные классы: квадрат, круг и рамка.

Мне нужно, что бы при перемещении рамки в клетку с кругом, я нажимаю enter и как бы выбираю этот объект(круг), потом перемещаю рамку в другую любую клетку и опятm нажимаю enter и в этой клетке появляется круг, в старой стирается. Подскажите, пожалуйста, как это можно организовать?
Kolosok вне форума Ответить с цитированием
Старый 16.11.2014, 17:38   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

На каком языке программирования?
Рамка вокруг чего?
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 16.11.2014, 18:44   #3
Kolosok
 
Регистрация: 16.11.2014
Сообщений: 8
По умолчанию

C++. Рамка, меньше клетки. Передвигается по клеткам
Kolosok вне форума Ответить с цитированием
Старый 17.11.2014, 12:54   #4
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Делаете с использованием каких технологий? WinAPI?
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 17.11.2014, 17:19   #5
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Советую освоить рисование на Qt OpenGL: http://www.cyberforum.ru/blogs/416874/blog2944.html
8Observer8 вне форума Ответить с цитированием
Старый 17.11.2014, 18:20   #6
Kolosok
 
Регистрация: 16.11.2014
Сообщений: 8
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
Делаете с использованием каких технологий? WinAPI?
Я не знаю)) Dev c++, графика graphics.h библиотека, когда программа компелируется и открывается окно сверху написано BGI вроде

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Советую освоить рисование на Qt OpenGL: http://www.cyberforum.ru/blogs/416874/blog2944.html
Спасибо, но с рисованием я более менее разбираюсь, а вот в перемещении...

Последний раз редактировалось Stilet; 17.11.2014 в 20:00.
Kolosok вне форума Ответить с цитированием
Старый 17.11.2014, 18:56   #7
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Сообщение от Kolosok Посмотреть сообщение
Спасибо, но с рисованием я более менее разбираюсь, а вот в перемещении...
Дело в том, что в OpenGL с перемещением дела обстоят намного лучше, чем что-то самопальное. В самопальном только вы сможете разобраться, ну или кто-то другой при затрате своего времени и сил. В OpenGL уже продумано, как это сделать удобно, просто и стандартным образом. Всё же ему уже много лет. Другими словами, лучше брать то, что зарекомендовало себя с положительной стороны и что имеет перспективу
8Observer8 вне форума Ответить с цитированием
Старый 17.11.2014, 19:40   #8
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от Kolosok Посмотреть сообщение
Спасибо, но с рисованием я более менее разбираюсь, а вот в перемещении...
т.е. рисовать линии сетки, кружок и рамку умеете?

тогда не понятен смысл вопроса...

1) у вас должна быть функция, которая рисует сетку.

2) у вас должна быть функция, которая рисует рамку в клетке, принимая аргументами положение рамки по Х и У.

3) у вас должна быть функция, которая рисует кружок в клетке, принимая аргументами положение кружка по Х и У.

4) у вас должно быть две переменных Point. одна - положение рамки, другая - кружка: pntCircle и pntFrame .

обработка клавиш:

5) если было нажатие на клавиши курсора, то меняется соответственным образом координаты рамки (+- по Х или по У)

6) если было нажатие на ентер, то делается
pntCircle = pntFrame;

7) в конце обработки каждого (т.е. любого) нажатия клавиши вызываются все три функции в нужном порядке.

// как-то так...
Smogg вне форума Ответить с цитированием
Старый 17.11.2014, 21:06   #9
Kolosok
 
Регистрация: 16.11.2014
Сообщений: 8
По умолчанию

Мм.. Я немного запуталась. У меня через классы написано.
Class Pole
{
...
координаты x, y, цвет, размер в конструкторе
...
массив клеток, в клетки вставляются круги
};

Class Kletka
{
координаты x, y, цвет, размер в конструкторе
.....
};

Class Krug
{
....
в конструкторе радиус, цвет
...
функция движения(x+=x, y+=y,)
....
};

Class ramka
{
....
в конструкторе координаты, цвет и размер
...
функция стереть, появиться
...
передвижение(расписаны изменения координат в соответствии со стрелками, например если стрелка влево x=x+10). Я так понимаю сюда же и вставлять нажатие ентер? Если ентер, то функция стирания и движение из класса Круг?
Kolosok вне форума Ответить с цитированием
Старый 17.11.2014, 21:46   #10
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

// Зачем множить сущности без необходимости... Вам не нужно ничего выделять в отдельные классы, потому что они все используют данные, хранящиеся в одном месте.

Значит так, у вас есть главный класс Pole. У него есть размеры сетки и он исполняет отрисовку сетки. У него есть:
1) двумерный массив из булей, который определяет состояние клетки: true - кружок есть, false - кружка нет.
Спрашивается, а зачем нельзя хранить массив клеток, уже внутри в которых лежат координаты? Отвечается, а потому, что тогда поиск нужной клетки выйдет только перебором, что плохо, иначе нужно хранить в двух местах одно и то же, что очень некрасиво, т.е. положение клетки будет и внутри самой клетки и в виде координат по двумерному массиву.

2) переменные frameX и frameY, которыея определяют текущее положение рамки на сетке.

3) метод DrawAll() - вызывается, чтоб отрисовать все.
4) метод DrawGrid() - рисует только сетку.
5) метод DrawFrame(bool IsDraw) - рисует только рамку. Координаты берутся из классной переменной pntFrame. В зависимости от isDraw рисуется или нет, что эквивалентно стереть/появиться.
6) метод DrawCell(int x, int y, bool isCircle) - рисует внутряность клетки и в зависимости от isCircle рисует или нет кружок.

7) метод KeyPress(int cKey) - этот метод в зависимости от переданного инта (каковой есть код клавиши) либо изменяет frameX или frameY, дибо меняет значение элемента массива на противоположное:
Pole[frameX][frameY] = !Pole[frameX][frameY];



где-то в основном цикле получается клавиша и передается оная в KeyPress, в нутрях которого клавиша обрбатывается и меняется состояние свойств объекта класса Pole. Из KeyPressa вызывается DrawAll. в котором последовательно начиается отрисовка:
а) сначала всегда рисуется сетка,
б) затем пробегается циклом по массиву состояний клеток и вызывается DrawCell(int x, int y, bool isCircle)
в) и наконец, поверх сетки и клеток рисутеся/нерисуется рамка DrawFrame(bool IsDraw)

не получится по нормальному разнести все на отдельные классы, потому что статичные переменные как бы и существуют в стандарте, но их использование есть bad practice: http://alenacpp.blogspot.ru/2008/12/blog-post.html
Smogg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
движение объекта salwator JavaScript, Ajax 2 15.04.2013 16:20
Движение объекта (С++) фыф123 Помощь студентам 1 06.07.2011 20:50
Движение объекта dlnk C# (си шарп) 1 11.03.2011 21:17
Движение объекта ill2005 Помощь студентам 2 27.09.2010 21:32