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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2011, 10:27   #1
zzz6
Пользователь
 
Регистрация: 10.06.2011
Сообщений: 60
По умолчанию Во общем надо написать программу "дождь"...и чтоб некоторые капельки двигались быстрее, другие медленнее.

Во общем надо написать программу "дождь"...и чтоб некоторые капельки двигались быстрее, другие медленнее.
Графика в Pascal abc.
zzz6 вне форума Ответить с цитированием
Старый 07.07.2011, 10:38   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну и в чем проблема - берешь клавиатуру и пишешь.

ЗЫ. Какой вопрос, такой и ответ. Где наработки, а если нет, то какова цена вопроса? Что Вам не понятно по коду? Где алгоритм?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 07.07.2011, 10:44   #3
zzz6
Пользователь
 
Регистрация: 10.06.2011
Сообщений: 60
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Ну и в чем проблема - берешь клавиатуру и пишешь.

ЗЫ. Какой вопрос, такой и ответ. Где наработки, а если нет, то какова цена вопроса? Что Вам не понятно по коду? Где алгоритм?
непонятно ничего.. графика в pascal буээ можно сказать..
zzz6 вне форума Ответить с цитированием
Старый 07.07.2011, 10:49   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Сама графика Вас должна интересовать несколько позже... Алгоритм где? Обычно писать программу начинают со структур данных.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 07.07.2011, 10:52   #5
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

создавай массив объектов или record'ов которые будут у тебя являться капельками. один параметр у объекта сделай отвечающим за скорость, далее:
отрисовываешь
в цикле расчитываешь новые координаты, из текущих и скорости(может ветер там еще)
опять отрисовываешь

вот как-то так
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 07.07.2011, 10:57   #6
zzz6
Пользователь
 
Регистрация: 10.06.2011
Сообщений: 60
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Сама графика Вас должна интересовать несколько позже... Алгоритм где? Обычно писать программу начинают со структур данных.
Код:
program Rain;
uses Crt, Graph;

type
   PTGraphObj = ^TGraphObj;
   TGraphObj =
   object
      Active : Boolean;
      Color : Integer;
      constructor Create (AColor : Integer);
      destructor Done; virtual;

      procedure Show;
      procedure Hide;
      function GetObjColor : Integer;
      procedure Draw; virtual; abstract;
      function TakeAction (DoIt : Boolean;
                           P : PTGraphObj) : PTGraphObj; virtual; abstract;
      function Recalc : Boolean; virtual; abstract;
   end;

constructor TGraphObj.Create(AColor : Integer);
begin
   Color := AColor;
   Active := True;
end;

destructor TGraphObj.Done;
begin end;

function TGraphObj.GetObjColor : Integer;
begin
   if Active then
      GetObjColor := Color
   else
      GetObjColor := GetBkColor;
end;

procedure TGraphObj.Show;
begin
   if not Active then
   begin
      Active := True;
      Draw;
   end;
end;
procedure TGraphObj.Hide;
begin
   if Active then
   begin
      Active := False;
      Draw;
   end;
end;


type
   PTDrop = ^TDrop;
   TDrop =
   object (TGraphObj)
      X, Y : Integer;

      constructor Create (pX, pY : Integer; AColor : Integer);
      procedure Draw; virtual;
      function Recalc : Boolean; virtual;
      function TakeAction (DoIt : Boolean; P : PTGraphObj) : PTGraphObj;
               virtual;
   private
      grnd : Integer;
   end;

const
   Vx = 5;
   Vy = 3;
   MaxRadius = 100;
type
   PTCircle = ^TCircle;
   TCircle =
   object (TGraphObj)
      X, Y : Integer;
      Rx, Ry : Integer;

      constructor Create (pX, pY : Integer; AColor : Integer);
      procedure Draw; virtual;
      function Recalc : Boolean; virtual;
      function TakeAction (DoIt : Boolean; P : PTGraphObj) : PTGraphObj;
               virtual;
   end;


function CreateNewDrop (p : PTDrop) : PTGraphObj;
begin
   if Assigned (p) then Dispose (p, Done);
   CreateNewDrop := new (PTDrop, Create (Random (GetMaxX),
                                         Random (GetMaxY div 2), LightBlue));
end;



constructor TDrop.Create (pX, pY : Integer; AColor : Integer);
var Deep : Integer;
begin
   inherited Create (AColor);
   X := pX; Y := pY;

   Deep := Random (GetMaxY div 4);
   grnd := GetMaxY - Trunc (Deep * Sin (Pi / 4));
end;

procedure TDrop.Draw;
begin
   SetColor (GetObjColor);
   Circle (X, Y, 3);
end;

function TDrop.TakeAction (DoIt : Boolean; P : PTGraphObj) : PTGraphObj;
begin
   if DoIt then
   begin
      TakeAction := new (PTCircle, Create (PTDrop (p)^.X, PTDrop (p)^.Y, LightBlue));
      Dispose (p, Done);
   end
   else TakeAction := P;
end;

function TDrop.Recalc : Boolean;
begin
   Hide;
   Y := Y + 3;
   X := X + 2;
   if Y > grnd then Recalc := True
   else
   begin
      Recalc := False;
      Show;
   end;
end;



constructor TCircle.Create (pX, pY : Integer; AColor : Integer);
begin
   inherited Create (AColor);
   X := pX; Y := pY; Rx := Vx; Ry := Vy;
end;

procedure TCircle.Draw;
begin
   SetColor (GetObjColor);
   Ellipse (X, Y, 0, 360, Rx, Ry);
end;

function TCircle.TakeAction (DoIt : Boolean; P : PTGraphObj) : PTGraphObj;
begin
   if DoIt then
   begin
      TakeAction := CreateNewDrop (PTDrop (P));
   end
   else TakeAction := P;
end;

function TCircle.Recalc : Boolean;
begin
   Hide;
   Inc (Rx, Vx);
   Inc (Ry, Vy);
   if Rx > MaxRadius then Recalc := True
   else
   begin
      Recalc := False;
      Show;
   end;
end;


procedure InitGraphix;
var
   grDriver, grMode, ErrCode : Integer;
begin
   grDriver := Detect;
   InitGraph (grDriver, grMode, '');
   ErrCode := GraphResult;
   if ErrCode <> grOk then
   begin
      Writeln ('BGI Error : ' + GraphErrorMsg (ErrCode));
      Readln; Halt(1);
   end;
end;
procedure CloseGraphix;
begin
   CloseGraph;
end;


const
   MaxObjs = 50;

var
   i : integer;
   Objs : array [1 .. MaxObjs] of PTGraphObj;

begin
   InitGraphix;

   for i := 1 to MaxObjs do
      Objs [i] := CreateNewDrop (nil);

   while not KeyPressed do
   begin
      for i := 1 to MaxObjs do
         with Objs [i]^ do
            Objs [i] := TakeAction (Recalc, Objs [i]);

      Delay (15);
   end;

   for i := 1 to MaxObjs do
      Dispose (Objs [i], Done);

   CloseGraphix;
end.
вот нашел код программы... но не работает
zzz6 вне форума Ответить с цитированием
Старый 07.07.2011, 10:57   #7
zzz6
Пользователь
 
Регистрация: 10.06.2011
Сообщений: 60
По умолчанию

легко сказать
zzz6 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написать программу которая "сжимает" заданную последовательность Алиночка))) Фриланс 7 17.01.2010 18:35
Помогите, пожалуйста, написать программу в Паскаль по теме "Множества" SArtem Помощь студентам 10 19.12.2009 11:40
Фикл фор заканчивается "как-то быстрее чем надо" Swool Общие вопросы C/C++ 12 07.10.2009 22:00