Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Ильгиз
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 38

Снегопад С++Builder

10.05.2011, 09:11. Показов 2157. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
По экрану монитора неупорядоченно падают снежинки...
Хотелось бы сделать прогу еще красивее)
Как тут заставить снежинки вращаться(анимация)?
Можно еще картинку поставить на форму и чтоб по картинке спускались снежинки))


в MainUnit.h:
Code
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
#ifndef MainUnitH
#define MainUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#define MAXFLAKES 500 //Количество снежинок
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published:    // IDE-managed Components
        void __fastcall FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift);
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall FormDestroy(TObject *Sender);
        void __fastcall FormActivate(TObject *Sender);
private:
HDC FhdcScreen,FhdcScreenCopy, FhdcBackBuffer;
HBITMAP FScreenCopy, FBackBuffer,FFlake;
HBRUSH Fbrush;
int FSW,FSH,FFW,FFH;
DWORD Fstart,Fcount;
TPoint FSnow[MAXFLAKES];
void __fastcall OnIdle(TObject *Sender, bool &Done);    // User declarations
public:     // User declarations
        __fastcall TMainForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif
в MainUnit.cpp:
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
#include <vcl.h>
#pragma hdrstop
 
#include "MainUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
 
#pragma resource "*.dfm"
TMainForm *MainForm;
int RAND_X[]={-1,-1,0,1,1};
int RAND_Y[]={2,1,0,1,2};
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
{
 
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if (Key == VK_ESCAPE)
        {
        Close();
        }
 
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
 
        FSW=GetSystemMetrics(SM_CXSCREEN);
        FSH=GetSystemMetrics(SM_CYSCREEN);
        FhdcScreen=GetDC(NULL);
        if (FhdcScreen==NULL)
                {
                return;
                }
        FhdcScreenCopy=CreateCompatibleDC(FhdcScreen);
        FhdcBackBuffer=CreateCompatibleDC(FhdcScreen);
        FFlake = LoadImage(NULL, "flake.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);//Загрзка снежинки
        if (FFlake == NULL)
        ShowMessage("ERROR. cant load from file");
        BITMAP bm;
        GetObject(FFlake, sizeof(bm), &bm);
        FFW=bm.bmWidth;
        FFH=bm.bmHeight;
        FScreenCopy=CreateCompatibleBitmap(FhdcScreen, FSW+FFW, FSH);
        FBackBuffer=CreateCompatibleBitmap(FhdcScreen, FSW, FSH);
        if (FScreenCopy != NULL)
                {
                SelectObject(FhdcScreenCopy, FScreenCopy);
                }
 
        BitBlt(FhdcScreenCopy, 0, 0, FSW, FSH, FhdcScreen, 0, 0, SRCCOPY);
        if (FBackBuffer != NULL)
                {
                SelectObject (FhdcBackBuffer, FFlake);
                BitBlt(FhdcScreenCopy, FSW,0,FFW,FFH,FhdcBackBuffer,0, 0,SRCCOPY);
                SelectObject (FhdcBackBuffer, FBackBuffer);
                Fbrush=CreateSolidBrush(RGB(300,200,255));
                SelectObject(FhdcBackBuffer,Fbrush);
                }
        randomize ();
        for (int a=0; a<MAXFLAKES; a++)
                {
                FSnow[a].x=rand()%(FSW-FFW);
                FSnow[a].y=-rand()%FSH;
                }
         BorderStyle=bsNone;
         ShowCursor(false);
         SetWindowPos(Handle, HWND_TOPMOST, 0, 0, FSW, FSH, SWP_SHOWWINDOW);
         Application -> OnIdle = OnIdle;
         Fcount=0;
         Fstart=GetTickCount();
 
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormDestroy(TObject *Sender)
{
Application -> OnIdle = NULL;
SetWindowPos(Handle, HWND_TOPMOST, MainForm -> Left, MainForm-> Top, MainForm-> Width, MainForm-> Height, SWP_SHOWWINDOW);
ShowCursor(true);
DeleteObject(Fbrush);
DeleteObject(FFlake);
DeleteObject(FBackBuffer);
DeleteObject(FScreenCopy);
DeleteDC(FhdcBackBuffer);
DeleteDC(FhdcScreenCopy);
ReleaseDC(NULL, FhdcScreen);
}
void __fastcall TMainForm::OnIdle(TObject*Sender,bool&Done)
{
Done=false;
if (GetTickCount()>Fstart+10)
{
BitBlt(FhdcBackBuffer,0,0,FSW,FSH,FhdcScreenCopy,0,0,SRCCOPY);
for (int a=0;a<MAXFLAKES ;++a)
{
 FSnow[a].x+= RAND_X[rand()%5];
 FSnow[a].y+= RAND_Y[rand()%5];
 if(FSnow[a].y>FSH)
 FSnow[a].y=-rand()%(FSH/4);
 if (FSnow[a].x<-FFW)
 FSnow[a].x=FSW;
 else
 if(FSnow[a].x>FSW)
 FSnow[a].x=FSnow[a].x-FSW;
 if( FSnow[a].y>=-FFH)
 //TransparentBlt(FhdcBackBuffer,FSnow[a].x,FSnow[a].y,FFW,FFH,FhdcScreenCopy,FSW,0,FFW,FFH,0x0);
  BitBlt(FhdcBackBuffer,FSnow[a].x,FSnow[a].y,FFW,FFH,FhdcScreenCopy,FSW,0,0x00E20000);
 }
BitBlt(Canvas->Handle,0,0,FSW,FSH,FhdcBackBuffer,0,0,SRCCOPY);
Fstart=GetTickCount();
}
}
 
 
 
//---------------------------------------------------------------------------
 
void __fastcall TMainForm::FormActivate(TObject *Sender)
{
ShowWindow(Handle, SW_SHOW);
}
//---------------------------------------------------------------------------
Вложения
Тип файла: rar Снегопад.rar (365.6 Кб, 116 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.05.2011, 09:11
Ответы с готовыми решениями:

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

Снегопад
Есть программа снегопад. исходник был взят с делфисоурс и дополнен. Необходимо реализовать размер снежинок. Но вот не доходит ко мне как...

Снегопад в окне
Нужно написать код, чтобы в появившемся окне падал снег. Заранее спасибо.

1
 Аватар для radiohobbyt
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
13.05.2011, 15:02
смотри в сторону opengl. там поворачивать проще. может даже такое быть, что и нету функции поворота.
+посмотри на загрузку процессора при выполнении программы... печально графику процессором обрабатывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.05.2011, 15:02
Помогаю со студенческими работами здесь

Анимация снежинок (снегопад)
Всем привет!Помогите сделать анимацию в Builder,снегопад.Я рисую снежинку(круг,эллипс)и надо что бы у нее было движение в низ появление...

Написать программу, имитирующую снегопад на экране монитора
Помогите, пожалуйста, наткнулся на такую задачу: Написать программу, имитирующую снегопад на экране монитора: в верхней строке экрана...

Как использовать компоненты скомпилированные для C++ Builder 2007 в C++ Builder 2010?
Народ! Такая проблема... Есть набор компонентов т.н. Dicom VCL. Сайт производителя - http://www.medicalconnections.co.uk/. У них на...

Можно ли использовать C++ Builder v11 если купить Embarcadero C++Builder XE8
День добрый! Есть старый проект С++. Он компилируется на CodeGear™ C++Builder Version 11. Но на это ПО утеряна лицензия, сейчас...

Как открыть проект C++Builder 6 в Embarcadero C++Builder 10.3 Community Edition?
Здравствуйте. Как открыть проект C++Builder 6 в новом Embarcadero C++Builder 10.3 Community Edition?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru