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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2012, 13:07   #1
mrandrew1990
Пользователь
 
Регистрация: 02.05.2011
Сообщений: 13
Печаль Счетчик элементов массива (для модели толпы)

Здравствуйте, господа программисты! Нужна ваша помощь... Очень интересует один вопрос. Имеется массив, он отображается на форме и представляет собой сетку, каждый объект которой является "квадратом", закрашиваемым в тот или иной цвет... Т.е. программа представляет собой что-то аналогичное модели паникующей толпы, хотя далекой от нее, в плане реалистичности, но все же... Имеется массив 50*50 - сетка, в верху один выход (красный квадрат), а также квадратики зеленого цвета (как бы люди), которые расположены случайным образом и двигаются к выходу... Так вот, хочу сделать такую вещь, когда человек (зеленый квадратик) задерживается в одной позиции (допустим, если прошло 3 шага и более), то он как бы погибает - закрашивается в другой цвет (допустим, в синий) и остается этот квадрат на том самом месте (будучи уже синим) и не двигается.... И это как бы ко всем применимо чтобы было, чтобы в конце завершения шагов, можно было увидеть сколько клеток синих осталось, т.е. сколько людей погибло... Ну думаю суть идеи понятна... Просто, что-то никак не могу догнать, как это реализовать, счетчик как замудрить ... Помогите пожалуйста... Ниже исходник прилагается.
Вложения
Тип файла: rar Программа.rar (555.8 Кб, 14 просмотров)
mrandrew1990 вне форума Ответить с цитированием
Старый 05.03.2012, 10:00   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
F: array [1..s, 1..s] of integer;
заменить на
Код:
F: array [1..s,1..s] of Tman;
и объявитть класс
Код:
Tman=class
 fstate: integer;
 .....
end;
или запись
Код:
TMan =record
 fstate: integer;
 .....
end;
с нужным тебе набором полей (свойств).
Цитата:
а также квадратики зеленого цвета (как бы люди), которые расположены случайным образом и двигаются к выходу...
Цитата:
то он как бы погибает - закрашивается в другой цвет (допустим, в синий) и остается этот квадрат на том самом месте (будучи уже синим) и не двигается....
набор свойств должен обеспечивать определение текущего состояния, и давать возможность расчета нового состояния.
Цитата:
задерживается в одной позиции (допустим, если прошло 3 шага и более)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 05.03.2012 в 10:03.
evg_m вне форума Ответить с цитированием
Старый 05.03.2012, 10:22   #3
mrandrew1990
Пользователь
 
Регистрация: 02.05.2011
Сообщений: 13
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
заменить на
Код:
F: array [1..s,1..s] of Tman;
и объявитть класс
Код:
Tman=class
 fstate: integer;
 .....
end;
или запись
Код:
TMan =record
 fstate: integer;
 .....
end;
с нужным тебе набором полей (свойств).


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


Привет! Что-то не совсем понимаю... можешь сделать наброски какие??? просто я дуб в этом(((
mrandrew1990 вне форума Ответить с цитированием
Старый 05.03.2012, 13:24   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

На тестируй
Вложения
Тип файла: zip Программа.zip (3.1 Кб, 12 просмотров)
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 05.03.2012, 14:07   #5
mrandrew1990
Пользователь
 
Регистрация: 02.05.2011
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
На тестируй
Спасибо большое... очень-очень благодарен...
mrandrew1990 вне форума Ответить с цитированием
Старый 05.03.2012, 14:41   #6
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

так отрисовка интересней
Код:
Procedure TMod1Form.PaintScreen;
var i,j: integer;
Begin
  with Image.Canvas do
  begin
    Brush.Color:=clBlack;
    Pen.Color:=clBlack;
    Rectangle(0, 0, Image. Width, Image.Height);
    {çàïîëíåíèå îñòàâøåãîñÿ ïðîñòðàíñòâà ÷åðíûì öâåòîì}
    for i:=low(F) to High(F) do
      for j:=low(F[low(F)]) to High(F[low(F)]) do
      begin
        Brush.Color:=StateColor[F[i,j].State];
        Pen.Color:=StateColor[F[i,j].State];
        if F[i,j].State=1 then
          Brush.Color:=Brush.Color or Trunc($FF/InitialLife*(InitialLife-F[i,j].Life));
        Rectangle((i-1) * 10+2, (j-1) * 10+2, I * 10 + 1, J * 10+1);
      end;
  end;
End;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 05.03.2012, 18:58   #7
mrandrew1990
Пользователь
 
Регистрация: 02.05.2011
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
так отрисовка интересней
Код:
Procedure TMod1Form.PaintScreen;
var i,j: integer;
Begin
  with Image.Canvas do
  begin
    Brush.Color:=clBlack;
    Pen.Color:=clBlack;
    Rectangle(0, 0, Image. Width, Image.Height);
    {çàïîëíåíèå îñòàâøåãîñÿ ïðîñòðàíñòâà ÷åðíûì öâåòîì}
    for i:=low(F) to High(F) do
      for j:=low(F[low(F)]) to High(F[low(F)]) do
      begin
        Brush.Color:=StateColor[F[i,j].State];
        Pen.Color:=StateColor[F[i,j].State];
        if F[i,j].State=1 then
          Brush.Color:=Brush.Color or Trunc($FF/InitialLife*(InitialLife-F[i,j].Life));
        Rectangle((i-1) * 10+2, (j-1) * 10+2, I * 10 + 1, J * 10+1);
      end;
  end;
End;

Да, действительно классно - красиво очень... Спасибо!!!
mrandrew1990 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
событие для массива созданных элементов areyoudead Общие вопросы Delphi 52 14.10.2014 19:25
Для массива подсчитать удвоенную сумму всех положительных элементов (С++) anytka2k Помощь студентам 11 17.11.2011 07:20
Не придумать условие для элементов массива ShadowNecros Помощь студентам 7 14.04.2011 22:12
Для массива определить сумму всех элементов, стоящих после максимального HECTOR.A. Паскаль, Turbo Pascal, PascalABC.NET 4 17.06.2009 22:04