Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> возникает ошибка, что за класс "EAccessViolation" 
V
    Опции темы
Lianamir
Дата 23.1.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 8.9.2007

Репутация: нет
Всего: нет



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

Добавлено через 1 минуту и 25 секунд
Код

unit Un15;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)

      //эти процедуры вставляем вручную
          procedure ShowPole;
          procedure Mixer;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
const
    H = 4;   W = 4;   // размер поля - 4х4
    CH = 64; CW = 64; // размер клеток - 16х16

var
    // правильное расположение фишек
    stp : array[1..H, 1..W] of byte =
    (( 1, 2, 3, 4),
     ( 5, 6, 7, 8),
     ( 9,10,11,12),
     (13,14,15, 0));

    // игровое поле
    pole: array[1..H, 1..W] of byte;

    ex,ey: integer; // координаты пустой клетки

// новая игра
procedure NewGame;
var
    i,j: integer;
begin
    // исходное (правильное) положение
    for i:=0 to H+1 do
        for j:=0 to W+1 do
            pole[i,j] := stp[i,j];
    Form1.Mixer;    // перемешать фишки
    Form1.ShowPole; // отобразить поле
end;

// проверяет, расположены ли
// фишки в нужном порядке
function Finish: boolean;
var
    row,col: integer;
    i: integer;
begin
    row :=1; col :=1;
    Finish := True; // пусть фишки в нужном порядке
    for i:=1 to 15 do
    begin
       if pole[row,col] <> i then
       begin
            Finish:= False;
            break;
       end;
       // к следующей клетке
       if col < 4
          then inc(col)
       else begin
          col :=1;
          inc(row);
       end;
    end;
end;


// "перемещает" фишку в соседнюю пустую клетку,
// если она есть, конечно
procedure Move(cx,cy: integer);
// cx,cy - клетка, в которой игрок сделал щелчок
var
    r: integer;       // выбор игрока
begin
    // проверим, возможен ли обмен
    if not (( abs(cx-ex) = 1) and (cy-ey = 0) or
            ( abs(cy-ey) = 1) and (cx-ex = 0))
    then exit;
    // Обмен. Переместим фишку из x,y в ex,ey
    Pole[ey,ex] := Pole[cy,cx];
    Pole[cy,cx] := 0;
    ex:=cx;
    ey:=cy;
    // отрисовать поле
    Form1.ShowPole;
    if Finish then
    begin
        r := MessageDlg('Цель достигнута!'+ #13+
        'Еще раз?',mtInformation,[mbYes,mbNo],0);
        if r = mrNo then Form1.Close; // завершить работу программы
    end;
//end;
end;

// щелчок в клетке
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
    cx,cy: integer; // координаты клетки
begin
    // преобразуем координаты мыши в координаты клетки
    cx := Trunc(X / CW) + 1;
    cy := Trunc(Y / CH) + 1;
    Move(cx,cy);
end;

// выводит игровое поле
procedure TForm1.ShowPole;
var
    i,j: integer;
    x,y: integer; // x,y - координаты вывода 
                  //  текста в клетке
begin
    // сетка: вертикальные линии
    for i:= 1 to W - 1 do
    begin
        Canvas.MoveTo(i*CW,0);
        Canvas.LineTo(i*CW,ClientHeight);
    end;
    // сетка: горизонтальные линии
    for i:= 1 to H - 1 do
    begin
        Canvas.MoveTo(0,i*CH);
        Canvas.LineTo(ClientWidth,i*CH);
    end;

    // содержимое клеток
    // x,y - координаты вывода текста
    for i:= 1 to H do
    begin
        y:=(i-1)*CH + 15;
        for j:=1 to W do
        begin
            x:= (j-1)*CW + 15;
            case Pole[i,j] of
            0:      Canvas.TextOut(x,y,'     ');
            1..9:   Canvas.TextOut(x,y,' '+IntToStr(Pole[i,j])+'  ');
            10..15: Canvas.TextOut(x,y,IntToStr(Pole[i,j]));
            end;
        end;
    end;
end;

// "перемешивает" фишки
procedure TForm1.Mixer;
var
    x1,y1: integer; // пустая клетка
    x2,y2: integer; // эту переместить в пустую
    d: integer;     // направление, относительно пустой
    i: integer;
begin
    x1:=4;
    y1:=4;
    randomize;
    for i:= 1 to 150 do
    begin
        repeat
            x2:=x1;
            y2:=y1;
            d:=random(4)+1;
            case d of
                1: dec(x2);
                2: inc(x2);
                3: dec(y2);
                4: inc(y2);
            end;

        until (x2>=1) and (x2<=4) and (y2>=1) and (y2<=4);
        // здесь определили фишку, которую
        // надо переместить в пустую клетку
        Pole[y1,x1] := Pole[y2,x2];
        Pole[y2,x2] := 0;
        x1:=x2;
        y1:=y2;
    end;
    // запомним координаты пустой клетки
    ex:= x1;
    ey:= y1;
end;


// обработка события OnCreate
procedure TForm1.FormCreate(Sender: TObject);
begin
    ClientWidth := CW * W;
    ClientHeight := CH * H;
    Canvas.Font.Name := 'Times New Roman';
    Canvas.Font.Size := 22;
    NewGame;
end;

// обработка события OnPaint
procedure TForm1.FormPaint(Sender: TObject);
begin
    Form1.ShowPole;
end;









end.


Добавлено через 4 минуты и 9 секунд
В итоге при запуске выскакивает ошибка

Project  game15.exe raised exception class  EAccessViolation  with message ‘Access violation at address 00420c78 in module ‘game15.exe’.  Read of address 2BC845E5’.
PM MAIL ICQ   Вверх
VICTAR
Дата 23.1.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



Код

pole: array[1..H, 1..W] of byte; //!!!


Код

for i:=0 to H+1 do //обрати внимание
        for j:=0 to W+1 do //на индексы!!!
            pole[i,j] := stp[i,j];

PM MAIL   Вверх
Lianamir
Дата 23.1.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 8.9.2007

Репутация: нет
Всего: нет



Сейчас посмотрю,.... smile

Добавлено через 5 минут и 35 секунд
Я не вижу ошибки smile , подскажи плиз, что не так??? smile 
PM MAIL ICQ   Вверх
VICTAR
Дата 23.1.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



Код

for i:=1 to H do //обрати внимание
        for j:=1 to W do //на индексы!!!
            pole[i,j] := stp[i,j];

ps может где еще есть ошибки, я не смотрел
PM MAIL   Вверх
Lianamir
Дата 23.1.2008, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 8.9.2007

Репутация: нет
Всего: нет



 smile 
Ура!!!  все работает...........спасибки
Так значит это в учебнике ошибка!!?
PM MAIL ICQ   Вверх
VICTAR
Дата 23.1.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 10
Всего: 80



Цитата(Lianamir @  23.1.2008,  12:36 Найти цитируемый пост)
Так значит это в учебнике ошибка!!? 

Так часто делают, чтобы тупо не сдирали код  smile 
PM MAIL   Вверх
Lianamir
Дата 23.1.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 8.9.2007

Репутация: нет
Всего: нет



И это действительно так...
Екзешник то ихний работает.................(на диске к книжке давался)
А в исходнике при компиляции выдает ту же ошибку......................ХМ!
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0505 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.