![]() |
| ||
|
|
Новости |
Поиск |
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-20 17:56:00) [1]Наконец-то решил проблемму. Оказалось, всего-то не доставало еще нескольких влагов )
ANB (2008-05-20 09:42:00) [2]
> TEhDBGrid :) вкупе с ораклом и реализацией открытия минных
> полей через хранимку
Милин. Такая идея мне в голову не приходила :) Кистате, возможно, реализация была бы еще проще.
Anatoly Podgoretsky (2008-05-19 22:02:00) [3]
> Werewolf-Prankster (19.05.08 16:45) [23]
Что то не создано.
Amoeba (2008-05-19 19:49:00) [4]Речь идет о TDrawGrid с его событиями OnDrawCell и OnClick, методом MouseToCell и рядом свойств.
Werewolf-Prankster (2008-05-19 19:40:00) [5]2Palladin
Чесно говоря, ничего не понял из того что ты сказал )
Palladin (2008-05-19 18:07:00) [6]TDrawGrid, наверное, если ANB не имел ввиду TEhDBGrid :) вкупе с ораклом и реализацией открытия минных полей через хранимку
вот это было бы круто :)
Werewolf-Prankster (2008-05-19 18:05:00) [7]Только есть одна большая проблемма. Я не знаю что такое грид
ANB (2008-05-19 17:52:00) [8]
> У меня уже нет времени что либо переделывать. Можно ли как-
> то подправить этот код?
Сапер пишется с нуля на гриде за 2 часа.
Лучше все переделать.
Werewolf-Prankster (2008-05-19 16:50:00) [9]Хэх, будут меня ругать за дабл пост...
>B - Это поле лейблов выполняющих роль кнопки (не надо меня ругать за >такую криворукость)
>Label - Само поле
Label - Поле из мин и цифр.
Werewolf-Prankster (2008-05-19 16:48:00) [10]Вот забыл, еще так пробовал:
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:47:00) [11]B - Это поле лейблов выполняющих роль кнопки (не надо меня ругать за такую криворукость)
Label - Само поле
Werewolf-Prankster (2008-05-19 16:45:00) [12]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..."
Palladin (2008-05-19 16:35:00) [13]что то нифига не понял, то у тебя компоненты с B начинаются, то с Label...
Palladin (2008-05-19 16:33:00) [14]
> TLabel(FindComponent ('Label'+inttostr(a)+inttostr(b))).
> tag=1
то есть все tag у всех TLabel изначально выставленны в 1 я так понял
а текст ошибки приведи здесь, я изображение посмотреть не могу
Werewolf-Prankster (2008-05-19 15:22:00) [15]Код мне писать не надо, просто объясните в чем ошибка, а я уже буду пробовать разобраться.
Werewolf-Prankster (2008-05-19 15:10:00) [16]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
Сергей М. (2008-05-19 15:04:00) [17]
> если не сдам на этой неделе, не получу 5
А раньше, когда времени было достаточно, ты чем был занят ?)
> визуальный режим Delphi мы начали учить 4-5 пар назад
Да он здесь собственно и ни причем.
Только не говори, что понятие рекурсии вам не преподавали)
Palladin (2008-05-19 15:03:00) [18]я тебе указал на логическую ошибку, остальную часть оценки зарабатывай...
Werewolf-Prankster (2008-05-19 15:01:00) [19]2Palladin
Я мельком слыщал про переменную Tag, она, насколько я понимаю, уникальна для каждого объекта. Как к ней обратиться?
Palladin (2008-05-19 14:59:00) [20]и флага открыто поле или закрыто у тебя конечно нет? ты понимаешь, что твой алгоритм скачет между двумя (и более полями) потому что не знает как ему остановиться?