2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Шахматы: загрузка сохраненной игры
Сообщение22.05.2012, 15:19 
Задание сохранить положение фигур на шахматной доске,чтобы после закрытия игры, была возможность загрузить сохраненную игру и продолжить играть или начать новую игру.
Моя задумка:расставляю фигуры в начальное положение.Если надо загрузить сохраненную игру, то Фигуры расставляю по координатам из Stringgrid2. Если координаты не записаны, то фигура удаляется.
Ошибка: Через фигуры, которые были срублены до закрытия нельзя ходить, хотя на доске их не появляется. Подскажите, пожалуйста, как правильно их удалить Я думала, что надо прописать Tag,но у меня не получается:oops:

Вот код загрузки сохраненной игры: (В Stgringgride1 записывается история ходов, Nextturn-цвет фигуры, которая ходит)
Код:
procedure TChess.N3Click(Sender: TObject);
var i:integer;    a:coordinaty;
begin
Try
assignFile(x1,'x.txt');
Reset(x1);
  for i:=0 to 31 do
  begin
   Readln(x1,s);
   StringGrid2.Cells[0,i]:=s;
  end;
   CloseFile(x1);

except
  assignFile(x1,'x.txt');
  Rewrite(x1);


end;
Try
assignFile(y1,'y.txt');
Reset(y1);
  for i:=0 to 31 do
  begin
   Readln(y1,s);
   StringGrid2.Cells[1,i]:=s;
  end;
   CloseFile(y1);

except
  assignFile(y1,'y.txt');
  Rewrite(y1);


end;
Try
assignFile(name1,'Name.txt');
Reset(name1);
  for i:=0 to 99 do
  begin
   Readln(name1,s);
   StringGrid1.Cells[0,i]:=s;
  end;
   CloseFile(name1);

except
  assignFile(name1,'Name.txt');
  Rewrite(name1);


end;

  Try
assignFile(Figur1,'Figur.txt');
Reset(Figur1);
  for i:=0 to 99 do
  begin
   Readln(Figur1,s);
   StringGrid1.Cells[1,i]:=s;
  end;
   CloseFile(Figur1);
except
  assignFile(Figur1,'Figur.txt');
  Rewrite(Figur1);

end;

  Try
assignFile(nachhod1,'Nachhod.txt');
Reset(nachhod1);
  for i:=0 to 99 do
  begin
   Readln(nachhod1,s);
   StringGrid1.Cells[2,i]:=s;
  end;
   CloseFile(nachhod1);
except
  assignFile(nachhod1,'Nachhod.txt');
  Rewrite(nachhod1);

end;

  Try
assignFile(konhod1,'Konhod.txt');
Reset(konhod1);
for i:=0 to 99 do
  begin
   Readln(konhod1,s);
   StringGrid1.Cells[3,i]:=s;
  end;
   CloseFile(konhod1);
except
  assignFile(konhod1,'Konhod.txt');
  Rewrite(konhod1);

end;

Try
assignFile(rub1,'rub.txt');
Reset(rub1);
for i:=0 to 99 do
  begin
   Readln(rub1,s);
   StringGrid1.Cells[4,i]:=s;
  end;
   CloseFile(rub1);
except
  assignFile(rub1,'kol.txt');
  Rewrite(rub1);

end;
for i:=0 to 99 do if (Stringgrid1.Cells[0,i]<>'') then nomer:=i+2;

for i:=1 to 32 do begin
if (Stringgrid2.Cells[0,i-1]<>'') then     begin
         a[1]:= Strtoint(Stringgrid2.Cells[0,i-1]);
         a[2]:= Strtoint(Stringgrid2.Cells[1,i-1]);
         Figures[i].Place:=a;
         end;
if (Stringgrid2.Cells[0,i-1]='') then  begin  figures[i].Free;   end;
end;

if (nomer div 2)=0 then Nextturn:=False;

end;

 
 
 
 Re: Шахматы: загрузка сохраненной игры
Сообщение22.05.2012, 15:27 
...Вы с ума сошли, что ли — историю ходов и положение макисмум 32 фигур на десять файлов размазывать? Шахматная доска сохраняется очень просто: пишем в файл восемь строчек, в каждой строчке — данные восемь клеток, примерно так: ". . BK . WP . . ." — две пустые клетки, черный король, пустая клетка, белая пешка, три пустые клетки. Что именно вы делаете — нет ни малейшего желания разбираться, извините.

 
 
 
 Re: Шахматы: загрузка сохраненной игры
Сообщение22.05.2012, 17:05 
Я не умею выгружать по-другому. А ошибка скорее всего вот здесь:
Код:
for i:=1 to 32 do begin
if (Stringgrid2.Cells[0,i-1]<>'') then     begin
         a[1]:= Strtoint(Stringgrid2.Cells[0,i-1]);
         a[2]:= Strtoint(Stringgrid2.Cells[1,i-1]);
         Figures[i].Place:=a;
         end;
if (Stringgrid2.Cells[0,i-1]='') then  begin  figures[i].Free;   end;
end;

if (nomer div 2)=0 then Nextturn:=False;

А именно там где написано figures[i].Free;
Я просто не знаю как до конца фигуру удалить(

-- Вт май 22, 2012 20:17:56 --

Дело в том, что фигуры и при рубке удаляются, но перепрыгнуть то место, на котором они стояли другая фигура не может. Там прописано так же figures[i].Free;

 
 
 
 Re: Шахматы: загрузка сохраненной игры
Сообщение22.05.2012, 19:43 
Всегда вместо xxx.Free пишите FreeAndNil(xxx), особенно пока не научились аккуратно управлять памятью. Впрочем, и когда научитесь — тоже так пишите.

-- Вт май 22, 2012 20:45:07 --

И честно, организация фигур и доски такая косая, что даже не хочется вникать в детали.

 
 
 
 Re: Шахматы: загрузка сохраненной игры
Сообщение23.05.2012, 14:51 
Посмотрите в сторону FEN.
Это очень распространенный формат для хранения позиции.

 
 
 
 Re: Шахматы: загрузка сохраненной игры
Сообщение26.05.2012, 08:57 
Joker_vD в сообщении #574767 писал(а):
Всегда вместо xxx.Free пишите FreeAndNil(xxx), особенно пока не научились аккуратно управлять памятью. Впрочем, и когда научитесь — тоже так пишите.

-- Вт май 22, 2012 20:45:07 --


Спасибо Вам огромное!!!!

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group