Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 07.10.2014
Сообщений: 15

Падающий снег на снеговика

07.04.2015, 15:04. Показов 1868. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите переписать алгоритм, чтоб падающий снег не попадал на снеговика, который появляется при нажатии клавиши(снег также появляется при нажатии баттна.). Вот весь код:
Delphi
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    XPManifest1: TXPManifest;
    Timer1: TTimer;
    PaintBox1: TPaintBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  NumSnow: integer;
  SnowColor: array[1..1000] of TColor; 
  SnowSize: array[1..1000] of integer; /
  Snow: array[1..1000] of TPoint; //êîîðäèíàòû ñíåæèíîê
 
implementation
 
{$R *.dfm}
 
procedure drawsnegovik;
var xr1,yr1,xn1,yn1:integer;
    xr2,yr2,xn2,yn2:integer;
begin
  xr1:=365;
  yr1:=130;
  xn1:=240;
  yn1:=395;
  xr2:=205;
  yr2:=130;
  xn2:=325;
  yn2:=395;
  Form1.canvas.Pen.Color:=clPurple;
  Form1.canvas.Brush.Color:=clWhite;
  Form1.canvas.Ellipse(200,200,400,400);  
  Form1.canvas.Ellipse( 230,100,370,230);
  Form1.canvas.Ellipse( 275,50,340,110);
 
  Form1.canvas.Ellipse(xr1,yr1,xr1+30,yr1+30);
  Form1.canvas.Ellipse(xr2,yr2,xr2+30,yr2+30);
 
  Form1.canvas.Ellipse(xn1,yn1,xn1+40,yn1+30); 
  Form1.canvas.Ellipse(xn2,yn2,xn2+40,yn2+30);
 
  Form1.canvas.Pen.Color:=clBlack;     //ãëàçà
  Form1.canvas.Brush.Color:=clBlack;
  Form1.canvas.Ellipse(280,60,290,70);
  Form1.canvas.Ellipse(305,60,315,70);
 
  Form1.canvas.Pen.Color:=clRed;   //íîñ
  Form1.canvas.Brush.Color:=clRed;
  Form1.canvas.MoveTo(290,75);
  Form1.canvas.LineTo(250,77);
  Form1.canvas.MoveTo(290,83);
  Form1.canvas.LineTo(250, 77);
end;
 
procedure TForm1.Button1Click(Sender: TObject);  // âûçûâàåì ñíåãîâèêà ïî íàæàòèþ íà êíîïêó
begin
  drawsnegovik;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
  NumSnow := 100; //   Êîëè÷åñòâî ñíåæèíîê, íå áîëüøå 1000
  // Íà÷àëüíûå êîîðäèíàòû ñíåæèíîê, èíèöèàëèçàöèÿ
for i:=1 to NumSnow  do
  begin
    Snow[i].X := Random(Form1.ClientWidth);
    Snow[i].Y := Random(Form1.ClientWidth);
    SnowColor[i] := RGB(255,255,200+Random(56));
    SnowSize[i]  := Random(3);
  end;
  Timer1.Enabled :=true; // Âêëþ÷åíèå òàéìåðà
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
var i,j:integer;
begin
 for j:=1 to 10 do
   begin
     i := Random(NumSnow) + 1;
     // âûáèðàåì îäíó ëþáóþ ñíåæèíêó
     // ñòèðàåì åå öâåòîì ôîíà
     PaintBox1.Canvas.Brush.Color := clGradientActiveCaption;
     PaintBox1.Canvas.Pen.Color := clGradientActiveCaption;
     PaintBox1.Canvas.Rectangle(Snow[i].X-1, Snow[i].Y-1, Snow[i].X+2, Snow[i].Y+2);
     // çàäàåì åå íîâîå ïîëîæåíèå(âíèç â ñòîðîíó)
     Snow[i].X := Snow[i].X + Random(3) - 1;
     Snow[i].Y := Snow[i].Y + Random(3) + 1;
     // Åñëè äîñòèãíóò êîíåö ôîðìû, òî ïî íîâîé íà÷èíàåì
   if Snow[i].Y >= Form1.ClientHeight then
     begin
       Snow[i].Y := 0;
       Snow[i].X := Random(Form1.ClientWidth);
     end;
     // Ðèñóåì ñíåæèíêó
  PaintBox1.Canvas.Brush.Color := SnowColor[i];
  PaintBox1.Canvas.Pen.Color := SnowColor[i];
  PaintBox1.Canvas.Ellipse(Snow[i].X-1, Snow[i].Y-1,Snow[i].X+SnowSize[i], Snow[i].Y+SnowSize[i]);
   end;
end;
 
end.
Вот сама программа. Можете глянуть, что происходит со снеговиком.
Вложения
Тип файла: rar снеговик.rar (165.1 Кб, 28 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.04.2015, 15:04
Ответы с готовыми решениями:

падающий снег
помогите мне нарисовать в делфи падающий снег.я не особо шарю в делфи т.к. юзаю си.кто может помогите.заранее спасибо.

Падающий снег
Помогите нарисовать падающий снег . У меня на форме нарисованый домик, ёлка.... нада только падающий снег.... я пробовал нарисовать...

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

5
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
07.04.2015, 16:58
У тебя должен быть некий фон (со снеговиком или без - неважно), на котором каждый такт таймера рисуются заново все снежинки, и, далее, получившееся изображение выводится на экран.
0
1 / 1 / 0
Регистрация: 07.10.2014
Сообщений: 15
07.04.2015, 19:07  [ТС]
но на снеговика-то они все равно попадают.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
07.04.2015, 19:36
Тогда снеговика тоже рисуй в таймере после отрисовки снежинок.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,661
Записей в блоге: 21
07.04.2015, 22:11
интересно, почему никто не читает доки, как правильно использовать PaintBox ?
и почему перемешаны процедуры и методы формы?
и глобальные переменные тут же, как контрольный выстрел в преподавателя

все что тут есть должно быть полями и методами класса TForm1
рисование должно происходить в PaintBox1.paint;
таймер должен вызывать всего лишь PaintBox1.invalidate; всё...
0
08.04.2015, 02:36

Не по теме:

Цитата Сообщение от krapotkin Посмотреть сообщение
интересно, почему никто не читает доки
На сём форуме вопросы, как правило, задают те, кто доки не читает никогда. Считай это некоторым "социальным экспериментом". Типа "Можно ли повысить качество образования с помощью форумов, где дают готовые ответы".

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2015, 02:36
Помогаю со студенческими работами здесь

Падающий снег на рабочем столе
Рылся тут - ничего не нашел толкового (TFLab4 смотрел но он мне не помог). В общем задание такое: сделать программу, которая...

Падающий снег
Подскажите, пожалуйста, где я ошиблась. На форме программе должен отображаться падающий снег, как на рисунке. Почему-то у меня вообще...

Падающий снег
Делаю падающий снег поверх картины. Как сделать так, что бы снежинки не оставляли за собой след?

Падающий снег
Сделать снегопад через модуль crt, без использования модуля graph Добавлено через 26 минут uses crt; const n=79; Var ...

Падающий снег
Здравствуйте! При загрузке скрипта снежинки появляются по высоте окна браузера, потом летят до конца страницы. Хочу переделать, чтобы...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru