Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];

Вниз

Ошибка: "Project xxxx raised exception class..."   Найти похожие ветки 

 
Werewolf-Prankster   (2008-05-18 23:33) [0]

Делаю Сапер.
Код открытия пустых клеток:
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

Не пойму в чем проблемма, помогите пожалуйста )


 
Сергей М. ©   (2008-05-18 23:54) [1]

Проблема в переполнении стека, вызванного бесконечным рекурсивном вызове процедуры.

Ищи ошибку в логике определения условия выхода из рекурсивного вызова


 
No_Dead ©   (2008-05-18 23:56) [2]

> Project xxxx

))) это ж какое имя должно быть%) ... секретное:)... наверно какое-то магическое слово


 
Werewolf-Prankster   (2008-05-19 00:01) [3]

2No_Dead
Нет, просто копирнул с Help"a, т.к. влом былопереписывать код ошибки.
ЗЫ Лежит скрином

2Сергей М.
Не подскажете что можно сделать?


 
Amoeba ©   (2008-05-19 00:39) [4]

Судя по приведенному коду интерфейс спроектирован крайне неудачно. Такие задачи решаются иначе. Для игрового поля сапера надо использовать DrawGrid. И никакого полчища Label"ов тогда не не понадобится.


 
guav ©   (2008-05-19 01:00) [5]

Ну допустим  a = 9 b = 5, из Open вызывается open(a+1,b); a = 10, b = 5 , оттуда open(a-1,b); снова a = 9, b = 5...


 
Германн ©   (2008-05-19 01:13) [6]


> Amoeba ©   (19.05.08 00:39) [4]
>
> Судя по приведенному коду интерфейс спроектирован крайне
> неудачно. Такие задачи решаются иначе. Для игрового поля
> сапера надо использовать DrawGrid. И никакого полчища Label"ов
> тогда не не понадобится.
>

Автору на это намекали, но он не внял.
http://delphimaster.net/view/2-1210427273/


 
Renegat   (2008-05-19 08:56) [7]

У меня однажды была ситуация, когда рекурсивная процедура не учитывала границы массива, и в итоге выходила за его пределы настолько, что рушила всю секцию данных :)


 
Werewolf-Prankster   (2008-05-19 14:50) [8]

2Германн
Чесно, большую чать этой темы увидел только что.
2All
У меня уже нет времени что либо переделывать. Можно ли как-то подправить этот код?


 
Palladin ©   (2008-05-19 14:54) [9]

Можно. Я даже вижу что ты не сделал для полного счастья.


 
Werewolf-Prankster   (2008-05-19 14:54) [10]

2Palladin
И что же? :)


 
Palladin ©   (2008-05-19 14:55) [11]


> Werewolf-Prankster   (19.05.08 14:54) [10]

а ты подумай... что значит условие if (pole[a,b]=" ") ?


 
Werewolf-Prankster   (2008-05-19 14:56) [12]

2Palladin это значит что поле без цифр и мин.


 
Сергей М. ©   (2008-05-19 14:57) [13]


> У меня уже нет времени что либо переделывать


А что за спешка ?


 
Werewolf-Prankster   (2008-05-19 14:58) [14]

2Сергей М.
Я только учусь, и если не сдам на этой неделе, не получу 5 ))

PS То что оговаривалось в другой теме, я не понял лишь по своей неосведомленности, т.к. визуальный режим Delphi мы начали учить 4-5 пар назад )


 
Palladin ©   (2008-05-19 14:59) [15]

и флага открыто поле или закрыто у тебя конечно нет? ты понимаешь, что твой алгоритм скачет между двумя (и более полями) потому что не знает как ему остановиться?


 
Werewolf-Prankster   (2008-05-19 15:01) [16]

2Palladin
Я мельком слыщал про переменную Tag, она, насколько я понимаю, уникальна для каждого объекта. Как к ней обратиться?


 
Palladin ©   (2008-05-19 15:03) [17]

я тебе указал на логическую ошибку, остальную часть оценки зарабатывай...


 
Сергей М. ©   (2008-05-19 15:04) [18]


> если не сдам на этой неделе, не получу 5


А раньше, когда времени было достаточно, ты чем был занят ?)


> визуальный режим Delphi мы начали учить 4-5 пар назад


Да он здесь собственно и ни причем.
Только не говори, что понятие рекурсии вам не преподавали)


 
Werewolf-Prankster   (2008-05-19 15:10) [19]

2Сергей М.
>>Только не говори, что понятие рекурсии вам не преподавали)
Нет, чесно. Я сейчас в техникуме, и на первом курсе мы в основном проходили только основные алгоритмы и принципы, начиная с блок схем. Так про рекурсию я слышу в первые.
>>А раньше, когда времени было достаточно, ты чем был занят ?)
А раньше мучался сам ))

2Palladin
:)
Вот попробовал с флагом, но теперь другая ошибка:

if (pole[a,b]=" ") and (TLabel(FindComponent ("Label"+inttostr(a)+inttostr(b))).tag=1) then
  begin
   TLabel(FindComponent ("B"+inttostr(a)+inttostr(b))).visible:=false;
   TLabel(FindComponent ("Label"+inttostr(a)+inttostr(b))).tag:=0;    
   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


http://img222.imageshack.us/img222/4467/errorwd4.gif


 
Werewolf-Prankster   (2008-05-19 15:22) [20]

Код мне писать не надо, просто объясните в чем ошибка, а я уже буду пробовать разобраться.


 
Palladin ©   (2008-05-19 16:33) [21]


> TLabel(FindComponent ("Label"+inttostr(a)+inttostr(b))).
> tag=1

то есть все tag у всех TLabel изначально выставленны в 1 я так понял

а текст ошибки приведи здесь, я изображение посмотреть не могу


 
Palladin ©   (2008-05-19 16:35) [22]

что то нифига не понял, то у тебя компоненты с B начинаются, то с Label...


 
Werewolf-Prankster   (2008-05-19 16:45) [23]

2Palladin
>то есть все tag у всех TLabel изначально выставленны в 1 я так понял

Правильно

>а текст ошибки приведи здесь, я изображение посмотреть не могу

"Project Saper.exe raised exception class EAccessViolation with message "AccessViolation at address 0043141B in module" "Saper.exe". Read of address 00000057". Process stopped..."


 
Werewolf-Prankster   (2008-05-19 16:47) [24]

B - Это поле лейблов выполняющих роль кнопки (не надо меня ругать за такую криворукость)
Label - Само поле


 
Werewolf-Prankster   (2008-05-19 16:48) [25]

Вот забыл, еще так пробовал:

if (pole[a,b]=" ") and (pole[a,b]<>"X") then
  begin
   TLabel(FindComponent ("B"+inttostr(a)+inttostr(b))).visible:=false;
   pole[a,b]:="X";
   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


 
Werewolf-Prankster   (2008-05-19 16:50) [26]

Хэх, будут меня ругать за дабл пост...

>B - Это поле лейблов выполняющих роль кнопки (не надо меня ругать за >такую криворукость)
>Label - Само поле
Label - Поле из мин и цифр.


 
ANB   (2008-05-19 17:52) [27]


> У меня уже нет времени что либо переделывать. Можно ли как-
> то подправить этот код?

Сапер пишется с нуля на гриде за 2 часа.
Лучше все переделать.


 
Werewolf-Prankster   (2008-05-19 18:05) [28]

Только есть одна большая проблемма. Я не знаю что такое грид


 
Palladin ©   (2008-05-19 18:07) [29]

TDrawGrid, наверное, если ANB не имел ввиду TEhDBGrid :) вкупе с ораклом и реализацией открытия минных полей через хранимку

вот это было бы круто :)


 
Werewolf-Prankster   (2008-05-19 19:40) [30]

2Palladin
Чесно говоря, ничего не понял из того что ты сказал )


 
Amoeba ©   (2008-05-19 19:49) [31]

Речь идет о TDrawGrid с его событиями OnDrawCell и OnClick, методом MouseToCell и рядом свойств.


 
Anatoly Podgoretsky ©   (2008-05-19 22:02) [32]


> Werewolf-Prankster   (19.05.08 16:45) [23]

Что то не создано.


 
ANB   (2008-05-20 09:42) [33]


> TEhDBGrid :) вкупе с ораклом и реализацией открытия минных
> полей через хранимку

Милин. Такая идея мне в голову не приходила :) Кистате, возможно, реализация была бы еще проще.


 
Werewolf-Prankster   (2008-05-20 17:56) [34]

Наконец-то решил проблемму. Оказалось, всего-то не доставало еще нескольких влагов )



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.007 c
2-1211516042
AlekseyB
2008-05-23 08:14
2008.06.15
при нажатии на кнопку


15-1209662503
Andy BitOff
2008-05-01 21:21
2008.06.15
Выбираем беспроводные наушники


4-1191311204
Tonich
2007-10-02 11:46
2008.06.15
Запуск сервиса


2-1211539285
Fr1K
2008-05-23 14:41
2008.06.15
Печать


15-1210080182
Ivan2s
2008-05-06 17:23
2008.06.15
Word страницы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский