![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка: "Project xxxx raised exception class..." [D7, XP]
Werewolf-Prankster © (2008-05-18 23:33:00)Делаю Сапер.
Код открытия пустых клеток:
Procedure TForm1.Open (x1,y1:integer); //Открытие клетки
var a,b:integer;
begin
a:=x1;
b:=y1;
if (a<10) and (a>0) and (b<10) and (b>0) then
begin
if (pole[a,b]=' ') then
begin
TLabel(FindComponent ('B'+inttostr(a)+inttostr(b))).visible:=false;
open(a+1,b);
open(a-1,b);
open(a,b+1);
open(a,b-1);
//По диагонали
open(a+1,b+1);
open(a-1,b+1);
open(a-1,b-1);
open(a+1,b-1);
end
else
if (pole[a,b]<>'©') and (pole[a,b]<>' ') then
TLabel(FindComponent ('B'+inttostr(a)+inttostr(b))).visible:=false;
end;
end;
Но при приближении "уничтожения" кнопок к краю, выскакивает такая ошибка: http://img225.imageshack.us/img225/1844/errorib2.jpg
Не пойму в чем проблемма, помогите пожалуйста )
Werewolf-Prankster (2008-05-19 14:58:00) [21]2Сергей М.
Я только учусь, и если не сдам на этой неделе, не получу 5 ))
PS То что оговаривалось в другой теме, я не понял лишь по своей неосведомленности, т.к. визуальный режим Delphi мы начали учить 4-5 пар назад )
Сергей М. (2008-05-19 14:57:00) [22]
> У меня уже нет времени что либо переделывать
А что за спешка ?
Werewolf-Prankster (2008-05-19 14:56:00) [23]2Palladin это значит что поле без цифр и мин.
Palladin (2008-05-19 14:55:00) [24]
> Werewolf-Prankster (19.05.08 14:54) [10]
а ты подумай... что значит условие if (pole[a,b]=' ') ?
Werewolf-Prankster (2008-05-19 14:54:00) [25]2Palladin
И что же? :)
Palladin (2008-05-19 14:54:00) [26]Можно. Я даже вижу что ты не сделал для полного счастья.
Werewolf-Prankster (2008-05-19 14:50:00) [27]2Германн
Чесно, большую чать этой темы увидел только что.
2All
У меня уже нет времени что либо переделывать. Можно ли как-то подправить этот код?
Renegat (2008-05-19 08:56:00) [28]У меня однажды была ситуация, когда рекурсивная процедура не учитывала границы массива, и в итоге выходила за его пределы настолько, что рушила всю секцию данных :)
Германн (2008-05-19 01:13:00) [29]
> Amoeba © (19.05.08 00:39) [4]
>
> Судя по приведенному коду интерфейс спроектирован крайне
> неудачно. Такие задачи решаются иначе. Для игрового поля
> сапера надо использовать DrawGrid. И никакого полчища Label'ов
> тогда не не понадобится.
>
Автору на это намекали, но он не внял.
http://delphimaster.ru/cgi-bin/forum.pl?id=1210427273&n=18
guav (2008-05-19 01:00:00) [30]Ну допустим a = 9 b = 5, из Open вызывается open(a+1,b); a = 10, b = 5 , оттуда open(a-1,b); снова a = 9, b = 5...
Amoeba (2008-05-19 00:39:00) [31]Судя по приведенному коду интерфейс спроектирован крайне неудачно. Такие задачи решаются иначе. Для игрового поля сапера надо использовать DrawGrid. И никакого полчища Label'ов тогда не не понадобится.
Werewolf-Prankster (2008-05-19 00:01:00) [32]2No_Dead
Нет, просто копирнул с Help'a, т.к. влом былопереписывать код ошибки.
ЗЫ Лежит скрином
2Сергей М.
Не подскажете что можно сделать?
No_Dead (2008-05-18 23:56:00) [33]> Project xxxx
))) это ж какое имя должно быть%) ... секретное:)... наверно какое-то магическое слово
Сергей М. (2008-05-18 23:54:00) [34]Проблема в переполнении стека, вызванного бесконечным рекурсивном вызове процедуры.
Ищи ошибку в логике определения условия выхода из рекурсивного вызова