Главная
Поиск
Карта сайта
Форум
Все страницы
Главное меню
Главная
Стандартный C++
Borland C++ 3.1
Borland C++ Builder
Учебник C++
Скачать программы
Гостевая
Форум
Учебник по созданию игр
Авторизация
Логин
Пароль
Запомнить меня
Забыли пароль?
Забыли логин?
Счетчики
Обмен ссылками
Блог программиста
Главная
Форум
Последние сообщения
Форум
Список форумов
Последние сообщения
Добро пожаловать Гость
[Зарегистрироваться]
Войти
Тема :Re:Бинарное дерево поиска..
15-05-2010 04:22:00
rudolf
char
Онлайн с
: 24-02-2010 11:03:24
Сообщения
: 31
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Бинарное дерево поиска
C бинарным деревом проблему решил.
IP сохранен
Тема :Re:Бинарное дерево поиска..
02-05-2010 14:47:05
rudolf
char
Онлайн с
: 24-02-2010 11:03:24
Сообщения
: 31
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Бинарное дерево поиска
Вывод, как я понял, производиться на PaintBox с помощью функции TextRect().
Я пробывал написать программу, которая, с помощью функции TextRect выводит значение на PaintBox->Canvas. Проблема возникает в том, что я не знаю как добавить новую надпись.
Вобщем, если знаете как реализован исходник, который я кинул в предидущем сообщении - помогите
IP сохранен
Тема :Re:Бинарное дерево поиска..
02-05-2010 14:38:17
rudolf
char
Онлайн с
: 24-02-2010 11:03:24
Сообщения
: 31
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Бинарное дерево поиска
Вот то, что пока есть в моем классе:
Code:
struct TreeNode //структура узла дерева { int value; //значение TreeNode *leftChild; //указатель на левого наследника TreeNode *rightChild;//указатель на правого наследника }; class BinarySerachTree //описание класса дерева { public: BinarySerachTree(); //прототип конструктора ~BinarySerachTree(); //прототип деструктора bool AddElement(TreeNode *node,int element); //прототип функции добавления элемента //передаем в функцию указатель на узел, //в который будем добавлять элемент и //сам элемент TreeNode *root; //указатель на корень дерева }; BinarySerachTree::BinarySerachTree(): //описание конструктора root(0) { } BinarySerachTree::~BinarySerachTree() //описание деструктора { delete root; } bool BinarySerachTree::AddElement(TreeNode *node,int element)//добавление элемента { if(root) { if(element < root->value) { return AddElement(root->leftChild,element); } else { if(element > root->value) { return AddElement(root->rightChild,element); } else { return false; } } } else { TreeNode *toAdd=new TreeNode; toAdd->value=element; toAdd->leftChild=0; toAdd->rightChild=0; } return true; }
Исходник написан на C#.
В частности меня волнует вывод дерева на экран, как в этом исходнике
IP сохранен
Тема :Бинарное дерево поиска..
02-05-2010 13:34:16
rudolf
char
Онлайн с
: 24-02-2010 11:03:24
Сообщения
: 31
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Бинарное дерево поиска
Вобщем, хочу реализовать бинарное дерево поиска, такое как в прикрепленном файле, но не используя шаблонов, а просто реализовать свой класс дерева.
Особенно интересует прорисовка дерева.
Я написал функцию добавления элемента в дерево, скоро скину сюда код.
IP сохранен
Тема :Перемножение матриц..
13-04-2010 19:09:41
superkot
Hello, world!
Онлайн с
: 11-03-2010 10:39:19
Сообщения
: 1
Среда обитания
:
0
Форум :
Проблемы и обсуждение программ
Тема :
Перемножение матриц
У меня вот такая проблема. Мне надо умножить две матрицы А[1000][1000] и B[1000][1000] в Borland C++3.1. Подскажите как мне это сделать.
IP сохранен
Тема :Re:Обратная Польская Запись..
30-04-2010 20:59:29
rudolf
char
Онлайн с
: 24-02-2010 11:03:24
Сообщения
: 31
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Обратная Польская Запись
C польской записью разобрался сам.
IP сохранен
Последний раз редактировалось: 30-04-2010 20:59:29 Автор rudolf т.к.
Тема :Обратная Польская Запись..
05-04-2010 18:21:15
rudolf
char
Онлайн с
: 24-02-2010 11:03:24
Сообщения
: 31
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Обратная Польская Запись
Подскажите как реализовать.
Я написал код, которые отделяет операторы(помещая их в стек) от входной строки. Стоит вопрос в том, в каком порядке мне операторы из стека вынимать, там возникает проблама с приоритетами и скобками. Так же, наряду с стандартными мат. операциями(*,+,-,/) есть операция возведения в степень(^).
IP сохранен
Тема :Re:программа компрессии/декомпрессии ф..
28-03-2010 13:22:10
Captain
int main()
Онлайн с
: 28-03-2009 11:37:34
Сообщения
: 39
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
программа компрессии/декомпрессии файлов на С++
Тема :
Re:программа компрессии/декомпрессии файлов на С++
У меня в закромах такой нет. Поищите в гугле.
IP сохранен
Тема :программа компрессии/декомпрессии фа..
28-03-2010 09:42:25
mephistophel
Hello, world!
Онлайн с
: 28-03-2010 06:36:17
Сообщения
: 1
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
программа компрессии/декомпрессии файлов на С++
Тема :
программа компрессии/декомпрессии файлов на С++
Нужен исходник данной программы,чтобы на основе его написать свою програму для компрессии/декомпрессии файлов.Заранее спасибо
IP сохранен
Тема :Re:Интересные программы...
26-03-2010 14:15:31
Captain
int main()
Онлайн с
: 28-03-2009 11:37:34
Сообщения
: 39
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Интересные программы.
Суть в том, что вся графика в компонентах C++ Builder'а сведена к компоненту Canvas, имеющим тип TCanvas и являющийся членом некоторых других компонентов (TForm, TImage, TPaintBox, TBitmap...). Поэтому на всех этих компонентах можно рисовать, используя канву (Canvas), обеспечивая при этом совместную работу Canvas'ов различных компонентов.
Теперь коротко о рисовании с помощью Canvas. Можно получить доступ к отдельным пикселям канвы с помощью члена Pixels, являющегося двумерным массивом объектов типа TColor (кстати, система координат берет свое начало в левом верхнем углу компонента, ось X направлена слева направо, а ось Y - сверху вниз):
Code:
int x = 10, y = 20; if (Form1 -> Canvas -> Pixels[x][y] == clRed) Form1 -> Canvas -> Pixels[x][y]= TColor(0x00FF0000);
Тип TColor - это тип цвета. Для него существуют предопределенные константы, такие как clRed, clGreen, clBlue, clWhite, clSilver, clBtnFace и многие другие (вы можете посмотреть их список, например, открыв выпадающий список в Object Inspector в поле Color, например, компонента формы Form1). Также цвет можно определить на основе его RGB-представления. На первые знака в шестнадцатиричном представлении можете не обращать внимания без особой надобности - они обуславливают выбор палитры (их значения - 0x00, 0x01, 0x02). Как правило цвет будет определяться числом такого вида:
Code:
0x00BBGGRR
где RR - байты, отвечающий за красный цвет в представлении RGB, GG - за зеленый, BB - за синий (да, порядок цветов в записи обратный по отношению к аббревиатуре).
Цвета вам понадобятся также и для определения цветов рисуемых линий и цветов заливки внутренней области замкнутых фигур. Цвет линий хранится в члене Pen (тип TPen) компонента Canvas, а цвет заливки - в члене Brush (тип TBrush):
Code:
Form1 -> Canvas -> Pen -> Color = clLime; Form1 -> Canvas -> Brush -> Color = TColor(0x00FF0000); Form1 -> Canvas -> FillRect(TRect(10, 10, 50, 30));
Этот код нарисует прямоугольник со светло-зеленой окантовкой и синим цветом внутренней заливки.
Сделает это функция FillRect, принимающая в качестве аргумента объект типа TRect, который в свою очередь представляет прямоугольник. Конструктор типа TRect принимает четыре аргумента: первые два - это координаты верхнего левого угла прямоугольника (x, y), последние два - координаты правого нижнего угла.
Существуют и другие функции для рисования, такие как Ellipse (рисует эллипс, вписанный в прямоугольник, аргумент имеет тип TRect), MoveTo (переводит рисующий курсор в точку с указанными координатами, аргументы - координаты), LineTo (рисует прямую линию, исходящую из предыдущей позиции рисующего курсора, и заканчивающуюся в указанной точке, при этом переводя курсор в эту последнюю точку; аргументы - координаты этой точки) и другие (смотрите справку в разделе Methods на странице компонента TCanvas).
Еще одна крайне полезная функция - CopyRect, копирующая часть изображения в канву текущего компонента из канвы другого компонента. Ее аргументы - прямоугольник, в который вы будете копировать, Canvas из которого происходит копирование и копируемый прямоугольник в этом Canvas'е.
Code:
Form1 -> Canvas -> CopyRect(TRect(100, 100, 200, 150), Image1 -> Canvas, TRect(0, 0, 100, 50));
Этот код скопирует прямоугольник из Image1 в Form1.
***
Вот все основы, которых, на мой взгляд, достаточно для знакомства с рисованием в Borland C++ Builder. Если что-то я забыл - спрашивайте, объясню.
IP сохранен
Тема :Re:Интересные программы...
26-03-2010 12:27:39
rudolf
char
Онлайн с
: 24-02-2010 11:03:24
Сообщения
: 31
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Интересные программы.
Проблема вся в том, что мне не приходилось особо работать с граф. компонентами C++Builder, и я не очень представляю работу с графиком.
С чего начать?
IP сохранен
Тема :Re:Проблема с программой в С++ 3.1..
25-03-2010 00:47:54
Captain
int main()
Онлайн с
: 28-03-2009 11:37:34
Сообщения
: 39
Среда обитания
:
0
Форум :
Проблемы и обсуждение программ
Тема :
Проблема с программой в С++ 3.1
Да, старенькое борландовское творение не любит современные технологии. Под Windows 7, например, у меня Borland C++ 3.1 вообще не запускается, даже в DOSBox'е, только с виртуальной машины. И, насколько я знаю, проблемы с их совместимостью не у меня одного.
IP сохранен
Тема :Бесплатный легальный софт..
24-03-2010 19:11:23
Alex Cones
Hello, world!
Онлайн с
: 24-03-2010 16:08:49
Сообщения
: 1
Среда обитания
: У монитора
0
Форум :
Реклама
Тема :
Бесплатный легальный софт
Предлагаю вашему вниманию сайт с бесплатным легальным софтом.
http://flsoft.ru
2
admin
, а сайт у Вас ничего. Хорошенький.
IP сохранен
http://flsoft.ru
- бесплатный софт.
Тема :Re:Проблема с программой в С++ 3.1..
24-03-2010 00:56:10
burunchik
Hello, world!
Онлайн с
: 07-03-2010 12:33:28
Сообщения
: 4
Среда обитания
:
0
Форум :
Проблемы и обсуждение программ
Тема :
Проблема с программой в С++ 3.1
нет такую ошибку выдает и на других программах, проблему я решил следующим образом - зашел к соседу на комп,у него старенький пентиум 3 стоит - все пошло без проблем, а у меня двухядерный, я предполагаю, что из-за этого. У себя установил dos box так вот вылетать перестал - но уже пишет что не может прочитать файлы #include, короче у соседа я выполнил свое задание и спасибо вам - эта программа мне сильно помогла!
IP сохранен
Тема :Re:Интересные программы...
17-03-2010 17:42:42
Captain
int main()
Онлайн с
: 28-03-2009 11:37:34
Сообщения
: 39
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Интересные программы.
Основное назначение банка текстур - хранить в себе картинки и по требованию рисовать их. При этом все необходимые картинки один раз загружаются с диска, а потом хранятся в оперативной памяти и используются по мере необходимости, что обеспечивает значительное увеличение быстродействия при приемлемых расходах оперативной памяти по сравнению с вариантом, когда все картинки каждый раз перед использованием загружаются с диска.
В принципе интерфейс банка текстур достаточно прост - у него есть конструктор, в котором происходит загрузка всех изображений, деструктор, освобождающий память, а также функция рисования нужного изображения в нужной точке экрана.
Внутренняя структура включает в себя список всех изображений, оформленный в зависимости от ваших предпочтений и соображений удобства использования. Это может быть простой динамический массив - тогда все изображения у вас просто пронумерованы, что не очень удобно, т.к. приходится постоянно смотреть, какой номер у нужной вам картинки. Более удобным я считаю хранение в виде ассоциативного массива (std::map), где изображения проиндексированы по строкам (идентификаторам).
При всем при этом, скорее всего, у вас будет отдельный класс для картинок, даже если они статичны. Ценность выделения их в отдельный класс вместо использования просто TBitmap особо ощутимой становится когда вы захотите сделать картинки с анимацией, поскольку усложненная процедура рисования такой картинки перекладывается на плечи самого этого класса, избавляя класс банка текстур от необходимости самому разбираться во внутреннем устройстве своих членов.
Кстати, один совет: поскольку при рисовании вам вокруг да около придется пользоваться парами чисел (координаты, размеры), то можно оформить эти пары в виде простой структуры:
Code:
struct MyPoint { MyPoint(int x = 0, int y = 0); int X, Y; }; MyPoint::MyPoint(int x, int y): X(x), Y(y) { }
IP сохранен
Тема :Re:Интересные программы...
15-03-2010 17:25:24
rudolf
char
Онлайн с
: 24-02-2010 11:03:24
Сообщения
: 31
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Интересные программы.
а можете поподробней рассказать что из себя представляет "банк текстур"?Или может есть места в интернете, где можно прочитать информацию о подобном?
IP сохранен
Тема :Re:Интересные программы...
15-03-2010 13:00:38
Captain
int main()
Онлайн с
: 28-03-2009 11:37:34
Сообщения
: 39
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Интересные программы.
Я вот как раз DoubleBuffered никогда не использовал, да и, скорее всего, это не та буферизация. По логике вещей буферизация формы помогает корректному выводу "картинки" (результата работы одной функции рисования) в отдельности. Я же подразумеваю буферизацию каждого кадра в игре в целом. То есть это та буферизация, которую нельзя подключить, а нужно реализовывать. Коротенькое описание принципа и наглядную демонстрацию посмотрите по вышеприведенной ссылке.
IP сохранен
Тема :Re:Интересные программы...
15-03-2010 04:59:47
rudolf
char
Онлайн с
: 24-02-2010 11:03:24
Сообщения
: 31
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Интересные программы.
Из всего вами написанного могу сказать только про канву, что я с ней знаком, приходилось работать, и про двойную буфферизацию, которую я подключал
Form1->DoubleBuffering=true;
Спасибо за сообщение, буду дальше вникать в его содержание.
IP сохранен
Тема :Re:Интересные программы...
15-03-2010 03:55:01
Captain
int main()
Онлайн с
: 28-03-2009 11:37:34
Сообщения
: 39
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Интересные программы.
DirectX - это, конечно, хорошо, но на первых порах вполне можно (и нужно!) обойтись и без него. В самом деле, сначала нужно разобраться с логикой создания игр и языковыми средствами. В C++ Builder'е вы можете с успехом использовать канву (Form1 -> Canvas).
Для начала вы можете попрактиковаться с рисованием примитивов с помощью функций TCanvas - Ellipse, Rectangle, FillRect, MoveTo, LineTo.
Потом, как освоитесь, используйте картинки. Создайте т.н. "банк текстур" - класс с массивом (динамическим) объектов типа картинка. В объекте картинки будет располагаться объект типа Graphics::TBitmap, параметры, такие как размеры изображения, конструктор, деструктор, функция рисования. Кстати, с TBitmap'ом вам придется работать через указатели, так что придется динамически выделять и освобождать память...
Сам банк текстур будет иметь конструктор, в котором происходит загрузка изображений с диска (информацию о необходимых файлах читаем еще из какого-нибудь файла), деструктор, освобождающий память, собственно массив картинок (удобно хранить их в ассоциативном массиве std::map, проиндексированном по строкам), функция рисования картинки по идентификатору (та самая строка, по которым картинки проиндексированы).
Вот вам уже в одном только рисовании использование ООП и STL.
А из игр - почему бы не реализовать танчики? Несколько танков на карте - объекты, препятствия - тоже объекты, пули - опять же объекты. При этом объекты могут уничтожаться, поэтому удобно использовать списки (std::list), так что вот вам вновь ООП и стандартные контейнеры.
При всем при этом вряд ли вы захотите хранить все яйца в одной корзине, то бишь весь код в одном файле, поэтому графика у нас пойдет в одну пару *.h - *.cpp, логика игры - в другой, а в главном файле будет их взаимодействие с интерфейсом программы, да еще и каждый модуль поместим в свое собственное пространство имен. Вот вам и работа с раздельно компилируемыми файлами.
Да, еще по поводу графики - тут уж никуда без двойной буферизации (смотрим здесь:
http://trivialcoding.ru/Programs/Borland-C-Builder/flame-double-buffering.html
).
В общем, и без использования сложных графических средств есть в чем попрактиковаться! При этом не обязательно использовать сразу все - например, для начала в игре Танчики можно рисовать танки, пули и препятствия примитивами, забыв напрочь про банк текстур, и вовсю налегая на ООП. Потом в отдельном проекте потренироваться в создании и загрузке картинок и легко перенести весь интерфейс и код в игру. А потом раскидать все по разным файлам и пространствам имен.
IP сохранен
Тема :Re:Интересные программы...
14-03-2010 20:40:26
rudolf
char
Онлайн с
: 24-02-2010 11:03:24
Сообщения
: 31
Среда обитания
:
0
Форум :
Общие вопросы по программированию
Тема :
Интересные программы.
в большинстве игр надо использовать DirectX, с которым я совершенно не знаком.
Я думал над чем-нибудь интересным, где можно использовать ООП, и хватило бы всего лишь компанентов TImage для реализации графической части игры, но, что-то, на ум ничего интересного и толкового не приходит.
У меня есть игра, там где самолет летит и скидывает бомбу на мишень, но она какая-то скучная, да и из языков средств там мало чего задействовано...
IP сохранен
Страница #
5
10
15
20
25
30
50
100
Все
«
Первая
Предыдущая
1
2
3
4
5
6
7
Следующая
Последняя
»
Powered by
ccBoard