![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 25.03.2011
Сообщений: 4
|
![]()
хай) я пишу шахматы на делфи 7-ой. у меня доска сделана на панель, фигуры TImage, расставлены на доске. Сегодня я описывала действие OnImageDrop. все прописала, но фигуры ходить отказываются. В чес может быть проблема? В координатах? Еще у них такая приколюха - они на пустую клетку не ходят, а вот на чужую ступают, убирая их. Help =)
|
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 21.02.2010
Сообщений: 19
|
![]()
инетересно) я где-то полгода назад хотел себе шахматы сделать, но как-то руки не дошли))
может скинешь код? покапаюсь, может найду где ошибка =) |
![]() |
![]() |
![]() |
#3 |
Регистрация: 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} |
![]() |
![]() |
![]() |
#4 |
Регистрация: 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; |
![]() |
![]() |
![]() |
#5 |
Регистрация: 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. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |