2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Шахматы: загрузка сохраненной игры
Сообщение22.05.2012, 15:19 


20/05/11
22
Задание сохранить положение фигур на шахматной доске,чтобы после закрытия игры, была возможность загрузить сохраненную игру и продолжить играть или начать новую игру.
Моя задумка:расставляю фигуры в начальное положение.Если надо загрузить сохраненную игру, то Фигуры расставляю по координатам из 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 
Заслуженный участник


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

 Профиль  
                  
 
 Re: Шахматы: загрузка сохраненной игры
Сообщение22.05.2012, 17:05 


20/05/11
22
Я не умею выгружать по-другому. А ошибка скорее всего вот здесь:
Код:
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 
Заслуженный участник


09/09/10
3729
Всегда вместо xxx.Free пишите FreeAndNil(xxx), особенно пока не научились аккуратно управлять памятью. Впрочем, и когда научитесь — тоже так пишите.

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

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

 Профиль  
                  
 
 Re: Шахматы: загрузка сохраненной игры
Сообщение23.05.2012, 14:51 


23/04/10
8
Посмотрите в сторону FEN.
Это очень распространенный формат для хранения позиции.

 Профиль  
                  
 
 Re: Шахматы: загрузка сохраненной игры
Сообщение26.05.2012, 08:57 


20/05/11
22
Joker_vD в сообщении #574767 писал(а):
Всегда вместо xxx.Free пишите FreeAndNil(xxx), особенно пока не научились аккуратно управлять памятью. Впрочем, и когда научитесь — тоже так пишите.

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


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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group