![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 16.11.2014
Сообщений: 8
|
![]()
Доброе утро. У меня имеется сетка из квадратов(10х10, созданных с помощью bar) В некоторых квадратах находятся кружочки. Так же есть рамка, которая двигается с помощью стрелок. Все это отдельные классы: квадрат, круг и рамка.
Мне нужно, что бы при перемещении рамки в клетку с кругом, я нажимаю enter и как бы выбираю этот объект(круг), потом перемещаю рамку в другую любую клетку и опятm нажимаю enter и в этой клетке появляется круг, в старой стирается. Подскажите, пожалуйста, как это можно организовать? |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 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"
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 16.11.2014
Сообщений: 8
|
![]()
C++. Рамка, меньше клетки. Передвигается по клеткам
|
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 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"
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,328
|
![]()
Советую освоить рисование на Qt OpenGL: http://www.cyberforum.ru/blogs/416874/blog2944.html
|
![]() |
![]() |
![]() |
#6 | |
Регистрация: 16.11.2014
Сообщений: 8
|
![]()
Я не знаю)) Dev c++, графика graphics.h библиотека, когда программа компелируется и открывается окно сверху написано BGI вроде
Цитата:
Последний раз редактировалось Stilet; 17.11.2014 в 20:00. |
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,328
|
![]()
Дело в том, что в OpenGL с перемещением дела обстоят намного лучше, чем что-то самопальное. В самопальном только вы сможете разобраться, ну или кто-то другой при затрате своего времени и сил. В OpenGL уже продумано, как это сделать удобно, просто и стандартным образом. Всё же ему уже много лет. Другими словами, лучше брать то, что зарекомендовало себя с положительной стороны и что имеет перспективу
|
![]() |
![]() |
![]() |
#8 | |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
![]() Цитата:
тогда не понятен смысл вопроса... 1) у вас должна быть функция, которая рисует сетку. 2) у вас должна быть функция, которая рисует рамку в клетке, принимая аргументами положение рамки по Х и У. 3) у вас должна быть функция, которая рисует кружок в клетке, принимая аргументами положение кружка по Х и У. 4) у вас должно быть две переменных Point. одна - положение рамки, другая - кружка: pntCircle и pntFrame . обработка клавиш: 5) если было нажатие на клавиши курсора, то меняется соответственным образом координаты рамки (+- по Х или по У) 6) если было нажатие на ентер, то делается pntCircle = pntFrame; 7) в конце обработки каждого (т.е. любого) нажатия клавиши вызываются все три функции в нужном порядке. // как-то так... |
|
![]() |
![]() |
![]() |
#9 |
Регистрация: 16.11.2014
Сообщений: 8
|
![]()
Мм.. Я немного запуталась. У меня через классы написано.
Class Pole { ... координаты x, y, цвет, размер в конструкторе ... массив клеток, в клетки вставляются круги }; Class Kletka { координаты x, y, цвет, размер в конструкторе ..... }; Class Krug { .... в конструкторе радиус, цвет ... функция движения(x+=x, y+=y,) .... }; Class ramka { .... в конструкторе координаты, цвет и размер ... функция стереть, появиться ... передвижение(расписаны изменения координат в соответствии со стрелками, например если стрелка влево x=x+10). Я так понимаю сюда же и вставлять нажатие ентер? Если ентер, то функция стирания и движение из класса Круг? |
![]() |
![]() |
![]() |
#10 |
Участник клуба
Регистрация: 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 |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
движение объекта | 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 |