Вторник, 23 Апреля 2024, 12:51

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Программа "Жизнь"
Программа "Жизнь"
masb8ly-GCДата: Среда, 07 Декабря 2011, 21:23 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Здравствуйте! Готовясь к олимпиаде я ставлю перед собой цели и постепенно их выполняю. Так вот я начал делать программу "Жизнь", но у меня возникла странная проблемма. При итерациях всегда доминирует желтый цвет, а красного всегда меньше всех. Итерация происходит так: взять клетку таблицы посмотреть ее окружение, окрасить в тот цвет, которго больше в окружении. С чем может быть связана эта проблема?
Вот результаты 5 тестов, каждый в 3 этапа. 1 случайно заселение, 2 первая итераци, 3 итерация до окончательного положения.


Backend Developer ESIS
Client Side Developer Room8Studio
Technical Leader Lucid Reality Labs
Chief Technology Officer The Intruders
Chief Technology Officer RoyalePlay Games


Сообщение отредактировал masb8ly-GC - Среда, 07 Декабря 2011, 21:25
MatouДата: Четверг, 08 Декабря 2011, 00:29 | Сообщение # 2
Исходный коТ
Сейчас нет на сайте
У тебя изначально желтого цвета больше, потому он и побеждает, проблема в генераторе.

Quote (masb8ly-GC)
начал делать программу "Жизнь"

Quote (masb8ly-GC)
взять клетку таблицы посмотреть ее окружение, окрасить в тот цвет, которго больше в окружении.

Какая-то нитакая у тебя жизнь, у нас другая была)



masb8ly-GCДата: Четверг, 08 Декабря 2011, 19:46 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Quote (Matou)
Какая-то нитакая у тебя жизнь, у нас другая была)

Да вы правы есть несколько версий "жизни" каждый работает по своим правилам и алгоритмам.
А на счет генератора все вроде нормально:
Code

procedure TForm1.btn1Click(Sender: TObject);
begin
     For I:=1 to 100 Do
      For J:=1 to 100 Do
            Begin
              l[i,j]:=Random(4);
              if (l[i,j]=2) then drwgrd1.canvas.Brush.Color := clRed else
              if (l[i,j]=3)  then drwgrd1.canvas.Brush.Color := clBlue else
              drwgrd1.canvas.Brush.Color := clYellow;
              drwgrd1.canvas.FillRect(drwgrd1 .CellRect(i,j));
            end;
end;


Backend Developer ESIS
Client Side Developer Room8Studio
Technical Leader Lucid Reality Labs
Chief Technology Officer The Intruders
Chief Technology Officer RoyalePlay Games
TimKruzДата: Воскресенье, 11 Декабря 2011, 17:25 | Сообщение # 4
старожил
Сейчас нет на сайте
Quote (masb8ly-GC)
А на счет генератора все вроде нормально:

Эээ, в смысле нормально?
Quote (masb8ly-GC)
l[i,j]:=Random(4);
if (l[i,j]=2) then drwgrd1.canvas.Brush.Color := clRed else
if (l[i,j]=3) then drwgrd1.canvas.Brush.Color := clBlue else
drwgrd1.canvas.Brush.Color := clYellow;

Random(4) выкидывает одно из следующих чисел: 0,1,2,3. Поэтому жёлтый цвет получается в два раза чаще (если 0 или 1), чем красный или синий. Попробуй random(3) или random(3)+1. А перебор вариантов лучше сделать кэйсом:
Quote
blablabla:=random(3)+1;
case blablabla of
1: Color:=clYellow
2: Color:=clRed
3: Color:=clBlue
end;


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




Сообщение отредактировал TimKruz - Воскресенье, 11 Декабря 2011, 17:29
masb8ly-GCДата: Воскресенье, 11 Декабря 2011, 20:42 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
Спасибо за помощь, попозже подумаю над эти! Сейчас просто вплотную занят подготовкой к областной олимпиаде, времени совсем не много))

Backend Developer ESIS
Client Side Developer Room8Studio
Technical Leader Lucid Reality Labs
Chief Technology Officer The Intruders
Chief Technology Officer RoyalePlay Games
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Программа "Жизнь"
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг