Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2011, 10:15   #1
Linka_fX
 
Регистрация: 25.03.2011
Сообщений: 4
По умолчанию шахматы

хай) я пишу шахматы на делфи 7-ой. у меня доска сделана на панель, фигуры TImage, расставлены на доске. Сегодня я описывала действие OnImageDrop. все прописала, но фигуры ходить отказываются. В чес может быть проблема? В координатах? Еще у них такая приколюха - они на пустую клетку не ходят, а вот на чужую ступают, убирая их. Help =)
Linka_fX вне форума Ответить с цитированием
Старый 25.03.2011, 10:17   #2
L_Killer
Пользователь
 
Регистрация: 21.02.2010
Сообщений: 19
По умолчанию

инетересно) я где-то полгода назад хотел себе шахматы сделать, но как-то руки не дошли))
может скинешь код? покапаюсь, может найду где ошибка =)
L_Killer вне форума Ответить с цитированием
Старый 25.03.2011, 10:56   #3
Linka_fX
 
Регистрация: 25.03.2011
Сообщений: 4
По умолчанию вот тебе код) тока он корявый, дам еще дофига работать

unit Unit1;

interface

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

type
Cvetfig = (White, Black);
TChess = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
procedure OnImageDrop(Sender, Source: TObject; X, Y: Integer);
procedure OnImageOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
public
end;
TPologenie = record
horizont: 1..8;
vertical: 1..8;
end;

type
TFigura = class (TImage)
private
FPolog: TPologenie;
procedure SetPolog(const Value: TPologenie);
private
FColor: Cvetfig;
property Polog: TPologenie read FPolog write SetPolog;
function Hod(NewPlace: TPologenie): boolean; virtual; abstract;
constructor ConstructorName(NewPlace: TPologenie);
// function Shah(NewPlace: TPologenie): boolean;
function Jump(NewPlace: TPologenie): boolean;
end;

TPawn = class(TFigura)
private
Function Hod(NewPlace: TPologenie): Boolean; override;
function Jump(NewPlace: TPologenie): boolean;
end;

TTura = class(TFigura)
private
Function Hod(NewPlace: TPologenie): Boolean; override;
function Jump(NewPlace: TPologenie): boolean;
end;

TKing = class(TFigura)
private
Function Hod(NewPlace: TPologenie): Boolean; override;
end;

TElephant = class(TFigura)
private
Function Hod(NewPlace: TPologenie): Boolean; override;
function Jump(NewPlace: TPologenie): boolean;
end;

TQueen = class(TFigura)
private
Function Hod(NewPlace: TPologenie): Boolean; override;
function Jump(NewPlace: TPologenie): boolean;
end;

THorse = class(TFigura)
private
Function Hod(NewPlace: TPologenie): Boolean; override;
end;

var
Chess: TChess;
Box: array[1..8,1..8] of TPanel;
words: array[1..32] of TLabel;
figure: array[1..32] of TFigura;
NextHod: White..Black;
implementation

{$R *.dfm}
Linka_fX вне форума Ответить с цитированием
Старый 25.03.2011, 10:56   #4
Linka_fX
 
Регистрация: 25.03.2011
Сообщений: 4
По умолчанию

procedure TChess.FormCreate(Sender: TObject);
var
place: TPologenie;
i, j: byte;
begin
ClientHeight:=440;
ClientWidth:=440;
BorderStyle:=bsSingle;
Chess.Color:=clGradientActiveCaptio n;
Chess.Font.Size:=10;
Chess.Font.Style:=[fsBold];



for j:=1 to 8 do
for i:=1 to 8 do
begin
Box[i,9-j]:=TPanel.Create(Chess);
Box[i,9-j].parent:=Chess;
Box[i,9-j].Height:=50;
Box[i,9-j].Width:=50;
Box[i,9-j].Left:=20+50*(i-1);
Box[i,9-j].Top:=20+50*(j-1);
if odd(i+j)
then Box[i,9-j].Color:=clNavy
else Box[i,9-j].Color:=clSilver;
Box[i,9-j].OnDragDrop := Chess.OnImageDrop;
Box[i,9-j].OnDragOver := Chess.OnImageOver;
End;
for i:=1 to 8 do
begin
words[i]:=TLabel.create(Chess);
words[i+8]:=TLabel.Create(Chess);
words[i+16]:=TLabel.create(Chess);
words[i+24]:=TLabel.create(Chess);
words[i].Parent:=Chess;
words[i+8].Parent:=Chess;
words[i+16].Parent:=Chess;
words[i+24].Parent:=Chess;
words[i].Top:=41+(i-1)*50;
words[i+8].Top:=41+(i-1)*50;
words[i+16].Top:=424;
words[i+24].Top:=6;
words[i].Left:=5;
words[i+8].Left:=429;
words[i+16].Left:=41+(i-1)*50;
words[i+24].Left:=41+(i-1)*50;
words[i].Caption:=intToStr(9-i);
words[i+8].Caption:=intToStr(9-i);
words[i+16].Caption:=chr(64+i);
words[i+24].Caption:=chr(64+i);
end;

for i:= 1 to 8 do
begin
place.horizont := i;
place.vertical := 2;
figure[i] := TPawn.ConstructorName(place);
end;


for i := 1 to 8 do
begin
place.horizont := i;
place.vertical := 7;
figure[i + 8] := TPawn.ConstructorName(place);
end;

place.horizont := 2;
place.vertical := 1;
figure[17] := THorse.ConstructorName(place);

place.horizont := 7;
place.vertical := 1;
figure[18] := THorse.ConstructorName(place);

place.horizont := 2;
place.vertical := 8;
figure[19] := THorse.ConstructorName(place);

place.horizont := 7;
place.vertical := 8;
figure[20] := THorse.ConstructorName(place);

place.horizont := 1;
place.vertical := 1;
figure[21] := TTura.ConstructorName(place);

place.horizont := 8;
place.vertical := 1;
figure[22] := TTura.ConstructorName(place);

place.horizont := 1;
place.vertical := 8;
figure[23] := TTura.ConstructorName(place);

place.horizont := 8;
place.vertical := 8;
figure[24] := TTura.ConstructorName(place);

place.horizont := 3;
place.vertical := 1;
figure[25] := TElephant.ConstructorName(place);

place.horizont := 6;
place.vertical := 1;
figure[26] := TElephant.ConstructorName(place);

place.horizont := 6;
place.vertical := 8;
figure[27] := TElephant.ConstructorName(place);

place.horizont := 3;
place.vertical := 8;
figure[28] := TElephant.ConstructorName(place);

place.horizont := 4;
place.vertical := 1;
figure[29] := TQueen.ConstructorName(place);

place.horizont := 4;
place.vertical := 8;
figure[30] := TQueen.ConstructorName(place);

place.horizont := 5;
place.vertical := 1;
figure[31] := TKing.ConstructorName(place);

place.horizont := 5;
place.vertical := 8;
figure[32] := TKing.ConstructorName(place);
end;
Linka_fX вне форума Ответить с цитированием
Старый 25.03.2011, 10:57   #5
Linka_fX
 
Регистрация: 25.03.2011
Сообщений: 4
По умолчанию

procedure TChess.FormClose(Sender: TObject; var Action: TCloseAction);
var i,j:integer;
begin
for i:=1 to 32 do
figure[i].Free;

for i:=1 to 8 do
for j:=1 to 8 do
box[i,j].Free;

for i:=1 to 32 do
words[i].Free;
end;

{TPawn }

function TPawn.Hod(NewPlace: TPologenie): Boolean;
var
i: Integer;
proverka: Boolean;

begin
proverka := false;
for i := 1 to 32 do
if (Figure[i].Visible) and (Figure[i].Polog.horizont = NewPlace.horizont) and
(Figure[i].Polog.vertical = NewPlace.vertical) then
proverka := true;

if proverka = false then
begin
if (self.FColor = Black) then
if (self.Polog.vertical) - 1 = 2 then
result := ((self.Polog.vertical) - (NewPlace.vertical) = -2) and
(self.Polog.horizont = NewPlace.horizont) or
(((self.Polog.vertical) - (NewPlace.vertical) = -1) and
(self.Polog.horizont = NewPlace.horizont))
else
result := ((self.Polog.vertical) - (NewPlace.vertical) = -1) and
(self.Polog.horizont = NewPlace.horizont);

if (self.FColor = White) then
if (self.Polog.vertical) - 1 = 7 then
result := ((self.Polog.vertical) - (NewPlace.vertical) = 2) and
(self.Polog.horizont = NewPlace.horizont) or
((self.Polog.vertical) - (NewPlace.vertical) = 1) and
(self.Polog.horizont = NewPlace.horizont)
else
result := ((self.Polog.vertical) - (NewPlace.vertical) = 1) and
(self.Polog.horizont = NewPlace.horizont);
end;

if proverka = true then
begin
if (self.FColor = White) then
result := ((abs((self.Polog.horizont) - (NewPlace.horizont)) = 1) and
(((self.Polog.vertical) - (NewPlace.vertical)) = 1));
if (self.FColor = Black) then
result := ((abs(self.Polog.horizont) - (NewPlace.horizont)) = 1) and
(((self.Polog.vertical) - (NewPlace.vertical)) = -1);
end;

end;

procedure TChess.OnImageDrop(Sender, Source: TObject; X, Y: Integer);
var
Polog1: TPologenie;
Place1: TPologenie;

Begin
if Sender is TPanel then
begin
Polog1.horizont := ((TPanel(Sender).Left - 20) div 50);
Polog1.vertical := ((TPanel(Sender).Top - 20) div 50);

if (TFigura(Source).Visible) and (TFigura(Source).FColor = NextHod ) and
(TFigura(Source).Hod(Polog1)) and (TFigura(Source).Jump(Polog1)) {and
(TFigura(Source).Shah(Polog1))} then
begin
Place1 := TFigura(Source).Polog;
TFigura(Source).Polog := Polog1;
if NextHod = White then
NextHod:= Black else
NextHod:= White;
end;
end;

if Sender is TFigura then
begin
Polog1.horizont := ((TPanel(Sender).Left - 20) div 50) + 2;
Polog1.vertical := (((TPanel(Sender).Top - 20) div 50)) + 2;
if (TFigura(Source).Visible) and (TFigura(Source).FColor = NextHod) and
(TFigura(Source).Hod(Polog1)) and (TFigura(Source).Jump(Polog1)) {and
(TFigura(Source).Shah(Polog1))} then
begin
Place1 := TFigura(Source).Polog;
TFigura(Source).Polog := Polog1;

if NextHod = White then
NextHod:= Black else
NextHod:= White;
//TFigura(Sender).Free;
TFigura(Sender).Hide;
end;
end;
end;

procedure TChess.OnImageOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := true;
end;

function TPawn.Jump(NewPlace: TPologenie): boolean;
begin

end;

{ TFigura }

constructor TFigura.ConstructorName(NewPlace: TPologenie);
begin
inherited Create(Chess);
DragMode := dmAutomatic;
OnDragDrop := Chess.OnImageDrop;
OnDragOver := Chess.OnImageOver;
Transparent := true;
if (NewPlace.vertical<4) then
begin
Picture.Bitmap.LoadFromResourceName (HInstance, ClassName + '_bl');
FColor:= (Black);
end
else
begin
Picture.Bitmap.LoadFromResourceName (HInstance, ClassName + '_wh');
FColor := (White);
end;
Width := 40;
Height := 40;
Polog := NewPlace;
DragMode := dmAutomatic;
Top:=5;
Left:=5;
end;


function TFigura.Jump(NewPlace: TPologenie): Boolean;
var
i: byte;
begin
end;

procedure TFigura.SetPolog(const Value: TPologenie);
begin
FPolog := Value;
Parent := Box[Value.horizont, Value.vertical];
end;

{ TTura }

function TTura.Hod(NewPlace: TPologenie): Boolean;
begin

end;

function TTura.Jump(NewPlace: TPologenie): boolean;
begin

end;

{ TKing }

function TKing.Hod(NewPlace: TPologenie): Boolean;
begin

end;

{ TElephant }

function TElephant.Hod(NewPlace: TPologenie): Boolean;
begin

end;

function TElephant.Jump(NewPlace: TPologenie): boolean;
begin

end;

{ TQueen }

function TQueen.Hod(NewPlace: TPologenie): Boolean;
begin

end;

function TQueen.Jump(NewPlace: TPologenie): boolean;
begin
end;
{ THorse }
function THorse.Hod(NewPlace: TPologenie): Boolean;
begin
end;
end.
Linka_fX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ и шахматы. Denis B Помощь студентам 3 25.03.2011 15:01
шахматы demonara Помощь студентам 0 24.12.2010 17:02
Шахматы neklans Общие вопросы Delphi 11 23.09.2010 12:14
Шахматы онлайн LAGOX PHP 1 08.05.2009 21:15
Шахматы Shchetnev Фриланс 10 27.05.2008 00:36